| Class | WS::Marshaling::XmlRpcMarshaler |
| In: |
vendor/actionwebservice/lib/action_web_service/vendor/ws/marshaling/xmlrpc_marshaling.rb
|
| Parent: | AbstractMarshaler |
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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