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

Changeset 1533

Show
Ignore:
Timestamp:
05/05/05 11:12:03 (4 years ago)
Author:
nahi
Message:

refactoring regards to runtime method definition. related to #95.

Files:

Legend:

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

    r1520 r1533  
    659659      methodname = safe_accessor_name(methodname) 
    660660    end 
    661     sclass = class << self; self; end 
    662     sclass.__send__(:define_method, methodname, proc { 
     661    Mapping.define_singleton_method(self, methodname) do 
    663662      @data[@array.index(name)] 
    664     }) 
    665     sclass.__send__(:define_method, methodname + '=', proc { |value| 
     663    end 
     664    Mapping.define_singleton_method(self, methodname + '=') do |value| 
    666665      @data[@array.index(name)] = value 
    667     }) 
     666    end 
    668667  end 
    669668 
  • trunk/lib/soap/mapping/mapping.rb

    r1526 r1533  
    250250    else 
    251251      XSD::QName.new(namespace, name) 
     252    end 
     253  end 
     254 
     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 
    252268    end 
    253269  end 
     
    293309 
    294310  def self.define_attr_accessor(obj, name, getterproc, setterproc = nil) 
    295     sclass = class << obj; self; end 
    296     sclass.__send__(:define_method, name, getterproc) 
    297     sclass.__send__(:define_method, name + '=', setterproc) if setterproc 
     311    define_singleton_method(obj, name, &getterproc) 
     312    define_singleton_method(obj, name + '=', &setterproc) if setterproc 
    298313  end 
    299314 
  • trunk/lib/soap/mapping/registry.rb

    r1526 r1533  
    159159        end 
    160160      end 
    161       ancestors = klass.ancestors[1..-3] # except itself, Object and Kernel 
     161      ancestors = klass.ancestors 
     162      ancestors.delete(klass) 
     163      ancestors.delete(::Object) 
     164      ancestors.delete(::Kernel) 
    162165      ancestors.each do |klass| 
    163166        if map = @obj2soap[klass] 
  • trunk/lib/soap/rpc/driver.rb

    r1520 r1533  
    205205 
    206206  def add_method_interface(name, param_count) 
    207     sclass = class << self; self; end 
    208     sclass.__send__(:define_method, name, proc { |*arg| 
     207    ::SOAP::Mapping.define_singleton_method(self, name) do |*arg| 
    209208      unless arg.size == param_count 
    210209        raise ArgumentError.new( 
     
    212211      end 
    213212      call(name, *arg) 
    214     }) 
     213    end 
    215214    self.method(name) 
    216215  end 
  • trunk/lib/soap/wsdlDriver.rb

    r1520 r1533  
    108108      end 
    109109      if orgname != name and orgname.capitalize == name.capitalize 
    110         sclass = class << drv; self; end 
    111         sclass.__send__(:define_method, orgname, proc { |*arg| 
     110        ::SOAP::Mapping.define_singleton_method(drv, orgname) do |*arg| 
    112111          __send__(name, *arg) 
    113         }) 
     112        end 
    114113      end 
    115114    end 
     
    506505 
    507506    def add_rpc_method_interface(name, parts_names) 
    508       sclass = class << @host; self; end 
    509       sclass.__send__(:define_method, name, proc { |*arg| 
     507      ::SOAP::Mapping.define_singleton_method(@host, name) do |*arg| 
    510508        unless arg.size == parts_names.size 
    511509          raise ArgumentError.new( 
     
    513511        end 
    514512        @servant.rpc_call(name, *arg) 
    515       }) 
     513      end 
    516514      @host.method(name) 
    517515    end 
    518516 
    519517    def add_document_method_interface(name, parts_names) 
    520       sclass = class << @host; self; end 
    521       sclass.__send__(:define_method, name, proc { |h, b| 
     518      ::SOAP::Mapping.define_singleton_method(@host, name) do |*arg| 
    522519        @servant.document_send(name, h, b) 
    523       }) 
     520      end 
    524521      @host.method(name) 
    525522    end 
  • trunk/lib/wsdl/soap/driverCreator.rb

    r1520 r1533  
    8080          end 
    8181          if name_as != name and name_as.capitalize == name.capitalize 
    82             sclass = class << self; self; end 
    83             sclass.__send__(:define_method, name_as, proc { |*arg| 
     82            ::SOAP::Mapping.define_singleton_method(self, name_as) do |*arg| 
    8483              __send__(name, *arg) 
    85             }) 
     84            end 
    8685          end 
    8786        end