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 |