Created
May 6, 2012 00:48
-
-
Save tenderlove/2606646 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/lib/delegate.rb b/lib/delegate.rb | |
index 863c63f..a09fcf9 100644 | |
--- a/lib/delegate.rb | |
+++ b/lib/delegate.rb | |
@@ -122,6 +122,22 @@ class Delegator < BasicObject | |
self.__getobj__ == obj | |
end | |
+ def eql?(obj) | |
+ if obj.equal? self | |
+ __getobj__.eql? obj.__getobj__ | |
+ else | |
+ __getobj__.eql?(obj) | |
+ end | |
+ end | |
+ | |
+ def <=>(obj) | |
+ if obj.equal? self | |
+ __getobj__ <=> obj.__getobj__ | |
+ else | |
+ __getobj__ <=> obj | |
+ end | |
+ end | |
+ | |
# | |
# Returns true if two objects are not considered of equal value. | |
# | |
diff --git a/test/test_delegate.rb b/test/test_delegate.rb | |
index a09451b..aec52fb 100644 | |
--- a/test/test_delegate.rb | |
+++ b/test/test_delegate.rb | |
@@ -134,3 +134,38 @@ class TestDelegateClass < Test::Unit::TestCase | |
assert_raise(NoMethodError, '[ruby-dev:40314]#5') {d.send(:delegate_test_private)} | |
end | |
end | |
+ | |
+class WidgetWrapperTests < MiniTest::Unit::TestCase | |
+ class Widget | |
+ end | |
+ | |
+ class WidgetWrapper < DelegateClass(Widget) | |
+ end | |
+ | |
+ attr_reader :widget, :wrapper | |
+ | |
+ def setup | |
+ @widget = Widget.new | |
+ @wrapper = WidgetWrapper.new @widget | |
+ end | |
+ | |
+ def test_equal_operator | |
+ assert_equal(widget == widget, wrapper == wrapper) | |
+ end | |
+ | |
+ def test_equal | |
+ assert_equal(widget.equal?(widget), wrapper.equal?(wrapper)) | |
+ end | |
+ | |
+ def test_comparison | |
+ assert_equal(widget <=> widget, wrapper <=> wrapper) | |
+ end | |
+ | |
+ def test_eql | |
+ assert_equal(widget.eql?(widget), wrapper.eql?(wrapper)) | |
+ end | |
+ | |
+ def test_hash | |
+ assert_equal(widget.hash, wrapper.hash) | |
+ end | |
+end |
Nice catch, you're right. I'll update my patch. :-)
Interesting. I've updated my patch, and hash
seems to behave as expected.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
If you define
eql?
,hash
needs to be defined so they work as one.