diff --git a/lib/delegate.rb b/lib/delegate.rb index af95c86..572a1c7 100644 --- a/lib/delegate.rb +++ b/lib/delegate.rb @@ -410,16 +410,18 @@ def __setobj__(obj) # :nodoc: __raise__ ::ArgumentError, "cannot delegate to self" if self.equal?(obj) @delegate_dc_obj = obj end + end + methods_module = Module.new do protected_instance_methods.each do |method| define_method(method, Delegator.delegating_block(method)) - alias_method(method, method) protected method end public_instance_methods.each do |method| define_method(method, Delegator.delegating_block(method)) - alias_method(method, method) end end + klass.const_set("DelegateClass_Methods", methods_module) + klass.include(methods_module) klass.define_singleton_method :public_instance_methods do |all=true| super(all) | superclass.public_instance_methods end diff --git a/test/test_delegate.rb b/test/test_delegate.rb index 431d134..0286b17 100644 --- a/test/test_delegate.rb +++ b/test/test_delegate.rb @@ -41,6 +41,16 @@ def first assert_empty(warning) end + def test_delegate_class_block_with_override_from_module + mod = Module.new do + def first + super.inspect + end + end + klass = DelegateClass(Array) { include mod } + assert_equal("1", klass.new([1]).first) + end + def test_systemcallerror_eq e = SystemCallError.new(0) assert((SimpleDelegator.new(e) == e) == (e == SimpleDelegator.new(e)), "[ruby-dev:34808]")