Class: Trafaret::Hash

Inherits:
Validator show all
Extended by:
ClassMethods
Defined in:
lib/trafaret/hash.rb

Defined Under Namespace

Modules: ClassMethods

Instance Attribute Summary collapse

Attributes inherited from Validator

#converters, #options

Instance Method Summary collapse

Methods included from ClassMethods

inherited

Methods inherited from Validator

#&, #===, #add, #call, #convert, #failure, #initialize, #perform_convert, #to, #|

Constructor Details

This class inherits a constructor from Trafaret::Validator

Instance Attribute Details

#keysObject

Returns the value of attribute keys.



66
67
68
# File 'lib/trafaret/hash.rb', line 66

def keys
  @keys
end

Instance Method Details

#key(name, validator, options = {}, &blk) ⇒ Object



73
74
75
# File 'lib/trafaret/hash.rb', line 73

def key(name, validator, options = {}, &blk)
  @keys << Key.new(name, validator, options.merge(validator: validator), &blk)
end

#prepareObject



68
69
70
71
# File 'lib/trafaret/hash.rb', line 68

def prepare
  @keys = @options[:keys] || []
  @keys.concat(self.class.keys || [])
end

#validate(data) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/trafaret/hash.rb', line 77

def validate(data)
  return failure('Not a Hash') unless data.is_a?(::Hash)
  res = []
  fails = []
  @keys.each do |key|
    vdata = key.call(data)
    next unless vdata
    if vdata[1].is_a? Trafaret::Error
      fails << vdata
    else
      res << vdata
    end
  end
  if fails.blank?
    ::Hash[res]
  else
    failure(::Hash[fails])
  end
end