aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activerecord/CHANGELOG2
-rw-r--r--activerecord/lib/active_record/associations/association_proxy.rb17
-rwxr-xr-xactiverecord/test/associations_test.rb16
3 files changed, 30 insertions, 5 deletions
diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG
index 4ac63d1245..dedbd26675 100644
--- a/activerecord/CHANGELOG
+++ b/activerecord/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Associations handle case-equality more consistently: item.parts.is_a?(Array) and item.parts === Array. #1345 [MarkusQ@reality.com]
+
* SQLServer: insert uses given primary key value if not nil rather than SELECT @@IDENTITY. #2866 [kajism@yahoo.com, Tom Ward <tom@popdog.net>]
* Oracle: active? and reconnect! methods for handling stale connections. Optionally retry queries after reconnect. #428 [Michael Schoen <schoenm@earthlink.net>]
diff --git a/activerecord/lib/active_record/associations/association_proxy.rb b/activerecord/lib/active_record/associations/association_proxy.rb
index 8245234854..17b8cc6446 100644
--- a/activerecord/lib/active_record/associations/association_proxy.rb
+++ b/activerecord/lib/active_record/associations/association_proxy.rb
@@ -17,13 +17,20 @@ module ActiveRecord
reset
end
- def reload
- reset
+ def respond_to?(symbol, include_priv = false)
+ proxy_respond_to?(symbol, include_priv) || (load_target && @target.respond_to?(symbol, include_priv))
+ end
+
+ # Explicitly proxy === because the instance method removal above
+ # doesn't catch it.
+ def ===(other)
load_target
+ other === @target
end
- def respond_to?(symbol, include_priv = false)
- proxy_respond_to?(symbol, include_priv) || (load_target && @target.respond_to?(symbol, include_priv))
+ def reload
+ reset
+ load_target
end
def loaded?
@@ -98,4 +105,4 @@ module ActiveRecord
end
end
end
-end \ No newline at end of file
+end
diff --git a/activerecord/test/associations_test.rb b/activerecord/test/associations_test.rb
index fd15098f36..351dc4bcb3 100755
--- a/activerecord/test/associations_test.rb
+++ b/activerecord/test/associations_test.rb
@@ -79,6 +79,7 @@ class HasOneAssociationsTest < Test::Unit::TestCase
def test_triple_equality
assert Account === companies(:first_firm).account
+ assert companies(:first_firm).account === Account
end
def test_type_mismatch
@@ -280,6 +281,11 @@ class HasManyAssociationsTest < Test::Unit::TestCase
assert_equal 2, Firm.find(:first).clients.length
end
+ def test_triple_equality
+ assert !(Array === Firm.find(:first).clients)
+ assert Firm.find(:first).clients === Array
+ end
+
def test_finding_default_orders
assert_equal "Summit", Firm.find(:first).clients.first.name
end
@@ -747,6 +753,11 @@ class BelongsToAssociationsTest < Test::Unit::TestCase
assert_nothing_raised { account.firm = account.firm }
end
+ def test_triple_equality
+ assert Client.find(3).firm === Firm
+ assert Firm === Client.find(3).firm
+ end
+
def test_type_mismatch
assert_raise(ActiveRecord::AssociationTypeMismatch) { Account.find(1).firm = 1 }
assert_raise(ActiveRecord::AssociationTypeMismatch) { Account.find(1).firm = Project.find(1) }
@@ -1026,6 +1037,11 @@ class HasAndBelongsToManyAssociationsTest < Test::Unit::TestCase
assert active_record.developers.include?(david)
end
+ def test_triple_equality
+ assert !(Array === Developer.find(1).projects)
+ assert Developer.find(1).projects === Array
+ end
+
def test_adding_single
jamis = Developer.find(2)
jamis.projects.reload # causing the collection to load