Class: Grape::Validations::Types::MultipleTypeCoercer
- Inherits:
-
Object
- Object
- Grape::Validations::Types::MultipleTypeCoercer
- Defined in:
- lib/grape/validations/types/multiple_type_coercer.rb
Overview
This class is intended for use with Grape endpoint parameters that have been declared to be of variant-type using the +:types+ option. +MultipleTypeCoercer+ will build a coercer for each type declared in the array passed to +:types+ using build_coercer. It will apply these coercers to parameter values in the order given to +:types+, and will return the value returned by the first coercer to successfully coerce the parameter value. Therefore if +String+ is an allowed type it should be declared last, since it will always successfully "coerce" the value.
Instance Method Summary collapse
-
#call(val) ⇒ Object, InvalidValue
Coerces the given value.
-
#initialize(types, method = nil) ⇒ MultipleTypeCoercer
constructor
Construct a new coercer that will attempt to coerce values to the given list of types in the given order.
Constructor Details
#initialize(types, method = nil) ⇒ MultipleTypeCoercer
Construct a new coercer that will attempt to coerce values to the given list of types in the given order.
22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/grape/validations/types/multiple_type_coercer.rb', line 22 def initialize(types, method = nil) @method = method.respond_to?(:parse) ? method.method(:parse) : method @type_coercers = types.map do |type| if Types.multiple? type VariantCollectionCoercer.new type, @method else Types.build_coercer type, strict: !@method.nil? end end end |
Instance Method Details
#call(val) ⇒ Object, InvalidValue
Coerces the given value.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/grape/validations/types/multiple_type_coercer.rb', line 40 def call(val) # once the value is coerced by the custom method, its type should be checked val = @method.call(val) if @method coerced_val = InvalidValue.new @type_coercers.each do |coercer| coerced_val = coercer.call(val) return coerced_val unless coerced_val.is_a?(InvalidValue) end coerced_val end |