Give priority to latter entry.
# File soap/mapping/registry.rb, line 229
def add(obj_class, soap_class, factory, info)
info ||= {}
(@obj2soap[obj_class] ||= []).unshift([soap_class, factory, info])
(@soap2obj[soap_class] ||= []).unshift([obj_class, factory, info])
end
# File soap/mapping/registry.rb, line 235
def clear
@obj2soap.clear
@soap2obj.clear
end
# File soap/mapping/registry.rb, line 245
def find_mapped_obj_class(target_soap_class)
map = @soap2obj[target_soap_class]
map.empty? ? nil : map[0][0]
end
# File soap/mapping/registry.rb, line 240
def find_mapped_soap_class(target_obj_class)
map = @obj2soap[target_obj_class]
map.empty? ? nil : map[0][1]
end
Give priority to former entry.
# File soap/mapping/registry.rb, line 221
def init(init_map = [])
clear
init_map.reverse_each do |obj_class, soap_class, factory, info|
add(obj_class, soap_class, factory, info)
end
end
# File soap/mapping/registry.rb, line 184
def obj2soap(obj)
klass = obj.class
if map = @obj2soap[klass]
map.each do |soap_class, factory, info|
ret = factory.obj2soap(soap_class, obj, info, @registry)
return ret if ret
end
end
ancestors = klass.ancestors
ancestors.delete(klass)
ancestors.delete(::Object)
ancestors.delete(::Kernel)
ancestors.each do |klass|
if map = @obj2soap[klass]
map.each do |soap_class, factory, info|
if info[:derived_class]
ret = factory.obj2soap(soap_class, obj, info, @registry)
return ret if ret
end
end
end
end
nil
end
# File soap/mapping/registry.rb, line 209
def soap2obj(node, klass = nil)
if map = @soap2obj[node.class]
map.each do |obj_class, factory, info|
next if klass and obj_class != klass
conv, obj = factory.soap2obj(obj_class, node, info, @registry)
return true, obj if conv
end
end
return false, nil
end