<?php
/**
* Dry-run metadata assertion with verbose logging.
*
* @param array $metadata The metadata array to validate.
* @param array $conditions An array of conditions to assert. Each condition is an associative array with keys:
* 'key' (metadata key), 'operator' (e.g., 'exists', 'is', 'not_is', 'array_key_exists', 'is_array'),
* 'value' (expected value or array).
* @return bool True if all conditions are met, false otherwise.
*/
function dryRunMetadataAssert(array $metadata, array $conditions): bool
{
$allConditionsMet = true;
foreach ($conditions as $condition) {
$key = $condition['key'];
$operator = $condition['operator'];
$value = $condition['value'];
// Log the condition being checked.
$logMessage = "Checking condition: Key={$key}, Operator={$operator}, Value={$value}\n";
error_log($logMessage); // Use error_log for consistent logging
switch ($operator) {
case 'exists':
if (!array_key_exists($key, $metadata)) {
$logMessage = "Condition failed: Key '$key' does not exist.\n";
error_log($logMessage);
$allConditionsMet = false;
break;
}
break;
case 'is':
if ($metadata[$key] !== $value) {
$logMessage = "Condition failed: Key '$key' is not equal to '$value'.\n";
error_log($logMessage);
$allConditionsMet = false;
break;
}
break;
case 'not_is':
if ($metadata[$key] === $value) {
$logMessage = "Condition failed: Key '$key' is equal to '$value' (not 'not_is').\n";
error_log($logMessage);
$allConditionsMet = false;
break;
}
break;
case 'array_key_exists':
if (!array_key_exists($key, $metadata)) {
$logMessage = "Condition failed: Key '$key' does not exist.\n";
error_log($logMessage);
$allConditionsMet = false;
break;
}
break;
case 'is_array':
if (!is_array($metadata[$key])) {
$logMessage = "Condition failed: Key '$key' is not an array.\n";
error_log($logMessage);
$allConditionsMet = false;
break;
}
break;
default:
$logMessage = "Unknown operator: {$operator}\n";
error_log($logMessage);
$allConditionsMet = false;
break;
}
}
return $allConditionsMet;
}
// Example usage (for testing)
/*
$metadata = [
'name' => 'Example',
'version' => '1.0',
'dependencies' => ['library1', 'library2'],
'enabled' => true
];
$conditions = [
['key' => 'name', 'operator' => 'exists'],
['key' => 'version', 'operator' => 'is', 'value' => '1.0'],
['key' => 'dependencies', 'operator' => 'is_array'],
['key' => 'enabled', 'operator' => 'is'],
['key' => 'nonexistent_key', 'operator' => 'exists'] //This will fail
];
$result = dryRunMetadataAssert($metadata, $conditions);
if ($result) {
echo "All conditions met.\n";
} else {
echo "One or more conditions failed.\n";
}
*/
?>
Add your comment