Skip to content

Commit

Permalink
* lib/soap/*, test/soap/*, sample/soap/authheader/*: eval cleanup.
Browse files Browse the repository at this point in the history
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@7628 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
nahi committed Dec 21, 2004
1 parent 3a664c4 commit 3edeb85
Show file tree
Hide file tree
Showing 12 changed files with 118 additions and 131 deletions.
8 changes: 6 additions & 2 deletions ChangeLog
@@ -1,3 +1,7 @@
Wed Dec 22 00:08:01 2004 NAKAMURA, Hiroshi <nakahiro@sarion.co.jp>

* lib/soap/*, test/soap/*, sample/soap/authheader/*: eval cleanup.

Tue Dec 21 22:07:33 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>

* ext/openssl/ossl_asn1.c (ossl_asn1_traverse, ossl_asn1_decode,
Expand All @@ -6,9 +10,9 @@ Tue Dec 21 22:07:33 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
Tue Dec 21 14:40:02 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>

* ext/openssl/ossl_asn1.c (ossl_asn1_traverse, ossl_asn1_decode,
ossl_asn1_decode_all): use rb_str_new4 to avoid SEGV.
ossl_asn1_decode_all): use rb_str_new4 to avoid SEGV.
fix [ruby-dev:25261]

* test/openssl/test_asn1.rb: add tests for OpenSSL::ASN1.

Tue Dec 21 12:22:40 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
Expand Down
21 changes: 7 additions & 14 deletions lib/soap/baseData.rb
Expand Up @@ -595,20 +595,13 @@ def add_accessor(name)
if self.respond_to?(methodname)
methodname = safe_accessor_name(methodname)
end
begin
instance_eval <<-EOS
def #{ methodname }()
@data[@array.index('#{ name }')]
end
def #{ methodname }=(value)
@data[@array.index('#{ name }')] = value
end
EOS
rescue SyntaxError
methodname = safe_accessor_name(methodname)
retry
end
sclass = class << self; self; end
sclass.__send__(:define_method, methodname, proc {
@data[@array.index(name)]
})
sclass.__send__(:define_method, methodname + '=', proc { |value|
@data[@array.index(name)] = value
})
end

def safe_accessor_name(name)
Expand Down
2 changes: 1 addition & 1 deletion lib/soap/mapping/factory.rb
Expand Up @@ -41,7 +41,7 @@ def setiv2soap(node, obj, map)
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

Expand Down
29 changes: 21 additions & 8 deletions lib/soap/mapping/mapping.rb
Expand Up @@ -156,13 +156,26 @@ def self.create_empty_object(klass)
::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
Expand Down Expand Up @@ -202,12 +215,12 @@ def self.class_from_name(name)

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
Expand All @@ -224,11 +237,11 @@ def self.class2element(klass)
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)
Expand All @@ -245,7 +258,7 @@ def self.find_attribute(obj, attr_name)
if obj.respond_to?(name)
obj.__send__(name)
else
obj.instance_eval("@#{name}")
obj.instance_variable_get('@' + name)
end
end
end
Expand Down
57 changes: 16 additions & 41 deletions lib/soap/mapping/registry.rb
Expand Up @@ -64,75 +64,50 @@ def to_e
# 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

Expand Down
2 changes: 1 addition & 1 deletion lib/soap/mapping/wsdlencodedregistry.rb
Expand Up @@ -162,7 +162,7 @@ def map2soap(obj, type_qname, type)
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
Expand Down
45 changes: 20 additions & 25 deletions lib/soap/rpc/driver.rb
Expand Up @@ -27,17 +27,13 @@ class EmptyResponseError < Error; end
class << self
def __attr_proxy(symbol, assignable = false)
name = symbol.to_s
module_eval <<-EOD
def #{name}
@servant.#{name}
end
EOD
self.__send__(:define_method, name, proc {
@servant.__send__(name)
})
if assignable
module_eval <<-EOD
def #{name}=(rhs)
@servant.#{name} = rhs
end
EOD
self.__send__(:define_method, name + '=', proc { |rhs|
@servant.__send__(name + '=', rhs)
})
end
end
end
Expand Down Expand Up @@ -292,28 +288,27 @@ def add_document_method(name_as, soapaction, name, param_def)
end

def add_rpc_method_interface(name, param_def)
param_names = []
i = 0
param_count = 0
@proxy.operation[name].each_param_name(RPC::SOAPMethod::IN,
RPC::SOAPMethod::INOUT) do |param_name|
i += 1
param_names << "arg#{ i }"
param_count += 1
end
callparam = (param_names.collect { |pname| ", " + pname }).join
@host.instance_eval <<-EOS
def #{ name }(#{ param_names.join(", ") })
@servant.call(#{ name.dump }#{ callparam })
end
EOS
sclass = class << @host; self; end
sclass.__send__(:define_method, name, proc { |*arg|
unless arg.size == param_count
raise ArgumentError.new(
"wrong number of arguments (#{arg.size} for #{param_count})")
end
@servant.call(name, *arg)
})
@host.method(name)
end

def add_document_method_interface(name, paramname)
@host.instance_eval <<-EOS
def #{ name }(param)
@servant.call(#{ name.dump }, param)
end
EOS
sclass = class << @host; self; end
sclass.__send__(:define_method, name, proc { |param|
@servant.call(name, param)
})
@host.method(name)
end

Expand Down
45 changes: 21 additions & 24 deletions lib/soap/wsdlDriver.rb
Expand Up @@ -79,17 +79,13 @@ class WSDLDriver
class << self
def __attr_proxy(symbol, assignable = false)
name = symbol.to_s
module_eval <<-EOD
def #{name}
@servant.#{name}
end
EOD
self.__send__(:define_method, name, proc {
@servant.__send__(name)
})
if assignable
module_eval <<-EOD
def #{name}=(rhs)
@servant.#{name} = rhs
end
EOD
self.__send__(:define_method, name + '=', proc { |rhs|
@servant.__send__(name + '=', rhs)
})
end
end
end
Expand Down Expand Up @@ -348,7 +344,7 @@ def create_method_struct(op_info, *params)
def create_method_obj(names, params)
o = Object.new
for idx in 0 ... params.length
o.instance_eval("@#{ names[idx] } = params[idx]")
o.instance_variable_set('@' + names[idx], params[idx])
end
o
end
Expand Down Expand Up @@ -436,22 +432,23 @@ def add_method_interface(op_info)
end

def add_rpc_method_interface(name, parts_names)
i = 0
param_names = parts_names.collect { |orgname| i += 1; "arg#{ i }" }
callparam = (param_names.collect { |pname| ", " + pname }).join
@host.instance_eval <<-EOS
def #{ name }(#{ param_names.join(", ") })
@servant.rpc_call(#{ name.dump }#{ callparam })
end
EOS
sclass = class << @host; self; end
sclass.__send__(:define_method, name, proc { |*arg|
unless arg.size == parts_names.size
raise ArgumentError.new(
"wrong number of arguments (#{arg.size} for #{parts_names.size})")
end
@servant.rpc_call(name, *arg)
})
@host.method(name)
end

def add_document_method_interface(name)
@host.instance_eval <<-EOS
def #{ name }(h, b)
@servant.document_send(#{ name.dump }, h, b)
end
EOS
sclass = class << @host; self; end
sclass.__send__(:define_method, name, proc { |h, b|
@servant.document_send(name, h, b)
})
@host.method(name)
end

def setup_options
Expand Down

0 comments on commit 3edeb85

Please sign in to comment.