Class: Natsuzora::Contract::Validator
- Inherits:
-
Object
- Object
- Natsuzora::Contract::Validator
- Defined in:
- lib/natsuzora/contract/validator.rb
Overview
Validator for JSON data against contracts.
Constant Summary collapse
- MAX_VALIDATE_DEPTH =
64
Class Method Summary collapse
-
.validate(contract, data) ⇒ Object
Validate JSON data against a contract.
-
.validate_with_target(document, data, target: ValidationTarget::CURRENT) ⇒ Object
Validate JSON data against a contract file with diff markers.
Instance Method Summary collapse
Class Method Details
.validate(contract, data) ⇒ Object
Validate JSON data against a contract.
30 31 32 |
# File 'lib/natsuzora/contract/validator.rb', line 30 def self.validate(contract, data) new.validate_node(contract, data, []) end |
.validate_with_target(document, data, target: ValidationTarget::CURRENT) ⇒ Object
Validate JSON data against a contract file with diff markers.
35 36 37 38 |
# File 'lib/natsuzora/contract/validator.rb', line 35 def self.validate_with_target(document, data, target: ValidationTarget::CURRENT) contract = build_contract_for_target(document, target) validate(contract, data) end |
Instance Method Details
#validate_node(contract, data, path) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/natsuzora/contract/validator.rb', line 40 def validate_node(contract, data, path) raise ValidationError.new('validation depth exceeded', render_path(path)) if path.length > MAX_VALIDATE_DEPTH case contract when AST::Any nil # any value is valid when AST::Scalar validate_scalar(contract, data, path) when AST::Record validate_object(contract, data, path) when AST::List validate_array(contract, data, path) when AST::Ref raise ValidationError.new("unresolved type reference '#{contract.name}'", render_path(path)) else raise ArgumentError, "Unknown contract type: #{contract.class}" end end |