Sha256: 88d6b16ab0bfdcde6c3b21ca8f2e798d55a357d14bdbcb4590104996b3b4c436
Contents?: true
Size: 1.17 KB
Versions: 2
Compression:
Stored size: 1.17 KB
Contents
module Datacaster class ArraySchema < Base def initialize(element_caster) # support of shortcut nested validation definitions, e.g. array_schema({a: [integer], b: {c: integer}}) @element_caster = shortcut_definition(element_caster) end def cast(object) object = super(object) checked_schema = object.meta[:checked_schema] || [] array = object.value return Datacaster.ErrorResult(["must be array"]) if !array.respond_to?(:map) || !array.respond_to?(:zip) return Datacaster.ErrorResult(["must not be empty"]) if array.empty? result = array.zip(checked_schema).map do |x, schema| x = Datacaster.ValidResult(x, meta: {checked_schema: schema}) @element_caster.(x) end if result.all?(&:valid?) checked_schema = result.map { |x| x.meta[:checked_schema] } Datacaster.ValidResult(result.map(&:value), meta: {checked_schema: checked_schema}) else Datacaster.ErrorResult(result.each.with_index.reject { |x, _| x.valid? }.map { |x, i| [i, x.errors] }.to_h) end end def inspect "#<Datacaster::ArraySchema [#{@element_caster.inspect}]>" end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
datacaster-2.0.2 | lib/datacaster/array_schema.rb |
datacaster-2.0.1 | lib/datacaster/array_schema.rb |