Changeset 1540
- Timestamp:
- 05/10/05 19:55:39 (4 years ago)
- Files:
-
- trunk/lib/soap/baseData.rb (modified) (1 diff)
- trunk/lib/soap/mapping/mapping.rb (modified) (1 diff)
- trunk/lib/soap/mapping/registry.rb (modified) (6 diffs)
- trunk/lib/soap/mapping/wsdlliteralregistry.rb (modified) (2 diffs)
- trunk/lib/soap/rpc/driver.rb (modified) (1 diff)
- trunk/lib/soap/rpc/proxy.rb (modified) (1 diff)
- trunk/lib/wsdl/soap/classDefCreatorSupport.rb (modified) (1 diff)
- trunk/lib/xsd/qname.rb (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/baseData.rb
r1533 r1540 654 654 end 655 655 656 def add_accessor(name) 657 methodname = name 658 if self.respond_to?(methodname) 659 methodname = safe_accessor_name(methodname) 660 end 661 Mapping.define_singleton_method(self, methodname) do 662 @data[@array.index(name)] 663 end 664 Mapping.define_singleton_method(self, methodname + '=') do |value| 665 @data[@array.index(name)] = value 656 if RUBY_VERSION > "1.7.0" 657 def add_accessor(name) 658 methodname = name 659 if self.respond_to?(methodname) 660 methodname = safe_accessor_name(methodname) 661 end 662 Mapping.define_singleton_method(self, methodname) do 663 @data[@array.index(name)] 664 end 665 Mapping.define_singleton_method(self, methodname + '=') do |value| 666 @data[@array.index(name)] = value 667 end 668 end 669 else 670 def add_accessor(name) 671 methodname = safe_accessor_name(name) 672 instance_eval <<-EOS 673 def #{methodname} 674 @data[@array.index(#{name.dump})] 675 end 676 677 def #{methodname}=(value) 678 @data[@array.index(#{name.dump})] = value 679 end 680 EOS 666 681 end 667 682 end trunk/lib/soap/mapping/mapping.rb
r1533 r1540 254 254 255 255 def self.define_singleton_method(obj, name, &block) 256 if RUBY_VERSION >= "1.7.0" 257 sclass = (class << obj; self; end) 258 sclass.__send__(:define_method, name, &block) 259 else 260 obj.instance_eval { 261 (@__method_block ||= {})[name] = block 262 } 263 obj.instance_eval <<-EOS 264 def #{name}(*arg) 265 @__method_block[#{name.dump}].call(*arg) 266 end 267 EOS 268 end 256 sclass = (class << obj; self; end) 257 sclass.__send__(:define_method, name, &block) 269 258 end 270 259 trunk/lib/soap/mapping/registry.rb
r1533 r1540 116 116 private 117 117 118 def __define_attr_accessor(qname) 119 Mapping.define_attr_accessor(self, qname.name, 120 proc { self[qname] }, 121 proc { |value| self[qname] = value }) 118 if RUBY_VERSION > "1.7.0" 119 def __define_attr_accessor(qname) 120 name = XSD::CodeGen::GenSupport.safemethodname(qname.name) 121 Mapping.define_attr_accessor(self, name, 122 proc { self[qname] }, 123 proc { |value| self[qname] = value }) 124 end 125 else 126 def __define_attr_accessor(qname) 127 name = XSD::CodeGen::GenSupport.safemethodname(qname.name) 128 instance_eval <<-EOS 129 def #{name} 130 self[#{qname.dump}] 131 end 132 133 def #{name}=(value) 134 self[#{qname.dump}] = value 135 end 136 EOS 137 end 122 138 end 123 139 … … 148 164 end 149 165 150 def obj2soap(obj , type_qname = nil)166 def obj2soap(obj) 151 167 klass = obj.class 152 168 if map = @obj2soap[klass] 153 169 map.each do |soap_class, factory, info| 154 170 ret = factory.obj2soap(soap_class, obj, info, @registry) 155 if ret 156 ret.elename = type_qname if type_qname 157 return ret 158 end 171 return ret if ret 159 172 end 160 173 end … … 168 181 if info[:derived_class] 169 182 ret = factory.obj2soap(soap_class, obj, info, @registry) 170 if ret 171 ret.elename = type_qname if type_qname 172 return ret 173 end 183 return ret if ret 174 184 end 175 185 end … … 390 400 alias set add 391 401 402 # general Registry ignores type_qname 392 403 def obj2soap(obj, type_qname = nil) 393 soap = _obj2soap(obj , type_qname)404 soap = _obj2soap(obj) 394 405 if @allow_original_mapping 395 406 addextend2soap(soap, obj) … … 417 428 private 418 429 419 def _obj2soap(obj , type_qname)430 def _obj2soap(obj) 420 431 ret = nil 421 432 if obj.is_a?(SOAPStruct) or obj.is_a?(SOAPArray) … … 428 439 end 429 440 begin 430 ret = @map.obj2soap(obj , type_qname) ||441 ret = @map.obj2soap(obj) || 431 442 @default_factory.obj2soap(nil, obj, nil, self) 432 443 return ret if ret trunk/lib/soap/mapping/wsdlliteralregistry.rb
r1526 r1540 314 314 end 315 315 obj.__xmlattr[qname] = child 316 Mapping.define_attr_accessor(obj, 'xmlattr_' + qname.name, 317 proc { @__xmlattr[qname] }, 318 proc { |value| @__xmlattr[qname] = value }) 316 define_xmlattr_accessor(obj, qname) 319 317 end 320 318 end … … 331 329 define_xmlattr(obj) 332 330 node.extraattr.each do |qname, value| 333 attrname = qname.name334 331 obj.__xmlattr[qname] = value 335 Mapping.define_attr_accessor(obj, 'xmlattr_' + attrname, 332 define_xmlattr_accessor(obj, qname) 333 end 334 end 335 336 if RUBY_VERSION > "1.7.0" 337 def define_xmlattr_accessor(obj, qname) 338 name = XSD::CodeGen::GenSupport.safemethodname(qname.name) 339 Mapping.define_attr_accessor(obj, 'xmlattr_' + name, 336 340 proc { @__xmlattr[qname] }, 337 341 proc { |value| @__xmlattr[qname] = value }) 338 342 end 339 end 340 341 def define_xmlattr(obj) 342 obj.instance_variable_set('@__xmlattr', {}) 343 unless obj.respond_to?(:__xmlattr) 344 Mapping.define_attr_accessor(obj, :__xmlattr, proc { @__xmlattr }) 343 else 344 def define_xmlattr_accessor(obj, qname) 345 name = XSD::CodeGen::GenSupport.safemethodname(qname.name) 346 obj.instance_eval <<-EOS 347 def #{name} 348 @__xmlattr[#{qname.dump}] 349 end 350 351 def #{name}=(value) 352 @__xmlattr[#{qname.dump}] = value 353 end 354 EOS 355 end 356 end 357 358 if RUBY_VERSION > "1.7.0" 359 def define_xmlattr(obj) 360 obj.instance_variable_set('@__xmlattr', {}) 361 unless obj.respond_to?(:__xmlattr) 362 Mapping.define_attr_accessor(obj, :__xmlattr, proc { @__xmlattr }) 363 end 364 end 365 else 366 def define_xmlattr(obj) 367 obj.instance_variable_set('@__xmlattr', {}) 368 unless obj.respond_to?(:__xmlattr) 369 obj.instance_eval <<-EOS 370 def __xmlattr 371 @__xmlattr 372 end 373 EOS 374 end 345 375 end 346 376 end trunk/lib/soap/rpc/driver.rb
r1537 r1540 222 222 end 223 223 224 def add_method_interface(name, param_count) 225 ::SOAP::Mapping.define_singleton_method(self, name) do |*arg| 226 unless arg.size == param_count 227 raise ArgumentError.new( 224 if RUBY_VERSION > "1.7.0" 225 def add_method_interface(name, param_count) 226 ::SOAP::Mapping.define_singleton_method(self, name) do |*arg| 227 unless arg.size == param_count 228 raise ArgumentError.new( 228 229 "wrong number of arguments (#{arg.size} for #{param_count})") 230 end 231 call(name, *arg) 229 232 end 230 call(name, *arg) 231 end 232 self.method(name) 233 self.method(name) 234 end 235 else 236 def add_method_interface(name, param_count) 237 instance_eval <<-EOS 238 def #{name}(*arg) 239 unless arg.size == #{param_count} 240 raise ArgumentError.new( 241 "wrong number of arguments (\#{arg.size} for #{param_count})") 242 end 243 call(#{name.dump}, *arg) 244 end 245 EOS 246 self.method(name) 247 end 233 248 end 234 249 end trunk/lib/soap/rpc/proxy.rb
r1531 r1540 353 353 def request_doc_enc(values, mapping_registry) 354 354 (0...values.size).collect { |idx| 355 ele = Mapping.obj2soap(values[idx], mapping_registry ,356 @doc_request_qnames[idx])355 ele = Mapping.obj2soap(values[idx], mapping_registry) 356 ele.elename = @doc_request_qnames[idx] 357 357 ele 358 358 } trunk/lib/wsdl/soap/classDefCreatorSupport.rb
r1520 r1540 73 73 74 74 def dqname(qname) 75 "XSD::QName.new(#{ndq(qname.namespace)}, #{ndq(qname.name)})"75 qname.dump 76 76 end 77 77 trunk/lib/xsd/qname.rb
r1520 r1540 23 23 def dup_name(name) 24 24 XSD::QName.new(@namespace, name) 25 end 26 27 def dump 28 ns = @namespace.nil? ? 'nil' : @namespace.dump 29 name = @name.nil? ? 'nil' : @name.dump 30 "XSD::QName.new(#{ns}, #{name})" 25 31 end 26 32