From 3441dfdb12d229ef07246a68ce1a775d77adf808 Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Tue, 15 Nov 2005 10:48:32 +0000 Subject: Associations handle case-equality more consistently: item.parts.is_a?(Array) and item.parts === Array. Closes #1345. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3043 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/CHANGELOG | 2 ++ .../lib/active_record/associations/association_proxy.rb | 17 ++++++++++++----- activerecord/test/associations_test.rb | 16 ++++++++++++++++ 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 ] * Oracle: active? and reconnect! methods for handling stale connections. Optionally retry queries after reconnect. #428 [Michael Schoen ] 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 -- cgit v1.2.3