summaryrefslogtreecommitdiff
path: root/lib/delegate.rb
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-11-04 20:36:20 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-11-04 20:36:20 +0000
commit1eee78b8769f7f01cead3b0782e1ee4ed84e281b (patch)
tree32ac34a556e40ef93a8e4a15f328d36886b4fc45 /lib/delegate.rb
parented823523e32e8e8a04123ee5b8ec9c0f3de63c02 (diff)
* eval.c (rb_f_send): allow send/__send__ to call methods of all
visibility again. we no longer provide __send, __send!. * eval.c (rb_invoke_method): new method to honor private visibility. if it's invoked in a function call style, it calls private methods as well (previous 1.9 send behavior). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13824 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/delegate.rb')
-rw-r--r--lib/delegate.rb8
1 files changed, 4 insertions, 4 deletions
diff --git a/lib/delegate.rb b/lib/delegate.rb
index 9084a7f191..809faa32c6 100644
--- a/lib/delegate.rb
+++ b/lib/delegate.rb
@@ -115,7 +115,7 @@
# implementation, see SimpleDelegator.
#
class Delegator
- preserved = [:__id__, :object_id, :__send__, :__send, :__send!, :respond_to?, :send, :send!]
+ preserved = [:__id__, :object_id, :__send__, :invoke_method, :respond_to?, :send]
instance_methods.each do |m|
next if preserved.include?(m)
undef_method m
@@ -137,7 +137,7 @@ class Delegator
unless target.respond_to?(m)
super(m, *args, &block)
else
- target.__send(m, *args, &block)
+ target.__send__(m, *args, &block)
end
rescue Exception
$@.delete_if{|s| /^#{__FILE__}:\d+:in `method_missing'$/ =~ s} #`
@@ -262,7 +262,7 @@ def DelegateClass(superclass)
klass = Class.new
methods = superclass.public_instance_methods(true)
methods -= [
- :__id__, :object_id, :__send__, :__send, :__send!, :respond_to?, :send, :send!,
+ :__id__, :object_id, :__send__, :invoke_method, :respond_to?, :send,
:==, :equal?, :initialize, :method_missing, :__getobj__, :__setobj__,
:clone, :dup, :marshal_dump, :marshal_load,
]
@@ -281,7 +281,7 @@ def DelegateClass(superclass)
klass.module_eval <<-EOS, __FILE__, __LINE__+1
def #{method}(*args, &block)
begin
- @delegate_dc_obj.__send(:#{method}, *args, &block)
+ @delegate_dc_obj.__send__(:#{method}, *args, &block)
rescue
raise $!, $@[2..-1]
end