aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2011-02-14 11:25:19 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2011-02-14 11:25:19 -0800
commit2487aab99a0c1767502c9f635102607fb4ded05d (patch)
tree087b750bc22eb3e0e000e34e23b5150d532fdf3d /activerecord/lib/active_record
parent6f4e3ffd0f42c92a00536e7e1356be3e8cf37639 (diff)
downloadrails-2487aab99a0c1767502c9f635102607fb4ded05d.tar.gz
rails-2487aab99a0c1767502c9f635102607fb4ded05d.tar.bz2
rails-2487aab99a0c1767502c9f635102607fb4ded05d.zip
fixtures will return a list of tables that may be effected, delete existing fixtures will delete those tables
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r--activerecord/lib/active_record/fixtures.rb31
1 files changed, 25 insertions, 6 deletions
diff --git a/activerecord/lib/active_record/fixtures.rb b/activerecord/lib/active_record/fixtures.rb
index feca1e0035..154c2d022c 100644
--- a/activerecord/lib/active_record/fixtures.rb
+++ b/activerecord/lib/active_record/fixtures.rb
@@ -590,8 +590,31 @@ class Fixtures
fixtures.size
end
- def delete_existing_fixtures(table = table_name)
- @connection.delete "DELETE FROM #{@connection.quote_table_name(table)}", 'Fixture Delete'
+ def delete_existing_fixtures
+ tables.each do |table|
+ @connection.delete "DELETE FROM #{@connection.quote_table_name(table)}", 'Fixture Delete'
+ end
+ end
+
+ # Return a list of tables this fixture effect. This is typically the +table_name+
+ # along with any habtm tables specified via Foxy Fixtures.
+ def tables
+ [table_name] + fixtures.values.map { |fixture|
+ row = fixture.to_hash
+
+ # If STI is used, find the correct subclass for association reflection
+ associations = []
+ if model_class && model_class < ActiveRecord::Base
+ reflection_class = row[inheritance_column_name].constantize rescue model_class
+ associations = reflection_class.reflect_on_all_associations
+ end
+
+ foxy_habtms = associations.find_all { |assoc|
+ assoc.macro == :has_and_belongs_to_many && row.key?(assoc.name.to_s)
+ }
+
+ foxy_habtms.map { |assoc| assoc.options[:join_table] }
+ }.flatten.uniq
end
def insert_fixtures
@@ -667,10 +690,6 @@ class Fixtures
@connection.insert_fixture(row, table_name)
end
- habtm_fixtures.keys.each do |table|
- delete_existing_fixtures(table)
- end
-
# insert any HABTM join tables we discovered
habtm_fixtures.each do |table, fixtures|
fixtures.each do |row|