diff options
-rw-r--r-- | lib/delegate.rb | 2 | ||||
-rw-r--r-- | test/test_delegate.rb | 7 |
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 |