Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions lib/delegate.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 10 additions & 0 deletions test/test_delegate.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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]")
Expand Down