Class WS::Marshaling::XmlRpcMarshaler
In: vendor/actionwebservice/lib/action_web_service/vendor/ws/marshaling/xmlrpc_marshaling.rb
Parent: AbstractMarshaler

Methods

Public Class methods

[Source]

    # File vendor/actionwebservice/lib/action_web_service/vendor/ws/marshaling/xmlrpc_marshaling.rb, line 7
 7:       def initialize
 8:         @caster = BaseTypeCaster.new
 9:         @spec2binding = {}
10:       end

Public Instance methods

[Source]

    # File vendor/actionwebservice/lib/action_web_service/vendor/ws/marshaling/xmlrpc_marshaling.rb, line 83
83:       def cast_inbound(value, klass)
84:         if BaseTypes.base_type?(klass)
85:           value = value.to_time if value.is_a?(XMLRPC::DateTime)
86:           @caster.cast(value, klass)
87:         elsif value.is_a?(XMLRPC::FaultException)
88:           value
89:         else
90:           obj = klass.new
91:           value.each do |name, val|
92:             obj.send('%s=' % name.to_s, val)
93:           end
94:           obj
95:         end
96:       end

[Source]

    # File vendor/actionwebservice/lib/action_web_service/vendor/ws/marshaling/xmlrpc_marshaling.rb, line 66
66:       def cast_outbound(value, klass)
67:         if BaseTypes.base_type?(klass)
68:           @caster.cast(value, klass)
69:         elsif value.is_a?(Exception)
70:           XMLRPC::FaultException.new(2, value.message)
71:         elsif Object.const_defined?('ActiveRecord') && value.is_a?(ActiveRecord::Base)
72:           value.attributes
73:         else
74:           struct = {}
75:           value.instance_variables.each do |name|
76:             key = name.sub(/^@/, '')
77:             struct[key] = value.instance_variable_get(name)
78:           end
79:           struct
80:         end
81:       end

[Source]

    # File vendor/actionwebservice/lib/action_web_service/vendor/ws/marshaling/xmlrpc_marshaling.rb, line 12
12:       def marshal(param)
13:         transform_outbound(param)
14:       end

[Source]

    # File vendor/actionwebservice/lib/action_web_service/vendor/ws/marshaling/xmlrpc_marshaling.rb, line 28
28:       def register_type(spec)
29:         if @spec2binding.has_key?(spec)
30:           return @spec2binding[spec]
31:         end
32: 
33:         klass = BaseTypes.canonical_param_type_class(spec)
34:         type_binding = nil
35:         if klass.is_a?(Array)
36:           type_binding = XmlRpcArrayBinding.new(klass[0])
37:         else
38:           type_binding = XmlRpcBinding.new(klass)
39:         end
40: 
41:         @spec2binding[spec] = type_binding
42:       end

[Source]

    # File vendor/actionwebservice/lib/action_web_service/vendor/ws/marshaling/xmlrpc_marshaling.rb, line 54
54:       def transform_inbound(param)
55:         return param.value if param.info.data.nil?
56:         binding = param.info.data
57:         param.info.type = binding.klass
58:         case binding
59:         when XmlRpcArrayBinding
60:           param.value.map{|x| cast_inbound(x, binding.element_klass)}
61:         when XmlRpcBinding
62:           cast_inbound(param.value, param.info.type)
63:         end
64:       end

[Source]

    # File vendor/actionwebservice/lib/action_web_service/vendor/ws/marshaling/xmlrpc_marshaling.rb, line 44
44:       def transform_outbound(param)
45:         binding = param.info.data
46:         case binding
47:         when XmlRpcArrayBinding
48:           param.value.map{|x| cast_outbound(x, binding.element_klass)}
49:         when XmlRpcBinding
50:           cast_outbound(param.value, param.info.type)
51:         end
52:       end

[Source]

    # File vendor/actionwebservice/lib/action_web_service/vendor/ws/marshaling/xmlrpc_marshaling.rb, line 21
21:       def typed_unmarshal(obj, spec)
22:         param = obj.param
23:         param.info.data = register_type(spec)
24:         param.value = transform_inbound(param)
25:         param
26:       end

[Source]

    # File vendor/actionwebservice/lib/action_web_service/vendor/ws/marshaling/xmlrpc_marshaling.rb, line 16
16:       def unmarshal(obj)
17:         obj.param.value = transform_inbound(obj.param)
18:         obj.param
19:       end

[Validate]