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

Changeset 1677

Show
Ignore:
Timestamp:
11/26/05 23:29:22 (3 years ago)
Author:
nahi
Message:

do not overwrite existing method while adding attribute accessor to Mapping::Object.
0% ruby -rxsd/mapping -e 'obj = XSD::Mapping.xml2obj("<foo><class>bar</class></foo>"); p [obj, obj.class, objclass?]'
{}class="bar">, SOAP::Mapping::Object, "bar"
closes #186.

Files:

Legend:

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

    r1663 r1677  
    332332 
    333333  def self.define_attr_accessor(obj, name, getterproc, setterproc = nil) 
    334     define_singleton_method(obj, name, &getterproc) 
     334    define_singleton_method(obj, name, &getterproc) if getterproc 
    335335    define_singleton_method(obj, name + '=', &setterproc) if setterproc 
    336336  end 
  • trunk/lib/soap/mapping/registry.rb

    r1581 r1677  
    137137    def __define_attr_accessor(qname) 
    138138      name = XSD::CodeGen::GenSupport.safemethodname(qname.name) 
    139       Mapping.define_attr_accessor(self, name, 
    140         proc { self[qname] }, 
    141         proc { |value| self[qname] = value }) 
     139      getter = setter = nil 
     140      unless self.respond_to?(name) 
     141        getter = proc { self[qname] } 
     142      end 
     143      unless self.respond_to?(name + "=") 
     144        setter = proc { |value| self[qname] = value } 
     145      end 
     146      Mapping.define_attr_accessor(self, name, getter, setter) 
    142147    end 
    143148  else 
    144149    def __define_attr_accessor(qname) 
    145150      name = XSD::CodeGen::GenSupport.safemethodname(qname.name) 
    146       instance_eval <<-EOS 
    147         def #{name} 
    148           self[#{qname.dump}] 
    149         end 
    150  
    151         def #{name}=(value) 
    152           self[#{qname.dump}] = value 
    153         end 
    154       EOS 
     151      unless self.respond_to?(name) 
     152        instance_eval <<-EOS 
     153          def #{name} 
     154            self[#{qname.dump}] 
     155          end 
     156        EOS 
     157      end 
     158      unless self.respond_to?(name + "=") 
     159        instance_eval <<-EOS 
     160          def #{name}=(value) 
     161            self[#{qname.dump}] = value 
     162          end 
     163        EOS 
     164      end 
    155165    end 
    156166  end