diff options
author | nahi <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-12-21 15:08:56 +0000 |
---|---|---|
committer | nahi <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-12-21 15:08:56 +0000 |
commit | 3edeb852fe27ae9d11596697ea74f9b583f69e8a (patch) | |
tree | ec583bf4781cefd0a19735386b456046b8993d70 /lib/soap/mapping | |
parent | 3a664c4b407c9273b90eaca48da83b8719eb5b1b (diff) |
* lib/soap/*, test/soap/*, sample/soap/authheader/*: eval cleanup.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@7628 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/soap/mapping')
-rw-r--r-- | lib/soap/mapping/factory.rb | 2 | ||||
-rw-r--r-- | lib/soap/mapping/mapping.rb | 29 | ||||
-rw-r--r-- | lib/soap/mapping/registry.rb | 57 | ||||
-rw-r--r-- | lib/soap/mapping/wsdlencodedregistry.rb | 2 |
4 files changed, 39 insertions, 51 deletions
diff --git a/lib/soap/mapping/factory.rb b/lib/soap/mapping/factory.rb index 8e82ae5efd..a535458c5a 100644 --- a/lib/soap/mapping/factory.rb +++ b/lib/soap/mapping/factory.rb @@ -41,7 +41,7 @@ class Factory obj.instance_variables.each do |var| name = var.sub(/^@/, '') node.add(Mapping.name2elename(name), - Mapping._obj2soap(obj.instance_eval(var), map)) + Mapping._obj2soap(obj.instance_variable_get(var), map)) end end diff --git a/lib/soap/mapping/mapping.rb b/lib/soap/mapping/mapping.rb index 17a0d3bcf4..e04e3fa50d 100644 --- a/lib/soap/mapping/mapping.rb +++ b/lib/soap/mapping/mapping.rb @@ -156,13 +156,26 @@ module Mapping ::Marshal.load(sprintf("\004\006o:%c%s\000", name.length + 5, name)) end end + + unless Object.respond_to?(:instance_variable_get) + class Object + def instance_variable_get(ivarname) + instance_eval(ivarname) + end + + def instance_variable_set(ivarname, value) + instance_eval("#{ivarname} = value") + end + end + end + def self.set_instance_vars(obj, values) values.each do |name, value| setter = name + "=" if obj.respond_to?(setter) obj.__send__(setter, value) else - obj.instance_eval("@#{ name } = value") + obj.instance_variable_set('@' + name, value) end end end @@ -202,12 +215,12 @@ module Mapping def self.class2qname(klass) name = if klass.class_variables.include?("@@schema_type") - klass.class_eval("@@schema_type") + klass.class_eval('@@schema_type') else nil end namespace = if klass.class_variables.include?("@@schema_ns") - klass.class_eval("@@schema_ns") + klass.class_eval('@@schema_ns') else nil end @@ -224,11 +237,11 @@ module Mapping def self.obj2element(obj) name = namespace = nil ivars = obj.instance_variables - if ivars.include?("@schema_type") - name = obj.instance_eval("@schema_type") + if ivars.include?('@schema_type') + name = obj.instance_variable_get('@schema_type') end - if ivars.include?("@schema_ns") - namespace = obj.instance_eval("@schema_ns") + if ivars.include?('@schema_ns') + namespace = obj.instance_variable_get('@schema_ns') end if !name or !namespace class2qname(obj.class) @@ -245,7 +258,7 @@ module Mapping if obj.respond_to?(name) obj.__send__(name) else - obj.instance_eval("@#{name}") + obj.instance_variable_get('@' + name) end end end diff --git a/lib/soap/mapping/registry.rb b/lib/soap/mapping/registry.rb index 24cd57fa71..e62706f2d8 100644 --- a/lib/soap/mapping/registry.rb +++ b/lib/soap/mapping/registry.rb @@ -64,75 +64,50 @@ end # For anyType object: SOAP::Mapping::Object not ::Object class Object; include Marshallable def initialize - @__soap_members = [] @__soap_value_type = {} + @__soap_value = {} end def [](name) - if @__soap_members.include?(name) - self.__send__(name) - else - self.__send__(Object.safe_name(name)) - end + @__soap_value[name] end def []=(name, value) - if @__soap_members.include?(name) - self.__send__(name + '=', value) - else - self.__send__(Object.safe_name(name) + '=', value) - end + @__soap_value[name] = value end def __soap_set_property(name, value) - var_name = name - unless @__soap_members.include?(name) - var_name = __define_attr_accessor(var_name) + unless @__soap_value.key?(name) + __define_attr_accessor(name) end - __soap_set_property_value(var_name, value) - var_name + __soap_set_property_value(name, value) end private def __soap_set_property_value(name, value) - org = self.__send__(name) + org = self[name] case @__soap_value_type[name] when :single - self.__send__(name + '=', [org, value]) + self[name] = [org, value] @__soap_value_type[name] = :multi when :multi org << value else - self.__send__(name + '=', value) + self[name] = value @__soap_value_type[name] = :single end value end def __define_attr_accessor(name) - var_name = name - begin - instance_eval <<-EOS - def #{ var_name } - @#{ var_name } - end - - def #{ var_name }=(value) - @#{ var_name } = value - end - EOS - rescue SyntaxError - var_name = Object.safe_name(var_name) - retry - end - @__soap_members << var_name - var_name - end - - def Object.safe_name(name) - require 'md5' - "var_" << MD5.new(name).hexdigest + sclass = class << self; self; end + sclass.__send__(:define_method, name, proc { + self[name] + }) + sclass.__send__(:define_method, name + '=', proc { |value| + self[name] = value + }) end end diff --git a/lib/soap/mapping/wsdlencodedregistry.rb b/lib/soap/mapping/wsdlencodedregistry.rb index 4433c73cf0..335106fba1 100644 --- a/lib/soap/mapping/wsdlencodedregistry.rb +++ b/lib/soap/mapping/wsdlencodedregistry.rb @@ -162,7 +162,7 @@ private def elements2soap(obj, soap_obj, elements) elements.each do |element| name = element.name.name - child_obj = obj.instance_eval("@#{ name }") + child_obj = obj.instance_variable_get('@' + name) soap_obj.add(name, Mapping._obj2soap(child_obj, self, element.type)) end end |