class Grape::Validations::Types::ArrayCoercer
Coerces elements in an array. It might be an array of strings or integers or an array of arrays of integers.
It could’ve been possible to use an of
method (dry-rb.org/gems/dry-types/1.2/array-with-member/) provided by dry-types. Unfortunately, it doesn’t work for Grape
because of behavior of Virtus which was used earlier, a ‘Grape::Validations::Types::PrimitiveCoercer` maintains Virtus behavior in coercing.
Attributes
Public Class Methods
Source
# File lib/grape/validations/types/array_coercer.rb, line 15 def initialize(type, strict = false) super @coercer = scope::Array @subtype = type.first end
Calls superclass method
Public Instance Methods
Source
# File lib/grape/validations/types/array_coercer.rb, line 22 def call(_val) collection = super return collection if collection.is_a?(InvalidValue) coerce_elements collection end
Calls superclass method
Protected Instance Methods
Source
# File lib/grape/validations/types/array_coercer.rb, line 33 def coerce_elements(collection) return if collection.nil? collection.each_with_index do |elem, index| return InvalidValue.new if reject?(elem) coerced_elem = elem_coercer.call(elem) return coerced_elem if coerced_elem.is_a?(InvalidValue) collection[index] = coerced_elem end collection end
Source
# File lib/grape/validations/types/array_coercer.rb, line 55 def elem_coercer @elem_coercer ||= DryTypeCoercer.coercer_instance_for(subtype, strict) end
Source
# File lib/grape/validations/types/array_coercer.rb, line 51 def reject?(val) val.nil? end
This method maintains logic which was defined by Virtus for arrays. Virtus doesn’t allow nil in arrays.