Is it possible to make the Forwardable#def_delegator
method respect that the target method is private?
In the following code, when def_delegator
is used, Foo#hello
is called even though it's private, because the implementation of Forwardable#def_delegator
(actually, def_instance_delegator
) uses __send__
, which doesn't respect a method being private.
require "forwardable"
class Foo
def hello
"Hello"
end
private :hello
end
class Bar
extend Forwardable
def_delegator :@foo, :hello
def initialize
@foo = Foo.new
end
def bar
hello
end
end
foo = Foo.new
foo.hello # => NoMethodError: private method `hello' called for #<Foo:0x007f57c3cd1c80>
bar = Bar.new
bar.bar # => "Hello"
I'm using Ruby 2.0.