Class: Grape::Validations::Types::CustomTypeCoercer
- Inherits:
-
Object
- Object
- Grape::Validations::Types::CustomTypeCoercer
- Defined in:
- lib/grape/validations/types/custom_type_coercer.rb
Overview
This class will detect type classes that implement a class-level parse
method. The method should accept one String
argument and should return the value coerced to the appropriate type. The method may raise an exception if there are any problems parsing the string.
Alternately an optional method
may be supplied (see the coerce_with
option of Dsl::Parameters#requires). This may be any class or object implementing parse
or call
, with the same contract as described above.
Type Checking
Calls to coerced?
will consult this class to check that the coerced value produced above is in fact of the expected type. By default this class performs a basic check against the type supplied, but this behaviour will be overridden if the class implements a class-level coerced?
or parsed?
method. This method will receive a single parameter that is the coerced value and should return true
if the value meets type expectations. Arbitrary assertions may be made here but the grape validation system should be preferred.
Alternately a proc or other object responding to call
may be supplied in place of a type. This should implement the same contract as coerced?
, and must be supplied with a coercion method
.
Direct Known Subclasses
Instance Method Summary collapse
-
#call(val) ⇒ Object
Coerces the given value.
- #coerced?(val) ⇒ Boolean
-
#initialize(type, method = nil) ⇒ CustomTypeCoercer
constructor
A new coercer for the given type specification and coercion method.
Constructor Details
#initialize(type, method = nil) ⇒ CustomTypeCoercer
A new coercer for the given type specification and coercion method.
43 44 45 46 47 |
# File 'lib/grape/validations/types/custom_type_coercer.rb', line 43 def initialize(type, method = nil) coercion_method = infer_coercion_method type, method @method = enforce_symbolized_keys type, coercion_method @type_check = infer_type_check(type) end |
Instance Method Details
#call(val) ⇒ Object
Coerces the given value.
54 55 56 57 58 59 60 61 |
# File 'lib/grape/validations/types/custom_type_coercer.rb', line 54 def call(val) coerced_val = @method.call(val) return coerced_val if coerced_val.is_a?(InvalidValue) return InvalidValue.new unless coerced?(coerced_val) coerced_val end |
#coerced?(val) ⇒ Boolean
63 64 65 |
# File 'lib/grape/validations/types/custom_type_coercer.rb', line 63 def coerced?(val) val.nil? || @type_check.call(val) end |