Class SOAP::Mapping::Registry::Map
In: lib/soap/mapping/registry.rb
Parent: Object

Methods

Public Class methods

[Source]

     # File lib/soap/mapping/registry.rb, line 179
179:     def initialize(registry)
180:       @obj2soap = {}
181:       @soap2obj = {}
182:       @registry = registry
183:     end

Public Instance methods

Give priority to latter entry.

[Source]

     # 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

[Source]

     # File lib/soap/mapping/registry.rb, line 236
236:     def clear
237:       @obj2soap.clear
238:       @soap2obj.clear
239:     end

[Source]

     # 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

[Source]

     # 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.

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Validate]