From 81f71a69c013c8271fff0438c5b8f127a7033001 Mon Sep 17 00:00:00 2001 From: Brennan Dunn Date: Sun, 31 Aug 2008 18:21:45 -0400 Subject: [PATCH] Fixed AssociationCollection to not mutate original options hash --- .../associations/association_collection.rb | 2 +- .../associations/has_many_associations_test.rb | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/activerecord/lib/active_record/associations/association_collection.rb b/activerecord/lib/active_record/associations/association_collection.rb index 5092ccc..f4f0323 100644 --- a/activerecord/lib/active_record/associations/association_collection.rb +++ b/activerecord/lib/active_record/associations/association_collection.rb @@ -9,7 +9,7 @@ module ActiveRecord end def find(*args) - options = args.extract_options! + options = args.extract_options!.dup # If using a custom finder_sql, scan the entire collection. if @reflection.options[:finder_sql] diff --git a/activerecord/test/cases/associations/has_many_associations_test.rb b/activerecord/test/cases/associations/has_many_associations_test.rb index feac4b0..1a9c52e 100644 --- a/activerecord/test/cases/associations/has_many_associations_test.rb +++ b/activerecord/test/cases/associations/has_many_associations_test.rb @@ -793,6 +793,18 @@ class HasManyAssociationsTest < ActiveRecord::TestCase firm = companies(:first_firm) assert_equal 2, firm.clients.find(:all).length end + + def test_find_options_arent_mutated + firm, another_firm = companies(:first_firm), companies(:another_firm) + options = { :order => 'name asc' } + original_options = options.dup + + first_set = firm.clients.find(:all, options) + assert_equal original_options, options + + second_set = firm.clients(true).find(:all, options) + assert_equal first_set, second_set + end def test_replace_with_less firm = Firm.find(:first) @@ -925,7 +937,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase assert_equal authors(:david).hello_posts, authors(:david).hello_posts_with_hash_conditions assert_equal authors(:david).hello_post_comments, authors(:david).hello_post_comments_with_hash_conditions end - + def test_include_uses_array_include_after_loaded firm = companies(:first_firm) firm.clients.class # force load target -- 1.5.6.4