class Objecheck::Validator::KeyValueRule
KeyValueRule
validates key/value in the target by using each_pair
Public Class Methods
new(validator, key_value_schema)
click to toggle source
# File lib/objecheck/validator/key_value_rule.rb, line 20 def initialize(validator, key_value_schema) @key_value_rules = key_value_schema.each_with_object({}) do |(key, schema), rules| rules[key] = { required: schema.fetch(:required, true), rule: validator.compile_schema(schema[:value]) } end end
schema()
click to toggle source
# File lib/objecheck/validator/key_value_rule.rb, line 46 def self.schema [ { type: Hash, each_value: { type: Hash, key_value: { required: { required: false, value: { type: :bool } }, value: { value: { type: Hash } } } } } ] end
Public Instance Methods
validate(target, collector)
click to toggle source
# File lib/objecheck/validator/key_value_rule.rb, line 29 def validate(target, collector) if !target.respond_to?(:each_pair) collector.add_error('should respond to `each_pair`') return end @key_value_rules.each_pair do |key, rule| if target.key?(key) collector.add_prefix_in("[#{key.inspect}]") do collector.validate(target[key], rule[:rule]) end elsif rule[:required] collector.add_error("should contain key #{key.inspect}") end end end