diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | lib/ostruct.rb | 8 | ||||
-rw-r--r-- | test/ostruct/test_ostruct.rb | 23 |
3 files changed, 37 insertions, 0 deletions
@@ -1,3 +1,9 @@ +Thu Sep 25 09:00:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org> + + * lib/ostruct.rb: Added OpenStruct#==. + + * test/ostruct/test_ostruct.rb: Added. + Thu Sep 25 07:55:26 2003 Nobuyoshi Nakada <nobu@ruby-lang.org> * ext/win32ole/win32ole.c, ext/openssl/ossl_pkey_dsa.c, diff --git a/lib/ostruct.rb b/lib/ostruct.rb index b1ae641dcb..eea7132ca0 100644 --- a/lib/ostruct.rb +++ b/lib/ostruct.rb @@ -48,4 +48,12 @@ class OpenStruct end str << ">" end + + attr_reader :table + protected :table + + def ==(other) + return false unless(other.kind_of?(OpenStruct)) + return @table == other.table + end end diff --git a/test/ostruct/test_ostruct.rb b/test/ostruct/test_ostruct.rb new file mode 100644 index 0000000000..24ed17f800 --- /dev/null +++ b/test/ostruct/test_ostruct.rb @@ -0,0 +1,23 @@ +require 'test/unit' +require 'ostruct' + +class TC_OpenStruct < Test::Unit::TestCase + def test_equality + o1 = OpenStruct.new + o2 = OpenStruct.new + assert_equal(o1, o2) + + o1.a = 'a' + assert_not_equal(o1, o2) + + o2.a = 'a' + assert_equal(o1, o2) + + o1.a = 'b' + assert_not_equal(o1, o2) + + o2 = Object.new + o2.instance_eval{@table = {:a => 'b'}} + assert_not_equal(o1, o2) + end +end |