Module: ActionMCP::SchemaValidator
- Defined in:
- lib/action_mcp/schema_validator.rb
Constant Summary collapse
- DEFAULT_DIALECT =
"https://json-schema.org/draft/2020-12/schema"
Class Method Summary collapse
- .compile(schema, context: "JSON Schema") ⇒ Object
- .error_messages(errors) ⇒ Object
- .normalize(value) ⇒ Object
- .validate(schemer, value) ⇒ Object
Class Method Details
.compile(schema, context: "JSON Schema") ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/action_mcp/schema_validator.rb', line 11 def compile(schema, context: "JSON Schema") normalized_schema = normalize(schema) schema_errors = JSONSchemer.validate_schema(normalized_schema).to_a if schema_errors.any? raise ArgumentError, "Invalid #{context}: #{(schema_errors).join(', ')}" end JSONSchemer.schema(normalized_schema) rescue JSONSchemer::UnknownRef => e raise ArgumentError, "Invalid #{context}: unknown schema dialect or reference #{e..inspect}" end |
.error_messages(errors) ⇒ Object
28 29 30 |
# File 'lib/action_mcp/schema_validator.rb', line 28 def (errors) errors.filter_map { |error| error["error"] }.uniq end |
.normalize(value) ⇒ Object
32 33 34 35 36 37 38 39 40 41 |
# File 'lib/action_mcp/schema_validator.rb', line 32 def normalize(value) case value when Hash value.deep_stringify_keys when Array value.map { |item| normalize(item) } else value end end |
.validate(schemer, value) ⇒ Object
24 25 26 |
# File 'lib/action_mcp/schema_validator.rb', line 24 def validate(schemer, value) schemer.validate(normalize(value)).to_a end |