summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/delegate.rb2
-rw-r--r--test/test_delegate.rb7
2 files changed, 8 insertions, 1 deletions
diff --git a/lib/delegate.rb b/lib/delegate.rb
index 85c1eb4e4e..9f8ef9d5ad 100644
--- a/lib/delegate.rb
+++ b/lib/delegate.rb
@@ -81,7 +81,7 @@ class Delegator < BasicObject
if r && target.respond_to?(m)
target.__send__(m, *args, &block)
- elsif ::Kernel.respond_to?(m, true)
+ elsif ::Kernel.method_defined?(m) || ::Kernel.private_method_defined?(m)
::Kernel.instance_method(m).bind(self).(*args, &block)
else
super(m, *args, &block)
diff --git a/test/test_delegate.rb b/test/test_delegate.rb
index 5320520de3..ffc4d9527e 100644
--- a/test/test_delegate.rb
+++ b/test/test_delegate.rb
@@ -258,4 +258,11 @@ class TestDelegateClass < Test::Unit::TestCase
def test_dir_in_delegator_class
assert_equal(__dir__, Bug9403::DC.dir_name, Bug9403::Name)
end
+
+ def test_module_methods_vs_kernel_methods
+ delegate = SimpleDelegator.new(Object.new)
+ assert_raise(NoMethodError) do
+ delegate.constants
+ end
+ end
end