summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--lib/ostruct.rb8
-rw-r--r--test/ostruct/test_ostruct.rb23
3 files changed, 37 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 38d1d8b58b..69d7c9b102 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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