From 6e56d645f0e176f7186027d0e0964ca62f4d4b6f Mon Sep 17 00:00:00 2001 From: naruse Date: Sun, 4 Dec 2011 03:05:03 +0000 Subject: [PATCH] * lib/delegate.rb (Delegator#methods): Kernel#methods receives zero or one argument. [ruby-core:37118] [Bug #4882] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33939 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ class.c | 4 +++- lib/delegate.rb | 4 ++-- test/test_delegate.rb | 7 +++++++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index e62b484cc3..6272065f85 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sun Dec 4 12:03:16 2011 NARUSE, Yui + + * lib/delegate.rb (Delegator#methods): Kernel#methods receives + zero or one argument. [ruby-core:37118] [Bug #4882] + Sun Dec 4 10:15:00 2011 Luis Lavena * ext/zlib/zlib.c (rb_gzreader_initialize): use binary mode by default diff --git a/class.c b/class.c index b595473333..b744c88f8f 100644 --- a/class.c +++ b/class.c @@ -1111,11 +1111,13 @@ rb_class_public_instance_methods(int argc, VALUE *argv, VALUE mod) /* * call-seq: - * obj.methods -> array + * obj.methods(all=true) -> array * * Returns a list of the names of public and protected methods of * obj. This will include all the methods accessible in * obj's ancestors. + * If the all parameter is set to false, only those methods + * in the receiver will be listed. * * class Klass * def klass_method() diff --git a/lib/delegate.rb b/lib/delegate.rb index 2086a721f9..863c63ff58 100644 --- a/lib/delegate.rb +++ b/lib/delegate.rb @@ -92,8 +92,8 @@ class Delegator < BasicObject # Returns the methods available to this delegate object as the union # of this object's and \_\_getobj\_\_ methods. # - def methods - __getobj__.methods | super + def methods(all=true) + __getobj__.methods(all) | super end # diff --git a/test/test_delegate.rb b/test/test_delegate.rb index dc12aa35f9..a09451b88f 100644 --- a/test/test_delegate.rb +++ b/test/test_delegate.rb @@ -111,6 +111,13 @@ class TestDelegateClass < Test::Unit::TestCase assert_raise(NoMethodError, '[ruby-dev:40314]#3') {m.call} end + def test_methods + s = SimpleDelegator.new("foo") + assert_equal([], s.methods(false)) + def s.bar; end + assert_equal([:bar], s.methods(false)) + end + class Foo private def delegate_test_private