Class: Hamster::Vector

Inherits:
Object
  • Object
show all
Defined in:
lib/rschema_hamster/hamster_ext.rb

Instance Method Summary collapse

Instance Method Details

#schema_walk(value, mapper) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/rschema_hamster/hamster_ext.rb', line 2

def schema_walk(value, mapper)
  fixed_size = (self.size != 1)

  if not value.is_a?(Hamster::Vector)
    RSchema::ErrorDetails.new(value, 'is not a Hamster::Vector')
  elsif fixed_size && value.size != self.size
    RSchema::ErrorDetails.new(value, "does not have #{self.size} elements")
  else
    value.map.with_index do |subvalue, idx|
      subschema = (fixed_size ? self[idx] : first)
      subvalue_walked, error = RSchema.walk(subschema, subvalue, mapper)
      break error.extend_key_path(idx) if error
      subvalue_walked
    end
  end
end