Class: Portage::Ucp::SchemaValidator
- Inherits:
-
Object
- Object
- Portage::Ucp::SchemaValidator
- Defined in:
- lib/portage/ucp/schema_validator.rb
Overview
Validates data against UCP's own published JSON Schemas / OpenRPC docs —
offline, against the copy vendored under schemas/
The vendored tree mirrors https://ucp.dev/
Instance Method Summary collapse
-
#errors_for(relative_path, data) ⇒ Array<String>
Human-readable validation error messages: empty means
dataconforms. -
#initialize(version: "2026-04-08", root: File.join(__dir__, "..", "..", "..", "schemas")) ⇒ SchemaValidator
constructor
A new instance of SchemaValidator.
-
#method_names(relative_path) ⇒ Object
Method names declared by a vendored OpenRPC document, e.g.
- #valid?(relative_path, data) ⇒ Boolean
Constructor Details
#initialize(version: "2026-04-08", root: File.join(__dir__, "..", "..", "..", "schemas")) ⇒ SchemaValidator
Returns a new instance of SchemaValidator.
17 18 19 20 |
# File 'lib/portage/ucp/schema_validator.rb', line 17 def initialize(version: "2026-04-08", root: File.join(__dir__, "..", "..", "..", "schemas")) @base_url = "https://ucp.dev/#{version}/" @base_dir = File.(File.join(root, version)) end |
Instance Method Details
#errors_for(relative_path, data) ⇒ Array<String>
Returns human-readable validation error messages: empty
means data conforms.
32 33 34 35 |
# File 'lib/portage/ucp/schema_validator.rb', line 32 def errors_for(relative_path, data) schemer = JSONSchemer.schema(schema_for(relative_path), ref_resolver: method(:resolve_ref)) schemer.validate(data).map { |error| JSONSchemer::Errors.pretty(error) } end |
#method_names(relative_path) ⇒ Object
Method names declared by a vendored OpenRPC document, e.g. "services/shopping/mcp.openrpc.json" -> %w[create_checkout get_cart ...].
43 44 45 |
# File 'lib/portage/ucp/schema_validator.rb', line 43 def method_names(relative_path) load(relative_path).fetch("methods").map { |m| m.fetch("name") } end |
#valid?(relative_path, data) ⇒ Boolean
37 38 39 |
# File 'lib/portage/ucp/schema_validator.rb', line 37 def valid?(relative_path, data) errors_for(relative_path, data).empty? end |