summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--class.c4
-rw-r--r--lib/delegate.rb4
-rw-r--r--test/test_delegate.rb7
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 <naruse@ruby-lang.org>
+
+ * 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 <luislavena@gmail.com>
* 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
* <i>obj</i>. This will include all the methods accessible in
* <i>obj</i>'s ancestors.
+ * If the <i>all</i> parameter is set to <code>false</code>, 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