summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornahi <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-12-21 15:08:56 +0000
committernahi <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-12-21 15:08:56 +0000
commit3edeb852fe27ae9d11596697ea74f9b583f69e8a (patch)
treeec583bf4781cefd0a19735386b456046b8993d70
parent3a664c4b407c9273b90eaca48da83b8719eb5b1b (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
-rw-r--r--ChangeLog8
-rw-r--r--lib/soap/baseData.rb21
-rw-r--r--lib/soap/mapping/factory.rb2
-rw-r--r--lib/soap/mapping/mapping.rb29
-rw-r--r--lib/soap/mapping/registry.rb57
-rw-r--r--lib/soap/mapping/wsdlencodedregistry.rb2
-rw-r--r--lib/soap/rpc/driver.rb45
-rw-r--r--lib/soap/wsdlDriver.rb45
-rw-r--r--sample/soap/authheader/client2.rb15
-rw-r--r--sample/soap/authheader/server.rb1
-rw-r--r--sample/soap/authheader/server2.rb22
-rw-r--r--test/soap/test_soapelement.rb2
12 files changed, 118 insertions, 131 deletions
diff --git a/ChangeLog b/ChangeLog
index 7517938e02..824e1e51ce 100644
--- a/ChangeLog
+++ b/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,
@@ -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>
diff --git a/lib/soap/baseData.rb b/lib/soap/baseData.rb
index 2d3d059ebf..bf2fe6b25c 100644
--- a/lib/soap/baseData.rb
+++ b/lib/soap/baseData.rb
@@ -595,20 +595,13 @@ private
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)
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
diff --git a/lib/soap/rpc/driver.rb b/lib/soap/rpc/driver.rb
index 028addc3eb..5fd755c51a 100644
--- a/lib/soap/rpc/driver.rb
+++ b/lib/soap/rpc/driver.rb
@@ -27,17 +27,13 @@ class Driver
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
@@ -292,28 +288,27 @@ private
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
diff --git a/lib/soap/wsdlDriver.rb b/lib/soap/wsdlDriver.rb
index aa822df4e4..83db5c133c 100644
--- a/lib/soap/wsdlDriver.rb
+++ b/lib/soap/wsdlDriver.rb
@@ -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
@@ -348,7 +344,7 @@ class WSDLDriver
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
@@ -436,22 +432,23 @@ class WSDLDriver
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
diff --git a/sample/soap/authheader/client2.rb b/sample/soap/authheader/client2.rb
index 58a7da45ae..aa5172a5b1 100644
--- a/sample/soap/authheader/client2.rb
+++ b/sample/soap/authheader/client2.rb
@@ -6,18 +6,16 @@ server = ARGV.shift || 'http://localhost:7000/'
class ClientAuthHeaderHandler < SOAP::Header::SimpleHandler
MyHeaderName = XSD::QName.new("http://tempuri.org/authHeader", "auth")
- def initialize(userid, passwd)
+ attr_accessor :sessionid
+
+ def initialize
super(MyHeaderName)
@sessionid = nil
- @userid = userid
- @passwd = passwd
end
def on_simple_outbound
if @sessionid
{ "sessionid" => @sessionid }
- else
- { "userid" => @userid, "passwd" => @passwd }
end
end
@@ -28,12 +26,17 @@ end
ns = 'http://tempuri.org/authHeaderPort'
serv = SOAP::RPC::Driver.new(server, ns)
+serv.add_method('login', 'userid', 'passwd')
serv.add_method('deposit', 'amt')
serv.add_method('withdrawal', 'amt')
-serv.headerhandler << ClientAuthHeaderHandler.new('NaHi', 'passwd')
+h = ClientAuthHeaderHandler.new
+
+serv.headerhandler << h
serv.wiredump_dev = STDOUT
+sessionid = serv.login('NaHi', 'passwd')
+h.sessionid = sessionid
p serv.deposit(150)
p serv.withdrawal(120)
diff --git a/sample/soap/authheader/server.rb b/sample/soap/authheader/server.rb
index 6b562d02f3..9c6adf280d 100644
--- a/sample/soap/authheader/server.rb
+++ b/sample/soap/authheader/server.rb
@@ -23,6 +23,7 @@ class AuthHeaderPortServer < SOAP::RPC::StandaloneServer
def initialize(*arg)
super
add_rpc_servant(AuthHeaderService.new, Name)
+ # header handler must be a per request handler.
add_rpc_request_headerhandler(ServerAuthHeaderHandler)
end
diff --git a/sample/soap/authheader/server2.rb b/sample/soap/authheader/server2.rb
index b0065e3140..8a0eaafc8d 100644
--- a/sample/soap/authheader/server2.rb
+++ b/sample/soap/authheader/server2.rb
@@ -6,10 +6,6 @@ require 'authmgr'
class AuthHeaderPortServer < SOAP::RPC::StandaloneServer
class AuthHeaderService
- def self.create
- new
- end
-
def initialize(authmgr)
@authmgr = authmgr
end
@@ -34,14 +30,20 @@ class AuthHeaderPortServer < SOAP::RPC::StandaloneServer
Name = 'http://tempuri.org/authHeaderPort'
def initialize(*arg)
super
- add_rpc_servant(AuthHeaderService.new, Name)
- ServerAuthHeaderHandler.init
+ authmgr = Authmgr.new
+ add_rpc_servant(AuthHeaderService.new(authmgr), Name)
+ ServerAuthHeaderHandler.init(authmgr)
+ # header handler must be a per request handler.
add_rpc_request_headerhandler(ServerAuthHeaderHandler)
end
class ServerAuthHeaderHandler < SOAP::Header::SimpleHandler
MyHeaderName = XSD::QName.new("http://tempuri.org/authHeader", "auth")
+ def self.init(authmgr)
+ @authmgr = authmgr
+ end
+
def self.create
new(@authmgr)
end
@@ -63,7 +65,7 @@ class AuthHeaderPortServer < SOAP::RPC::StandaloneServer
if sessionid = my_header["sessionid"]
if userid = @authmgr.auth(sessionid)
@authmgr.destroy_session(sessionid)
- @session_id = @authmgr.create_session(userid)
+ @sessionid = @authmgr.create_session(userid)
auth = true
end
end
@@ -73,5 +75,9 @@ class AuthHeaderPortServer < SOAP::RPC::StandaloneServer
end
if $0 == __FILE__
- status = AuthHeaderPortServer.new('AuthHeaderPortServer', nil, '0.0.0.0', 7000).start
+ svr = AuthHeaderPortServer.new('AuthHeaderPortServer', nil, '0.0.0.0', 7000)
+ trap(:INT) do
+ svr.shutdown
+ end
+ status = svr.start
end
diff --git a/test/soap/test_soapelement.rb b/test/soap/test_soapelement.rb
index 99c1f29b98..6cf91f93d6 100644
--- a/test/soap/test_soapelement.rb
+++ b/test/soap/test_soapelement.rb
@@ -59,7 +59,7 @@ class TestSOAPElement < Test::Unit::TestCase
assert_equal(child, obj.var_foo)
child = d("_?a?b_")
obj.add(child)
- assert_equal(child, obj.var__ab_)
+ assert_equal(child, obj.__send__('_?a?b_'))
end
def test_member