Skip to content
Browse files

construct a migrator with a list of migrations rather than a list of …

…paths
  • Loading branch information...
1 parent 29fdd8c commit bc276fbc2a94778686e3ec4a950926083b4e9778 @tenderlove tenderlove committed
Showing with 43 additions and 22 deletions.
  1. +29 −18 activerecord/lib/active_record/migration.rb
  2. +14 −4 activerecord/test/cases/migration_test.rb
View
47 activerecord/lib/active_record/migration.rb
@@ -546,14 +546,14 @@ class << self
def migrate(migrations_paths, target_version = nil, &block)
case
- when target_version.nil?
- up(migrations_paths, target_version, &block)
- when current_version == 0 && target_version == 0
- []
- when current_version > target_version
- down(migrations_paths, target_version, &block)
- else
- up(migrations_paths, target_version, &block)
+ when target_version.nil?
+ up(migrations_paths, target_version, &block)
+ when current_version == 0 && target_version == 0
+ []
+ when current_version > target_version
+ down(migrations_paths, target_version, &block)
+ else
+ up(migrations_paths, target_version, &block)
end
end
@@ -566,15 +566,19 @@ def forward(migrations_paths, steps=1)
end
def up(migrations_paths, target_version = nil, &block)
- self.new(:up, migrations_paths, target_version).migrate(&block)
+ self.new(:up, migrations(migrations_paths), target_version).migrate(&block)
end
def down(migrations_paths, target_version = nil, &block)
- self.new(:down, migrations_paths, target_version).migrate(&block)
+ self.new(:down, migrations(migrations_paths), target_version).migrate(&block)
end
def run(direction, migrations_paths, target_version)
- self.new(direction, migrations_paths, target_version).run
+ self.new(direction, migrations(migrations_paths), target_version).run
+ end
+
+ def open(migrations_paths)
+ self.new(:up, migrations(migrations_paths), nil)
end
def schema_migrations_table_name
@@ -638,7 +642,7 @@ def migrations(paths)
private
def move(direction, migrations_paths, steps)
- migrator = self.new(direction, migrations_paths)
+ migrator = self.new(direction, migrations(migrations_paths))
start_index = migrator.migrations.index(migrator.current_migration)
if start_index
@@ -649,10 +653,20 @@ def move(direction, migrations_paths, steps)
end
end
- def initialize(direction, migrations_paths, target_version = nil)
+ def initialize(direction, migrations, target_version = nil)
raise StandardError.new("This database does not yet support migrations") unless Base.connection.supports_migrations?
Base.connection.initialize_schema_migrations_table
- @direction, @migrations_paths, @target_version = direction, migrations_paths, target_version
+
+ @direction = direction
+
+ if Array(migrations).grep(String).empty?
+ @migrations = migrations
+ else
+ ActiveSupport::Deprecation.warn "instantiate this class with a list of migrations"
@jeremy Ruby on Rails member
jeremy added a note

Fixed fe70cde

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
+ @migrations = self.class.migrations(migrations)
+ end
+
+ @target_version = target_version
end
def current_version
@@ -721,10 +735,7 @@ def migrate(&block)
end
def migrations
- @migrations ||= begin
- migrations = self.class.migrations(@migrations_paths)
- down? ? migrations.reverse : migrations
- end
+ down? ? @migrations.reverse : @migrations
end
def pending_migrations
View
18 activerecord/test/cases/migration_test.rb
@@ -890,7 +890,8 @@ def test_migrator_one_up_with_exception_and_rollback
end
def test_finds_migrations
- migrations = ActiveRecord::Migrator.new(:up, MIGRATIONS_ROOT + "/valid").migrations
+ list = ActiveRecord::Migrator.migrations(MIGRATIONS_ROOT + "/valid")
+ migrations = ActiveRecord::Migrator.new(:up, list).migrations
[[1, 'ValidPeopleHaveLastNames'], [2, 'WeNeedReminders'], [3, 'InnocentJointable']].each_with_index do |pair, i|
assert_equal migrations[i].version, pair.first
@@ -899,7 +900,8 @@ def test_finds_migrations
end
def test_finds_migrations_in_subdirectories
- migrations = ActiveRecord::Migrator.new(:up, MIGRATIONS_ROOT + "/valid_with_subdirectories").migrations
+ list = ActiveRecord::Migrator.migrations(MIGRATIONS_ROOT + "/valid_with_subdirectories")
+ migrations = ActiveRecord::Migrator.new(:up, list).migrations
[[1, 'ValidPeopleHaveLastNames'], [2, 'WeNeedReminders'], [3, 'InnocentJointable']].each_with_index do |pair, i|
assert_equal migrations[i].version, pair.first
@@ -909,7 +911,8 @@ def test_finds_migrations_in_subdirectories
def test_finds_migrations_from_two_directories
directories = [MIGRATIONS_ROOT + '/valid_with_timestamps', MIGRATIONS_ROOT + '/to_copy_with_timestamps']
- migrations = ActiveRecord::Migrator.new(:up, directories).migrations
+ list = ActiveRecord::Migrator.migrations directories
+ migrations = ActiveRecord::Migrator.new(:up, list).migrations
[[20090101010101, "PeopleHaveHobbies"],
[20090101010202, "PeopleHaveDescriptions"],
@@ -932,13 +935,20 @@ def test_dump_schema_information_outputs_lexically_ordered_versions
def test_finds_pending_migrations
ActiveRecord::Migrator.up(MIGRATIONS_ROOT + "/interleaved/pass_2", 1)
- migrations = ActiveRecord::Migrator.new(:up, MIGRATIONS_ROOT + "/interleaved/pass_2").pending_migrations
+ migration_list = ActiveRecord::Migrator.migrations(MIGRATIONS_ROOT + "/interleaved/pass_2")
+ migrations = ActiveRecord::Migrator.new(:up, migration_list).pending_migrations
assert_equal 1, migrations.size
assert_equal migrations[0].version, 3
assert_equal migrations[0].name, 'InterleavedInnocentJointable'
end
+ def test_deprecated_constructor
+ assert_deprecated do
+ ActiveRecord::Migrator.new(:up, MIGRATIONS_ROOT + "/interleaved/pass_2")
+ end
+ end
+
def test_relative_migrations
list = Dir.chdir(MIGRATIONS_ROOT) do
ActiveRecord::Migrator.up("valid/", 1)

0 comments on commit bc276fb

Please sign in to comment.
Something went wrong with that request. Please try again.