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