| Class | SOAP::Mapping::Registry::Map |
| In: |
lib/soap/mapping/registry.rb
|
| Parent: | Object |
# File lib/soap/mapping/registry.rb, line 179
179: def initialize(registry)
180: @obj2soap = {}
181: @soap2obj = {}
182: @registry = registry
183: end
Give priority to latter entry.
# File lib/soap/mapping/registry.rb, line 230
230: def add(obj_class, soap_class, factory, info)
231: info ||= {}
232: (@obj2soap[obj_class] ||= []).unshift([soap_class, factory, info])
233: (@soap2obj[soap_class] ||= []).unshift([obj_class, factory, info])
234: end
# File lib/soap/mapping/registry.rb, line 236
236: def clear
237: @obj2soap.clear
238: @soap2obj.clear
239: end
# File lib/soap/mapping/registry.rb, line 246
246: def find_mapped_obj_class(target_soap_class)
247: map = @soap2obj[target_soap_class]
248: map.empty? ? nil : map[0][0]
249: end
# File lib/soap/mapping/registry.rb, line 241
241: def find_mapped_soap_class(target_obj_class)
242: map = @obj2soap[target_obj_class]
243: map.empty? ? nil : map[0][1]
244: end
Give priority to former entry.
# File lib/soap/mapping/registry.rb, line 222
222: def init(init_map = [])
223: clear
224: init_map.reverse_each do |obj_class, soap_class, factory, info|
225: add(obj_class, soap_class, factory, info)
226: end
227: end
# File lib/soap/mapping/registry.rb, line 185
185: def obj2soap(obj)
186: klass = obj.class
187: if map = @obj2soap[klass]
188: map.each do |soap_class, factory, info|
189: ret = factory.obj2soap(soap_class, obj, info, @registry)
190: return ret if ret
191: end
192: end
193: ancestors = klass.ancestors
194: ancestors.delete(klass)
195: ancestors.delete(::Object)
196: ancestors.delete(::Kernel)
197: ancestors.each do |klass|
198: if map = @obj2soap[klass]
199: map.each do |soap_class, factory, info|
200: if info[:derived_class]
201: ret = factory.obj2soap(soap_class, obj, info, @registry)
202: return ret if ret
203: end
204: end
205: end
206: end
207: nil
208: end
# File lib/soap/mapping/registry.rb, line 210
210: def soap2obj(node, klass = nil)
211: if map = @soap2obj[node.class]
212: map.each do |obj_class, factory, info|
213: next if klass and obj_class != klass
214: conv, obj = factory.soap2obj(obj_class, node, info, @registry)
215: return true, obj if conv
216: end
217: end
218: return false, nil
219: end