From ef1ccbbc40cbfa512b2be0eeb7793c3532ff5e20 Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 12 Sep 2005 23:09:39 +0000 Subject: * lib/ostruct.rb (new_ostruct_member): Object#send no longer call private methods. [ruby-dev:27044] * test/rss/test_dublincore.rb, test/rss/test_trackback.rb, test/ruby/test_eval.rb, test/socket/test_socket.rb: ditto. * test/ruby/test_lambda (test_call_with_block): lambda makes new scope for formal block parameter. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9138 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 11 +++++++++++ lib/ostruct.rb | 7 ++++--- test/rss/test_dublincore.rb | 4 ++-- test/rss/test_trackback.rb | 2 +- test/ruby/test_eval.rb | 2 +- test/ruby/test_lambda.rb | 2 +- 6 files changed, 20 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index ec96e958a6..3be2b3a574 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +Tue Sep 13 08:09:18 2005 Nobuyoshi Nakada + + * lib/ostruct.rb (new_ostruct_member): Object#send no longer call + private methods. [ruby-dev:27044] + + * test/rss/test_dublincore.rb, test/rss/test_trackback.rb, + test/ruby/test_eval.rb, test/socket/test_socket.rb: ditto. + + * test/ruby/test_lambda (test_call_with_block): lambda makes new scope + for formal block parameter. + Tue Sep 13 01:17:45 2005 Yukihiro Matsumoto * eval.c (proc_save_safe_level): no need to restrict safe level diff --git a/lib/ostruct.rb b/lib/ostruct.rb index 6af5bbdac0..f3ed01524b 100644 --- a/lib/ostruct.rb +++ b/lib/ostruct.rb @@ -70,9 +70,10 @@ class OpenStruct def new_ostruct_member(name) name = name.to_sym unless self.respond_to?(name) - meta = class << self; self; end - meta.send(:define_method, name) { @table[name] } - meta.send(:define_method, :"#{name}=") { |x| @table[name] = x } + class << self; self; end.class_eval do + define_method(name) { @table[name] } + define_method(:"#{name}=") { |x| @table[name] = x } + end end end diff --git a/test/rss/test_dublincore.rb b/test/rss/test_dublincore.rb index 5ad9311fb5..614c25eebe 100644 --- a/test/rss/test_dublincore.rb +++ b/test/rss/test_dublincore.rb @@ -151,7 +151,7 @@ EOR @elems.each do |name, value| excepted = "<#{@prefix}:#{name}>#{value}" @parents.each do |parent| - assert_equal(excepted, @rss.send(parent).send("dc_#{name}_elements")) + assert_equal(excepted, @rss.send(parent).fcall("dc_#{name}_elements")) end excepted = Array.new(2, excepted).join("\n") @@ -161,7 +161,7 @@ EOR klass_name = "DublinCore#{Utils.to_class_name(name.to_s)}" klass = DublinCoreModel.const_get(klass_name) elems << klass.new(@rss.send(parent).send("dc_#{name}")) - assert_equal(excepted, @rss.send(parent).send("dc_#{name}_elements")) + assert_equal(excepted, @rss.send(parent).fcall("dc_#{name}_elements")) end end diff --git a/test/rss/test_trackback.rb b/test/rss/test_trackback.rb index a3f023e887..2f92a0b1fe 100644 --- a/test/rss/test_trackback.rb +++ b/test/rss/test_trackback.rb @@ -114,7 +114,7 @@ EOR @parents.each do |parent| meth = "#{RSS::TRACKBACK_PREFIX}_#{name}_element" meth << "s" if name == :about - assert_equal(excepted, @rss.send(parent).send(meth)) + assert_equal(excepted, @rss.send(parent).fcall(meth)) end end diff --git a/test/ruby/test_eval.rb b/test/ruby/test_eval.rb index 6b3fea7bb4..273b3172b9 100644 --- a/test/ruby/test_eval.rb +++ b/test/ruby/test_eval.rb @@ -146,7 +146,7 @@ class TestEval < Test::Unit::TestCase assert_nothing_raised { def temporally_method_for_test_eval_and_define_method(&block) lambda { - class << Object.new; self end.__send__(:define_method, :zzz, &block) + class << Object.new; self end.fcall(:define_method, :zzz, &block) } end v = eval("temporally_method_for_test_eval_and_define_method {}") diff --git a/test/ruby/test_lambda.rb b/test/ruby/test_lambda.rb index 0173bead11..d65ab7667f 100644 --- a/test/ruby/test_lambda.rb +++ b/test/ruby/test_lambda.rb @@ -38,7 +38,7 @@ class TestLambdaParameters < Test::Unit::TestCase assert_equal(1, ->(&b){ b.call }.call { 1 }) b = nil assert_equal(1, ->(&b){ b.call }.call { 1 }) - assert_not_nil(b) + assert_nil(b) end def foo -- cgit v1.2.3