Method: ActionWebService::Casting::BaseCaster.cast
- Defined in:
- lib/action_web_service/casting.rb
.cast(value, signature_type) ⇒ Object
:nodoc:
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/action_web_service/casting.rb', line 41 def cast(value, signature_type) # :nodoc: return value if signature_type.nil? # signature.length != params.length return nil if value.nil? # XMLRPC protocol doesn't support nil values. It uses false instead. # It should never happen for SOAP. if signature_type.structured? && value.equal?(false) return nil end unless signature_type.array? || signature_type.structured? return value if canonical_type(value.class) == signature_type.type end if signature_type.array? unless value.respond_to?(:entries) && !value.is_a?(String) raise CastingError, "Don't know how to cast #{value.class} into #{signature_type.type.inspect}" end value.entries.map do |entry| cast(entry, signature_type.element_type) end elsif signature_type.structured? cast_to_structured_type(value, signature_type) elsif !signature_type.custom? cast_base_type(value, signature_type) end end |