From ba81bc24e62d03cc0f4c05cf4e2b378696631568 Mon Sep 17 00:00:00 2001 From: Masataka Pocke Kuwabara Date: Fri, 10 Jul 2020 07:01:10 +0900 Subject: Add instance_methods to class generated by DelegateClass Also, make DelegateClass.instance_method fallback to superclass. Fixes [Bug #16982] --- lib/delegate.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'lib') 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 -- cgit v1.2.3