Welcome to the "trac"-ing site of soap4r!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

Changeset 1540

Show
Ignore:
Timestamp:
05/10/05 19:55:39 (4 years ago)
Author:
nahi
Message:

do not use Mapping.define_singleton_method under ruby-1.6.8. closes #95.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/soap/baseData.rb

    r1533 r1540  
    654654  end 
    655655 
    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 
    666681    end 
    667682  end 
  • trunk/lib/soap/mapping/mapping.rb

    r1533 r1540  
    254254 
    255255  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) 
    269258  end 
    270259 
  • trunk/lib/soap/mapping/registry.rb

    r1533 r1540  
    116116private 
    117117 
    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 
    122138  end 
    123139 
     
    148164    end 
    149165 
    150     def obj2soap(obj, type_qname = nil
     166    def obj2soap(obj
    151167      klass = obj.class 
    152168      if map = @obj2soap[klass] 
    153169        map.each do |soap_class, factory, info| 
    154170          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 
    159172        end 
    160173      end 
     
    168181            if info[:derived_class] 
    169182              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 
    174184            end 
    175185          end 
     
    390400  alias set add 
    391401 
     402  # general Registry ignores type_qname 
    392403  def obj2soap(obj, type_qname = nil) 
    393     soap = _obj2soap(obj, type_qname
     404    soap = _obj2soap(obj
    394405    if @allow_original_mapping 
    395406      addextend2soap(soap, obj) 
     
    417428private 
    418429 
    419   def _obj2soap(obj, type_qname
     430  def _obj2soap(obj
    420431    ret = nil 
    421432    if obj.is_a?(SOAPStruct) or obj.is_a?(SOAPArray) 
     
    428439    end 
    429440    begin  
    430       ret = @map.obj2soap(obj, type_qname) || 
     441      ret = @map.obj2soap(obj) || 
    431442        @default_factory.obj2soap(nil, obj, nil, self) 
    432443      return ret if ret 
  • trunk/lib/soap/mapping/wsdlliteralregistry.rb

    r1526 r1540  
    314314        end 
    315315        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) 
    319317      end 
    320318    end 
     
    331329    define_xmlattr(obj) 
    332330    node.extraattr.each do |qname, value| 
    333       attrname = qname.name 
    334331      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, 
    336340        proc { @__xmlattr[qname] }, 
    337341        proc { |value| @__xmlattr[qname] = value }) 
    338342    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 
    345375    end 
    346376  end 
  • trunk/lib/soap/rpc/driver.rb

    r1537 r1540  
    222222  end 
    223223 
    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( 
    228229          "wrong number of arguments (#{arg.size} for #{param_count})") 
     230        end 
     231        call(name, *arg) 
    229232      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 
    233248  end 
    234249end 
  • trunk/lib/soap/rpc/proxy.rb

    r1531 r1540  
    353353    def request_doc_enc(values, mapping_registry) 
    354354      (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] 
    357357        ele 
    358358      } 
  • trunk/lib/wsdl/soap/classDefCreatorSupport.rb

    r1520 r1540  
    7373 
    7474  def dqname(qname) 
    75     "XSD::QName.new(#{ndq(qname.namespace)}, #{ndq(qname.name)})" 
     75    qname.dump 
    7676  end 
    7777 
  • trunk/lib/xsd/qname.rb

    r1520 r1540  
    2323  def dup_name(name) 
    2424    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})" 
    2531  end 
    2632