summaryrefslogtreecommitdiff
path: root/lib/delegate.rb
diff options
context:
space:
mode:
authorMasataka Pocke Kuwabara <kuwabara@pocke.me>2020-07-10 07:01:10 +0900
committerGitHub <noreply@github.com>2020-07-09 15:01:10 -0700
commitba81bc24e62d03cc0f4c05cf4e2b378696631568 (patch)
tree0466e8eb5b4f3b013109ad827691688308623ae7 /lib/delegate.rb
parent7a479b30b647c38ded91e45c9e8e22d30b671e07 (diff)
Add instance_methods to class generated by DelegateClass
Also, make DelegateClass.instance_method fallback to superclass. Fixes [Bug #16982]
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3221 Merged-By: jeremyevans <code@jeremyevans.net>
Diffstat (limited to 'lib/delegate.rb')
-rw-r--r--lib/delegate.rb15
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/delegate.rb b/lib/delegate.rb
index d6fb90bdbf..a1fded6425 100644
--- a/lib/delegate.rb
+++ b/lib/delegate.rb
@@ -422,6 +422,21 @@ def DelegateClass(superclass, &block)
klass.define_singleton_method :protected_instance_methods do |all=true|
super(all) | superclass.protected_instance_methods
end
+ klass.define_singleton_method :instance_methods do |all=true|
+ super(all) | superclass.instance_methods
+ end
+ klass.define_singleton_method :public_instance_method do |name|
+ super(name)
+ rescue NameError
+ raise unless self.public_instance_methods.include?(name)
+ superclass.public_instance_method(name)
+ end
+ klass.define_singleton_method :instance_method do |name|
+ super(name)
+ rescue NameError
+ raise unless self.instance_methods.include?(name)
+ superclass.instance_method(name)
+ end
klass.module_eval(&block) if block
return klass
end