Class: Trevl::Validator
- Inherits:
-
Object
- Object
- Trevl::Validator
- Defined in:
- lib/trevl/validator.rb
Defined Under Namespace
Classes: Result
Constant Summary collapse
- SCHEMA_DIR =
File.("schema", __dir__)
- COMPONENT_SCHEMA_PATH =
File.join(SCHEMA_DIR, "component.json")
- DOCUMENT_SCHEMA_PATH =
File.join(SCHEMA_DIR, "document.json")
Class Method Summary collapse
Instance Method Summary collapse
- #validate(yaml_string) ⇒ Object
- #validate_component(component_hash) ⇒ Object
- #validate_document(parsed) ⇒ Object
Class Method Details
.validate(yaml_string) ⇒ Object
18 19 20 |
# File 'lib/trevl/validator.rb', line 18 def self.validate(yaml_string) new.validate(yaml_string) end |
.validate_component(component_hash) ⇒ Object
22 23 24 |
# File 'lib/trevl/validator.rb', line 22 def self.validate_component(component_hash) new.validate_component(component_hash) end |
Instance Method Details
#validate(yaml_string) ⇒ Object
26 27 28 29 30 31 |
# File 'lib/trevl/validator.rb', line 26 def validate(yaml_string) parsed = YAML.safe_load(yaml_string, permitted_classes: [Hash, Symbol], aliases: true) validate_document(parsed) rescue Psych::SyntaxError => e Result.new(valid?: false, errors: ["YAML syntax error: #{e.}"]) end |
#validate_component(component_hash) ⇒ Object
33 34 35 36 |
# File 'lib/trevl/validator.rb', line 33 def validate_component(component_hash) schema_errors = component_schemer.validate(component_hash).map { |e| format_error(e) } Result.new(valid?: schema_errors.empty?, errors: schema_errors) end |
#validate_document(parsed) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/trevl/validator.rb', line 38 def validate_document(parsed) if parsed.is_a?(Array) validate_component_array(parsed) elsif parsed.is_a?(Hash) && parsed["components"].is_a?(Array) validate_component_array(parsed["components"]) elsif parsed.is_a?(Hash) Result.new(valid?: false, errors: ["Document must have a 'components' array"]) else Result.new(valid?: false, errors: ["Document must be a Hash or Array, got #{parsed.class}"]) end end |