Method: ATValidations::Predicates#atv_hash

Defined in:
lib/at-validations.rb

#atv_hash(mask, opts = {}) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/at-validations.rb', line 36

def atv_hash(mask, opts = {})
  atv_union(
    atv_instance_of(Hash),
    atv_block do |e|
      errors = {}
      mask.each do |k, v|
        r = v.call(e[k])
        errors[k] = r unless true == r
      end
      if false == opts[:allow_extra] && (extra = (e.keys - mask.keys)).count > 0
        extra.each {|k| errors[k] = 'is not present in predicate' }
      end

      errors.empty? || Error.new(:error => 'must match hash predicate', :failures => errors)
    end
  )
end