class Hamster::Cons
Public Instance Methods
schema_walk(value, mapper)
click to toggle source
# File lib/rschema_hamster/hamster_ext.rb, line 21 def schema_walk(value, mapper) fixed_size = (self.size != 1) if value == Hamster::EmptyList and !fixed_size value elsif not value.is_a?(Hamster::Cons) RSchema::ErrorDetails.new(value, 'is not a Hamster List') elsif fixed_size && value.size != self.size RSchema::ErrorDetails.new(value, "does not have #{self.size} elements") else result = Hamster.list failure = nil value.each.with_index do |subvalue, idx| subschema = (fixed_size ? self[idx] : first) subvalue_walked, error = RSchema.walk(subschema, subvalue, mapper) if error error.extend_key_path(idx) failure = error break else result = result.cons(subvalue_walked) end end return (failure or result.reverse) end end