diff options
author | kennyj <kennyj@gmail.com> | 2012-01-10 22:49:44 +0900 |
---|---|---|
committer | kennyj <kennyj@gmail.com> | 2012-01-11 00:35:06 +0900 |
commit | c5ba4896ab4b5d5c8c3d5f3eaf970b600c7a2017 (patch) | |
tree | 0bf5373e5db0ec3c38a4f2e6a5c653c1612c2b50 | |
parent | 3f38d8442e2c365c6625c647d77f7b31f4da0cd1 (diff) | |
download | rails-c5ba4896ab4b5d5c8c3d5f3eaf970b600c7a2017.tar.gz rails-c5ba4896ab4b5d5c8c3d5f3eaf970b600c7a2017.tar.bz2 rails-c5ba4896ab4b5d5c8c3d5f3eaf970b600c7a2017.zip |
migrate(:down) method with table_name_prefix
-rw-r--r-- | activerecord/lib/active_record/migration.rb | 28 | ||||
-rw-r--r-- | activerecord/test/cases/invertible_migration_test.rb | 12 |
2 files changed, 34 insertions, 6 deletions
diff --git a/activerecord/lib/active_record/migration.rb b/activerecord/lib/active_record/migration.rb index 3d3918c043..c57a637a34 100644 --- a/activerecord/lib/active_record/migration.rb +++ b/activerecord/lib/active_record/migration.rb @@ -344,12 +344,24 @@ module ActiveRecord @name = self.class.name @version = nil @connection = nil + @reverting = false end # instantiate the delegate object after initialize is defined self.verbose = true self.delegate = new + def revert + @reverting = true + yield + ensure + @reverting = false + end + + def reverting? + @reverting + end + def up self.class.delegate = self return unless self.class.respond_to?(:up) @@ -383,9 +395,11 @@ module ActiveRecord end @connection = conn time = Benchmark.measure { - recorder.inverse.each do |cmd, args| - send(cmd, *args) - end + self.revert { + recorder.inverse.each do |cmd, args| + send(cmd, *args) + end + } } else time = Benchmark.measure { change } @@ -440,9 +454,11 @@ module ActiveRecord arg_list = arguments.map{ |a| a.inspect } * ', ' say_with_time "#{method}(#{arg_list})" do - unless arguments.empty? || method == :execute - arguments[0] = Migrator.proper_table_name(arguments.first) - arguments[1] = Migrator.proper_table_name(arguments.second) if method == :rename_table + unless reverting? + unless arguments.empty? || method == :execute + arguments[0] = Migrator.proper_table_name(arguments.first) + arguments[1] = Migrator.proper_table_name(arguments.second) if method == :rename_table + end end return super unless connection.respond_to?(method) connection.send(method, *arguments, &block) diff --git a/activerecord/test/cases/invertible_migration_test.rb b/activerecord/test/cases/invertible_migration_test.rb index 3ae7b63dff..8f1cdd47ea 100644 --- a/activerecord/test/cases/invertible_migration_test.rb +++ b/activerecord/test/cases/invertible_migration_test.rb @@ -88,5 +88,17 @@ module ActiveRecord LegacyMigration.down assert !ActiveRecord::Base.connection.table_exists?("horses"), "horses should not exist" end + + def test_migrate_down_with_table_name_prefix + ActiveRecord::Base.table_name_prefix = 'p_' + ActiveRecord::Base.table_name_suffix = '_s' + migration = InvertibleMigration.new + migration.migrate(:up) + assert_nothing_raised { migration.migrate(:down) } + assert !ActiveRecord::Base.connection.table_exists?("p_horses_s"), "p_horses_s should not exist" + ensure + ActiveRecord::Base.table_name_prefix = ActiveRecord::Base.table_name_suffix = '' + end + end end |