Class: Objecheck::Validator::KeyValueRule

Inherits:
Object
  • Object
show all
Defined in:
lib/objecheck/validator/key_value_rule.rb

Overview

KeyValueRule validates key/value in the target by using each_pair

Instance Method Summary collapse

Constructor Details

#initialize(validator, key_value_schema) ⇒ KeyValueRule

Returns a new instance of KeyValueRule.



20
21
22
23
24
25
26
27
# 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

Instance Method Details

#validate(target, collector) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 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