1. <?php
  2. /**
  3. * Dry-run metadata assertion with verbose logging.
  4. *
  5. * @param array $metadata The metadata array to validate.
  6. * @param array $conditions An array of conditions to assert. Each condition is an associative array with keys:
  7. * 'key' (metadata key), 'operator' (e.g., 'exists', 'is', 'not_is', 'array_key_exists', 'is_array'),
  8. * 'value' (expected value or array).
  9. * @return bool True if all conditions are met, false otherwise.
  10. */
  11. function dryRunMetadataAssert(array $metadata, array $conditions): bool
  12. {
  13. $allConditionsMet = true;
  14. foreach ($conditions as $condition) {
  15. $key = $condition['key'];
  16. $operator = $condition['operator'];
  17. $value = $condition['value'];
  18. // Log the condition being checked.
  19. $logMessage = "Checking condition: Key={$key}, Operator={$operator}, Value={$value}\n";
  20. error_log($logMessage); // Use error_log for consistent logging
  21. switch ($operator) {
  22. case 'exists':
  23. if (!array_key_exists($key, $metadata)) {
  24. $logMessage = "Condition failed: Key '$key' does not exist.\n";
  25. error_log($logMessage);
  26. $allConditionsMet = false;
  27. break;
  28. }
  29. break;
  30. case 'is':
  31. if ($metadata[$key] !== $value) {
  32. $logMessage = "Condition failed: Key '$key' is not equal to '$value'.\n";
  33. error_log($logMessage);
  34. $allConditionsMet = false;
  35. break;
  36. }
  37. break;
  38. case 'not_is':
  39. if ($metadata[$key] === $value) {
  40. $logMessage = "Condition failed: Key '$key' is equal to '$value' (not 'not_is').\n";
  41. error_log($logMessage);
  42. $allConditionsMet = false;
  43. break;
  44. }
  45. break;
  46. case 'array_key_exists':
  47. if (!array_key_exists($key, $metadata)) {
  48. $logMessage = "Condition failed: Key '$key' does not exist.\n";
  49. error_log($logMessage);
  50. $allConditionsMet = false;
  51. break;
  52. }
  53. break;
  54. case 'is_array':
  55. if (!is_array($metadata[$key])) {
  56. $logMessage = "Condition failed: Key '$key' is not an array.\n";
  57. error_log($logMessage);
  58. $allConditionsMet = false;
  59. break;
  60. }
  61. break;
  62. default:
  63. $logMessage = "Unknown operator: {$operator}\n";
  64. error_log($logMessage);
  65. $allConditionsMet = false;
  66. break;
  67. }
  68. }
  69. return $allConditionsMet;
  70. }
  71. // Example usage (for testing)
  72. /*
  73. $metadata = [
  74. 'name' => 'Example',
  75. 'version' => '1.0',
  76. 'dependencies' => ['library1', 'library2'],
  77. 'enabled' => true
  78. ];
  79. $conditions = [
  80. ['key' => 'name', 'operator' => 'exists'],
  81. ['key' => 'version', 'operator' => 'is', 'value' => '1.0'],
  82. ['key' => 'dependencies', 'operator' => 'is_array'],
  83. ['key' => 'enabled', 'operator' => 'is'],
  84. ['key' => 'nonexistent_key', 'operator' => 'exists'] //This will fail
  85. ];
  86. $result = dryRunMetadataAssert($metadata, $conditions);
  87. if ($result) {
  88. echo "All conditions met.\n";
  89. } else {
  90. echo "One or more conditions failed.\n";
  91. }
  92. */
  93. ?>

Add your comment