# File lib/soap/mapping/encodedregistry.rb, line 271 271: def initialize(config = {}) 272: super() 273: @config = config 274: @map = Map.new(self) 275: if @config[:allow_original_mapping] 276: @allow_original_mapping = true 277: @map.init(RubyOriginalMap) 278: else 279: @allow_original_mapping = false 280: @map.init(SOAPBaseMap) 281: end 282: @allow_untyped_struct = @config.key?(:allow_untyped_struct) ? 283: @config[:allow_untyped_struct] : true 284: @rubytype_factory = RubytypeFactory.new( 285: :allow_untyped_struct => @allow_untyped_struct, 286: :allow_original_mapping => @allow_original_mapping 287: ) 288: @default_factory = @rubytype_factory 289: @excn_handler_obj2soap = nil 290: @excn_handler_soap2obj = nil 291: end
initial mapping interface new interface Registry#register is defined in RegisterSupport
# File lib/soap/mapping/encodedregistry.rb, line 295 295: def add(obj_class, soap_class, factory, info = nil) 296: @map.add(obj_class, soap_class, factory, info) 297: end
# File lib/soap/mapping/encodedregistry.rb, line 321 321: def find_mapped_obj_class(soap_class) 322: @map.find_mapped_obj_class(soap_class) 323: end
# File lib/soap/mapping/encodedregistry.rb, line 317 317: def find_mapped_soap_class(obj_class) 318: @map.find_mapped_soap_class(obj_class) 319: end
# File lib/soap/mapping/encodedregistry.rb, line 300 300: def obj2soap(obj, type_qname = nil) 301: soap = _obj2soap(obj, type_qname) 302: if @allow_original_mapping 303: addextend2soap(soap, obj) 304: end 305: soap 306: end
# File lib/soap/mapping/encodedregistry.rb, line 308 308: def soap2obj(node, klass = nil) 309: obj = _soap2obj(node, klass) 310: if @allow_original_mapping 311: addextend2obj(obj, node.extraattr[RubyExtendName]) 312: addiv2obj(obj, node.extraattr[RubyIVarName]) 313: end 314: obj 315: end
# File lib/soap/mapping/encodedregistry.rb, line 327 327: def _obj2soap(obj, type_qname = nil) 328: ret = nil 329: if obj.is_a?(SOAPCompoundtype) 330: obj.replace do |ele| 331: Mapping._obj2soap(ele, self) 332: end 333: return obj 334: elsif obj.is_a?(SOAPBasetype) 335: return obj 336: elsif type_qname && type = TypeMap[type_qname] 337: return base2soap(obj, type) 338: end 339: cause = nil 340: begin 341: if definition = schema_definition_from_class(obj.class) 342: return stubobj2soap(obj, definition) 343: end 344: ret = @map.obj2soap(obj) || 345: @default_factory.obj2soap(nil, obj, nil, self) 346: return ret if ret 347: rescue MappingError 348: cause = $! 349: end 350: if @excn_handler_obj2soap 351: ret = @excn_handler_obj2soap.call(obj) { |yield_obj| 352: Mapping._obj2soap(yield_obj, self) 353: } 354: return ret if ret 355: end 356: raise MappingError.new("Cannot map #{ obj.class.name } to SOAP/OM.", cause) 357: end
Might return nil as a mapping result.
# File lib/soap/mapping/encodedregistry.rb, line 360 360: def _soap2obj(node, klass = nil) 361: definition = find_node_definition(node) 362: if klass 363: klass_definition = schema_definition_from_class(klass) 364: if definition and (definition.class_for < klass) 365: klass = definition.class_for 366: else 367: definition = klass_definition 368: end 369: else 370: klass = definition.class_for if definition 371: end 372: if definition and node.is_a?(::SOAP::SOAPNameAccessible) 373: return elesoap2stubobj(node, klass, definition) 374: end 375: if node.extraattr.key?(RubyTypeName) 376: conv, obj = @rubytype_factory.soap2obj(nil, node, nil, self) 377: return obj if conv 378: end 379: conv, obj = @map.soap2obj(node) 380: return obj if conv 381: conv, obj = @default_factory.soap2obj(nil, node, nil, self) 382: return obj if conv 383: cause = nil 384: if @excn_handler_soap2obj 385: begin 386: return @excn_handler_soap2obj.call(node) { |yield_node| 387: Mapping._soap2obj(yield_node, self) 388: } 389: rescue Exception 390: cause = $! 391: end 392: end 393: raise MappingError.new("Cannot map #{ node.type.name } to Ruby object.", cause) 394: end
(class < false; self; end).ancestors includes “TrueClass” under 1.6...
# File lib/soap/mapping/encodedregistry.rb, line 414 414: def addextend2obj(obj, attr) 415: return unless attr 416: attr.split(/ /).reverse_each do |mstr| 417: m = Mapping.module_from_name(mstr) 418: obj.extend(m) 419: end 420: end
# File lib/soap/mapping/encodedregistry.rb, line 406 406: def addextend2obj(obj, attr) 407: return unless attr 408: attr.split(/ /).reverse_each do |mstr| 409: obj.extend(Mapping.module_from_name(mstr)) 410: end 411: end
# File lib/soap/mapping/encodedregistry.rb, line 423 423: def addextend2soap(node, obj) 424: return if obj.is_a?(Symbol) or obj.is_a?(Fixnum) 425: list = (class << obj; self; end
# File lib/soap/mapping/encodedregistry.rb, line 396 396: def addiv2obj(obj, attr) 397: return unless attr 398: vars = {} 399: attr.__getobj__.each do |name, value| 400: vars[name] = Mapping._soap2obj(value, self) 401: end 402: Mapping.set_attributes(obj, vars) 403: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.