data_migrate 9.4.2 → 10.0.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build.yml +3 -3
  3. data/.github/workflows/gempush.yml +8 -6
  4. data/.gitignore +2 -3
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +14 -0
  7. data/Appraisals +5 -5
  8. data/Changelog.md +2 -46
  9. data/Gemfile +1 -0
  10. data/Gemfile.rails6.1 +11 -0
  11. data/README.md +5 -7
  12. data/data_migrate.gemspec +2 -2
  13. data/gemfiles/{rails_7.1.gemfile → rails_6.0.gemfile} +2 -1
  14. data/gemfiles/rails_6.1.gemfile +1 -0
  15. data/gemfiles/rails_7.0.gemfile +2 -1
  16. data/lib/data_migrate/data_migrator.rb +23 -15
  17. data/lib/data_migrate/data_schema.rb +2 -2
  18. data/lib/data_migrate/data_schema_migration.rb +7 -24
  19. data/lib/data_migrate/database_tasks.rb +48 -194
  20. data/lib/data_migrate/legacy_migrator.rb +22 -0
  21. data/lib/data_migrate/migration_context.rb +8 -11
  22. data/lib/data_migrate/schema_dumper.rb +1 -1
  23. data/lib/data_migrate/schema_migration.rb +4 -5
  24. data/lib/data_migrate/status_service.rb +4 -4
  25. data/lib/data_migrate/tasks/data_migrate_tasks.rb +15 -14
  26. data/lib/data_migrate/version.rb +1 -1
  27. data/lib/data_migrate.rb +1 -2
  28. data/spec/data_migrate/data_migrator_spec.rb +14 -17
  29. data/spec/data_migrate/data_schema_migration_spec.rb +8 -25
  30. data/spec/data_migrate/data_spec.rb +1 -1
  31. data/spec/data_migrate/database_tasks_spec.rb +19 -34
  32. data/spec/data_migrate/legacy_migrator_spec.rb +38 -0
  33. data/spec/data_migrate/migration_context_spec.rb +8 -15
  34. data/spec/data_migrate/schema_dumper_spec.rb +3 -6
  35. data/spec/data_migrate/schema_migration_spec.rb +6 -13
  36. data/spec/data_migrate/status_service_spec.rb +4 -7
  37. data/spec/data_migrate/tasks/data_migrate_tasks_spec.rb +14 -13
  38. data/spec/db/data/20091231235959_some_name.rb +1 -1
  39. data/spec/db/data/20171231235959_super_update.rb +1 -1
  40. data/spec/db/migrate/20131111111111_late_migration.rb +1 -1
  41. data/spec/db/migrate/20202020202011_db_migration.rb +1 -1
  42. data/tasks/databases.rake +83 -25
  43. metadata +19 -21
  44. data/Gemfile.lock +0 -184
  45. data/gemfiles/rails_6.1.gemfile.lock +0 -229
  46. data/gemfiles/rails_7.0.gemfile.lock +0 -230
  47. data/gemfiles/rails_7.1.gemfile.lock +0 -263
  48. data/lib/data_migrate/database_configurations_wrapper.rb +0 -11
  49. data/lib/data_migrate/rails_helper.rb +0 -79
  50. data/lib/data_migrate/test.rb +0 -14
@@ -8,6 +8,12 @@ describe DataMigrate::DatabaseTasks do
8
8
  let(:data_migrations_path) {
9
9
  DataMigrate.config.data_migrations_path
10
10
  }
11
+ let(:db_config) do
12
+ {
13
+ adapter: "sqlite3",
14
+ database: "spec/db/test.db"
15
+ }
16
+ end
11
17
 
12
18
  before do
13
19
  # In a normal Rails installation, db_dir would defer to
@@ -21,10 +27,14 @@ describe DataMigrate::DatabaseTasks do
21
27
  allow(DataMigrate::Tasks::DataMigrateTasks).to receive(:migrations_paths) {
22
28
  data_migrations_path
23
29
  }
24
- ActiveRecord::Base.establish_connection({ adapter: "sqlite3", database: "spec/db/test.db" })
25
- hash_config = ActiveRecord::DatabaseConfigurations::HashConfig.new('test', 'test', { adapter: "sqlite3", database: "spec/db/test.db" })
26
- config_obj = ActiveRecord::DatabaseConfigurations.new([hash_config])
27
- allow(ActiveRecord::Base).to receive(:configurations).and_return(config_obj)
30
+ ActiveRecord::Base.establish_connection(db_config)
31
+ if Gem::Dependency.new("rails", ">= 6.1").match?("rails", Gem.loaded_specs["rails"].version)
32
+ hash_config = ActiveRecord::DatabaseConfigurations::HashConfig.new('test', 'test', db_config)
33
+ config_obj = ActiveRecord::DatabaseConfigurations.new([hash_config])
34
+ allow(ActiveRecord::Base).to receive(:configurations).and_return(config_obj)
35
+ else
36
+ ActiveRecord::Base.configurations[:test] = db_config
37
+ end
28
38
  end
29
39
 
30
40
  context "migrations" do
@@ -34,7 +44,7 @@ describe DataMigrate::DatabaseTasks do
34
44
  end
35
45
 
36
46
  before do
37
- DataMigrate::RailsHelper.schema_migration.create_table
47
+ ActiveRecord::SchemaMigration.create_table
38
48
 
39
49
  allow(DataMigrate::SchemaMigration).to receive(:migrations_paths) {
40
50
  migration_path
@@ -59,47 +69,22 @@ describe DataMigrate::DatabaseTasks do
59
69
  end
60
70
 
61
71
  describe :forward do
72
+
62
73
  it "run forward default amount of times" do
63
74
  subject.forward
64
- versions = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
75
+ versions = DataMigrate::DataSchemaMigration.normalized_versions
65
76
  expect(versions.count).to eq(1)
66
77
  end
67
78
 
68
79
  it "run forward defined number of times" do
69
80
  subject.forward(2)
70
- versions = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
81
+ versions = DataMigrate::DataSchemaMigration.normalized_versions
71
82
  expect(versions.count).to eq(1)
72
83
  expect(versions.first).to eq "20091231235959"
73
- versions = DataMigrate::RailsHelper.schema_migration.normalized_versions
84
+ versions = ActiveRecord::SchemaMigration.normalized_versions
74
85
  expect(versions.count).to eq(1)
75
86
  expect(versions.first).to eq "20131111111111"
76
87
  end
77
88
  end
78
-
79
- if DataMigrate::RailsHelper.rails_version_equal_to_or_higher_than_7_0
80
- describe :schema_dump_path do
81
- before do
82
- allow(ActiveRecord::Base).to receive(:configurations).and_return(ActiveRecord::DatabaseConfigurations.new([db_config]))
83
- end
84
-
85
- context "for primary database" do
86
- let(:db_config) { ActiveRecord::DatabaseConfigurations::HashConfig.new("development", "primary", {} ) }
87
-
88
- context "for :ruby db format" do
89
- it 'returns the data schema path' do
90
- allow(ActiveRecord).to receive(:schema_format).and_return(:ruby)
91
- expect(subject.schema_dump_path(db_config)).to eq("db/data_schema.rb")
92
- end
93
- end
94
-
95
- context "for :sql db format" do
96
- it 'returns the data schema path' do
97
- allow(ActiveRecord).to receive(:schema_format).and_return(:sql)
98
- expect(subject.schema_dump_path(db_config, :sql)).to eq("db/data_schema.rb")
99
- end
100
- end
101
- end
102
- end
103
- end
104
89
  end
105
90
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ describe DataMigrate::LegacyMigrator do
6
+ let(:context) {
7
+ DataMigrate::MigrationContext.new("spec/db/data")
8
+ }
9
+
10
+ before do
11
+ ActiveRecord::SchemaMigration.create_table
12
+ DataMigrate::DataSchemaMigration.create_table
13
+ end
14
+
15
+ after do
16
+ ActiveRecord::Migration.drop_table("data_migrations") rescue nil
17
+ ActiveRecord::Migration.drop_table("schema_migrations") rescue nil
18
+ end
19
+
20
+ it "migrate legacy migrations to be in correct table" do
21
+ # simulate creation of legacy data migration when
22
+ # it was recorded in schema table
23
+ ActiveRecord::SchemaMigration.create(version: "20091231235959")
24
+
25
+ # create one migration in correct place
26
+ DataMigrate::DataSchemaMigration.create(version: "20171231235959")
27
+
28
+ migrated = DataMigrate::DataMigrator.new(:up, []).load_migrated
29
+ expect(migrated.count).to eq 1
30
+
31
+ DataMigrate::LegacyMigrator.new("spec/db/data").migrate
32
+
33
+ # after migacy migrator has been run, we should have records
34
+ # of both migrations
35
+ migrated = DataMigrate::DataMigrator .new(:up, []).load_migrated
36
+ expect(migrated.count).to eq 2
37
+ end
38
+ end
@@ -5,17 +5,10 @@ require "spec_helper"
5
5
  describe DataMigrate::DataMigrator do
6
6
  let(:context) { DataMigrate::MigrationContext.new("spec/db/data") }
7
7
  let(:schema_context) { ActiveRecord::MigrationContext.new("spec/db/migrate", ActiveRecord::Base.connection.schema_migration) }
8
- let(:db_config) do
9
- {
10
- adapter: "sqlite3",
11
- database: "spec/db/test.db"
12
- }
13
- end
14
8
 
15
9
  before do
16
- ActiveRecord::Base.establish_connection(db_config)
17
- DataMigrate::RailsHelper.schema_migration.create_table
18
- DataMigrate::RailsHelper.data_schema_migration.create_table
10
+ ActiveRecord::SchemaMigration.create_table
11
+ DataMigrate::DataSchemaMigration.create_table
19
12
  end
20
13
 
21
14
  after do
@@ -27,7 +20,7 @@ describe DataMigrate::DataMigrator do
27
20
  it "migrates existing file" do
28
21
  context.migrate(nil)
29
22
  context.migrations_status
30
- versions = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
23
+ versions = DataMigrate::DataSchemaMigration.normalized_versions
31
24
  expect(versions.count).to eq(2)
32
25
  expect(versions).to include("20091231235959")
33
26
  expect(versions).to include("20171231235959")
@@ -36,7 +29,7 @@ describe DataMigrate::DataMigrator do
36
29
  it "undo migration" do
37
30
  context.migrate(nil)
38
31
  context.run(:down, 20171231235959)
39
- versions = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
32
+ versions = DataMigrate::DataSchemaMigration.normalized_versions
40
33
  expect(versions.count).to eq(1)
41
34
  expect(versions).to include("20091231235959")
42
35
  end
@@ -53,7 +46,7 @@ describe DataMigrate::DataMigrator do
53
46
 
54
47
  it "runs a specific migration" do
55
48
  context.run(:up, 20171231235959)
56
- versions = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
49
+ versions = DataMigrate::DataSchemaMigration.normalized_versions
57
50
  expect(versions.count).to eq(1)
58
51
  expect(versions).to include("20171231235959")
59
52
  end
@@ -81,7 +74,7 @@ describe DataMigrate::DataMigrator do
81
74
  expect {
82
75
  context.rollback
83
76
  }.to output(/Undoing SuperUpdate/).to_stdout
84
- versions = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
77
+ versions = DataMigrate::DataSchemaMigration.normalized_versions
85
78
  expect(versions.count).to eq(1)
86
79
  expect(versions).to include("20091231235959")
87
80
  end
@@ -92,7 +85,7 @@ describe DataMigrate::DataMigrator do
92
85
  expect {
93
86
  context.rollback(2)
94
87
  }.to output(/Undoing SomeName/).to_stdout
95
- versions = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
88
+ versions = DataMigrate::DataSchemaMigration.normalized_versions
96
89
  expect(versions.count).to eq(0)
97
90
  end
98
91
 
@@ -101,7 +94,7 @@ describe DataMigrate::DataMigrator do
101
94
  expect {
102
95
  context.rollback(2)
103
96
  }.to output(/Undoing SomeName/).to_stdout
104
- versions = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
97
+ versions = DataMigrate::DataSchemaMigration.normalized_versions
105
98
  expect(versions.count).to eq(0)
106
99
  end
107
100
  end
@@ -9,12 +9,9 @@ describe DataMigrate::SchemaDumper do
9
9
  end
10
10
 
11
11
  before do
12
- DataMigrate::RailsHelper.schema_migration.create_table
13
- DataMigrate::RailsHelper.data_schema_migration.create_table
14
-
15
- fixture_file_timestamps.map do |t|
16
- DataMigrate::RailsHelper.data_schema_migration.create_version(t)
17
- end
12
+ ActiveRecord::SchemaMigration.create_table
13
+ DataMigrate::DataSchemaMigration.create_table
14
+ DataMigrate::DataSchemaMigration.create(fixture_file_timestamps.map { |t| { version: t } })
18
15
  end
19
16
 
20
17
  after do
@@ -8,17 +8,10 @@ describe DataMigrate::SchemaMigration do
8
8
  let(:fixture_file_timestamps) do
9
9
  %w[20091231235959 20101231235959 20111231235959]
10
10
  end
11
- let(:db_config) do
12
- {
13
- adapter: "sqlite3",
14
- database: "spec/db/test.db"
15
- }
16
- end
17
11
 
18
12
  before do
19
- ActiveRecord::Base.establish_connection(db_config)
20
- DataMigrate::RailsHelper.schema_migration.create_table
21
- DataMigrate::RailsHelper.data_schema_migration.create_table
13
+ ActiveRecord::SchemaMigration.create_table
14
+ DataMigrate::DataSchemaMigration.create_table
22
15
  end
23
16
 
24
17
  after do
@@ -45,7 +38,7 @@ describe DataMigrate::SchemaMigration do
45
38
  expect {
46
39
  subject.run(:up, migration_path, 20202020202011)
47
40
  }.to output(/20202020202011 DbMigration: migrating/).to_stdout
48
- versions = DataMigrate::RailsHelper.schema_migration.normalized_versions
41
+ versions = ActiveRecord::SchemaMigration.normalized_versions
49
42
  expect(versions.first).to eq("20202020202011")
50
43
  end
51
44
 
@@ -56,7 +49,7 @@ describe DataMigrate::SchemaMigration do
56
49
  subject.run(:down, migration_path, 20202020202011)
57
50
  }.to output(/Undoing DbMigration/).to_stdout
58
51
 
59
- versions = DataMigrate::RailsHelper.schema_migration.normalized_versions
52
+ versions = ActiveRecord::SchemaMigration.normalized_versions
60
53
 
61
54
  expect(versions.count).to eq(0)
62
55
  end
@@ -68,9 +61,9 @@ describe DataMigrate::SchemaMigration do
68
61
  let(:paths) { ['spec/db/migrate', 'spec/db/migrate/other'] }
69
62
  let(:specification_name) { "primary" }
70
63
  let(:config_options) do
71
- if Gem::Dependency.new("railties", "~> 6.1").match?("railties", Gem.loaded_specs["railties"].version)
64
+ if Gem::Dependency.new("rails", "~> 6.0").match?("rails", Gem.loaded_specs["rails"].version)
72
65
  { env_name: Rails.env, spec_name: specification_name }
73
- else
66
+ elsif Gem::Dependency.new("rails", "~> 7.0").match?("rails", Gem.loaded_specs["rails"].version)
74
67
  { env_name: Rails.env, name: specification_name }
75
68
  end
76
69
  end
@@ -7,7 +7,7 @@ describe DataMigrate::StatusService do
7
7
  let(:stream) { StringIO.new }
8
8
  let(:stream_data) { stream.read }
9
9
  let(:connection_db_config) do
10
- if Gem::Dependency.new("railties", ">= 6.1").match?("railties", Gem.loaded_specs["railties"].version)
10
+ if Gem::Dependency.new("rails", ">= 6.1").match?("rails", Gem.loaded_specs["rails"].version)
11
11
  ActiveRecord::Base.connection_db_config
12
12
  else
13
13
  ActiveRecord::Base.configurations.configs_for.first
@@ -33,12 +33,9 @@ describe DataMigrate::StatusService do
33
33
  end
34
34
 
35
35
  before do
36
- DataMigrate::RailsHelper.schema_migration.create_table
37
- DataMigrate::RailsHelper.data_schema_migration.create_table
38
-
39
- fixture_file_timestamps.map do |t|
40
- DataMigrate::RailsHelper.data_schema_migration.create_version(t)
41
- end
36
+ ActiveRecord::SchemaMigration.create_table
37
+ DataMigrate::DataSchemaMigration.create_table
38
+ DataMigrate::DataSchemaMigration.create(fixture_file_timestamps.map { |t| { version: t } })
42
39
 
43
40
  subject.dump(connection_db_config, stream)
44
41
  stream.rewind
@@ -3,17 +3,17 @@
3
3
  require "spec_helper"
4
4
 
5
5
  describe DataMigrate::Tasks::DataMigrateTasks do
6
- let(:db_config) do
7
- {
8
- adapter: "sqlite3",
9
- database: "spec/db/test.db"
10
- }
6
+ let(:connection_db_config) do
7
+ if Gem::Dependency.new("rails", ">= 6.1").match?("rails", Gem.loaded_specs["rails"].version)
8
+ ActiveRecord::Base.connection_db_config
9
+ else
10
+ ActiveRecord::Base.configurations.configs_for.first
11
+ end
11
12
  end
12
13
 
13
14
  before do
14
- ActiveRecord::Base.establish_connection(db_config)
15
- DataMigrate::RailsHelper.schema_migration.create_table
16
- DataMigrate::RailsHelper.data_schema_migration.create_table
15
+ ActiveRecord::SchemaMigration.create_table
16
+ DataMigrate::DataSchemaMigration.create_table
17
17
  end
18
18
 
19
19
  after do
@@ -28,11 +28,11 @@ describe DataMigrate::Tasks::DataMigrateTasks do
28
28
  end
29
29
 
30
30
  context 'when not given a separate db config' do
31
- it 'does not override the default connection' do
31
+ it 'does not override the default connection' do
32
32
  expect(ActiveRecord::Base).not_to receive(:establish_connection)
33
33
  expect(DataMigrate::SchemaDumper).to receive(:dump)
34
34
 
35
- DataMigrate::Tasks::DataMigrateTasks.dump
35
+ DataMigrate::Tasks::DataMigrateTasks.dump(connection_db_config)
36
36
  end
37
37
  end
38
38
 
@@ -56,7 +56,8 @@ describe DataMigrate::Tasks::DataMigrateTasks do
56
56
 
57
57
  it 'overrides the default connection' do
58
58
  expect(ActiveRecord::Base).to receive(:establish_connection).with(override_config)
59
- DataMigrate::Tasks::DataMigrateTasks.dump
59
+
60
+ DataMigrate::Tasks::DataMigrateTasks.dump(connection_db_config)
60
61
  end
61
62
  end
62
63
  end
@@ -115,13 +116,13 @@ describe DataMigrate::Tasks::DataMigrateTasks do
115
116
 
116
117
  it "should display data migration status" do
117
118
  expect {
118
- DataMigrate::Tasks::DataMigrateTasks.status
119
+ DataMigrate::Tasks::DataMigrateTasks.status(connection_db_config)
119
120
  }.to output(/up 20091231235959 Some name/).to_stdout
120
121
  end
121
122
 
122
123
  it "should display schema and data migration status" do
123
124
  expect {
124
- DataMigrate::Tasks::DataMigrateTasks.status_with_schema
125
+ DataMigrate::Tasks::DataMigrateTasks.status_with_schema(connection_db_config)
125
126
  }.to output(match(/up data 20091231235959 Some name/)
126
127
  .and match(/down schema 20131111111111 Late migration/)).to_stdout
127
128
  end
@@ -1,4 +1,4 @@
1
- class SomeName < ActiveRecord::Migration[6.1]
1
+ class SomeName < ActiveRecord::Migration[6.0]
2
2
  def up
3
3
  puts "Doing data migration"
4
4
  end
@@ -1,4 +1,4 @@
1
- class SuperUpdate < ActiveRecord::Migration[6.1]
1
+ class SuperUpdate < ActiveRecord::Migration[6.0]
2
2
  def up
3
3
  puts "Doing SuperUpdate"
4
4
  end
@@ -1,4 +1,4 @@
1
- class LateMigration < ActiveRecord::Migration[6.1]
1
+ class LateMigration < ActiveRecord::Migration[6.0]
2
2
  def up
3
3
  puts "Doing schema LateMigration"
4
4
  end
@@ -1,4 +1,4 @@
1
- class DbMigration < ActiveRecord::Migration[6.1]
1
+ class DbMigration < ActiveRecord::Migration[6.0]
2
2
  def up
3
3
  puts "Doing schema migration"
4
4
  end
data/tasks/databases.rake CHANGED
@@ -5,16 +5,66 @@ require 'data_migrate/tasks/data_migrate_tasks'
5
5
  namespace :db do
6
6
  namespace :migrate do
7
7
  desc "Migrate the database data and schema (options: VERSION=x, VERBOSE=false)."
8
- task :with_data => :load_config do
9
- DataMigrate::DatabaseTasks.migrate_with_data
8
+ task :with_data => :environment do
9
+ original_db_config = ActiveRecord::Base.connection_db_config
10
+ ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
11
+ ActiveRecord::Base.establish_connection(db_config)
12
+ DataMigrate::DataMigrator.assure_data_schema_table
13
+
14
+ ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
15
+ target_version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
16
+ migrations = []
17
+
18
+ if target_version.nil?
19
+ migrations = DataMigrate::DatabaseTasks.pending_migrations.map{ |m| m.merge(:direction =>:up) }
20
+ else
21
+ current_schema_version = ActiveRecord::Migrator.current_version
22
+ schema_migrations = if target_version > current_schema_version
23
+ DataMigrate::DatabaseTasks.pending_schema_migrations.keep_if{ |m| m[:version] <= target_version }.map{ |m| m.merge(:direction =>:up) }
24
+ elsif target_version < current_schema_version
25
+ DataMigrate::DatabaseTasks.past_migrations.keep_if{ |m| m[:version] > target_version }.map{ |m| m.merge(:direction =>:down) }
26
+ else # ==
27
+ []
28
+ end
29
+
30
+ current_data_version = DataMigrate::DataMigrator.current_version
31
+ data_migrations = if target_version > current_data_version
32
+ DataMigrate::DatabaseTasks.pending_data_migrations.keep_if{ |m| m[:version] <= target_version }.map{ |m| m.merge(:direction =>:up) }
33
+ elsif target_version < current_data_version
34
+ DataMigrate::DatabaseTasks.past_migrations.keep_if{ |m| m[:version] > target_version }.map{ |m| m.merge(:direction =>:down) }
35
+ else # ==
36
+ []
37
+ end
38
+ migrations = if schema_migrations.empty?
39
+ data_migrations
40
+ elsif data_migrations.empty?
41
+ schema_migrations
42
+ elsif target_version > current_data_version && target_version > current_schema_version
43
+ DataMigrate::DatabaseTasks.sort_migrations data_migrations, schema_migrations
44
+ elsif target_version < current_data_version && target_version < current_schema_version
45
+ DataMigrate::DatabaseTasks.sort_migrations(data_migrations, schema_migrations).reverse
46
+ elsif target_version > current_data_version && target_version < current_schema_version
47
+ schema_migrations + data_migrations
48
+ elsif target_version < current_data_version && target_version > current_schema_version
49
+ schema_migrations + data_migrations
50
+ end
51
+ end
52
+
53
+ migrations.each do |migration|
54
+ DataMigrate::DatabaseTasks.run_migration(migration, migration[:direction])
55
+ end
56
+ end
57
+
10
58
  Rake::Task["db:_dump"].invoke
11
59
  Rake::Task["data:dump"].invoke
60
+ ensure
61
+ ActiveRecord::Base.establish_connection(original_db_config)
12
62
  end
13
63
 
14
64
  namespace :redo do
15
65
  desc 'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).'
16
66
  task :with_data => :environment do
17
- DataMigrate::DataMigrator.create_data_schema_table
67
+ DataMigrate::DataMigrator.assure_data_schema_table
18
68
  if ENV["VERSION"]
19
69
  Rake::Task["db:migrate:down:with_data"].invoke
20
70
  Rake::Task["db:migrate:up:with_data"].invoke
@@ -30,7 +80,7 @@ namespace :db do
30
80
  task :with_data => :environment do
31
81
  version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
32
82
  raise "VERSION is required" unless version
33
- DataMigrate::DataMigrator.create_data_schema_table
83
+ DataMigrate::DataMigrator.assure_data_schema_table
34
84
  run_both = ENV["BOTH"] == "true"
35
85
  migrations = DataMigrate::DatabaseTasks.pending_migrations.keep_if{|m| m[:version] == version}
36
86
 
@@ -52,7 +102,7 @@ namespace :db do
52
102
  task :with_data => :environment do
53
103
  version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
54
104
  raise "VERSION is required" unless version
55
- DataMigrate::DataMigrator.create_data_schema_table
105
+ DataMigrate::DataMigrator.assure_data_schema_table
56
106
  run_both = ENV["BOTH"] == "true"
57
107
  migrations = DataMigrate::DatabaseTasks.past_migrations.keep_if{|m| m[:version] == version}
58
108
 
@@ -72,7 +122,10 @@ namespace :db do
72
122
  namespace :status do
73
123
  desc "Display status of data and schema migrations"
74
124
  task :with_data => :environment do
75
- DataMigrate::Tasks::DataMigrateTasks.status_with_schema
125
+ ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
126
+ ActiveRecord::Base.establish_connection(db_config)
127
+ DataMigrate::Tasks::DataMigrateTasks.status_with_schema(db_config)
128
+ end
76
129
  end
77
130
  end
78
131
  end # END OF MIGRATE NAME SPACE
@@ -81,7 +134,7 @@ namespace :db do
81
134
  desc 'Rolls the schema back to the previous version (specify steps w/ STEP=n).'
82
135
  task :with_data => :environment do
83
136
  step = ENV['STEP'] ? ENV['STEP'].to_i : 1
84
- DataMigrate::DataMigrator.create_data_schema_table
137
+ DataMigrate::DataMigrator.assure_data_schema_table
85
138
  DataMigrate::DatabaseTasks.past_migrations[0..(step - 1)].each do | past_migration |
86
139
  DataMigrate::DatabaseTasks.run_migration(past_migration, :down)
87
140
  end
@@ -94,7 +147,7 @@ namespace :db do
94
147
  namespace :forward do
95
148
  desc 'Pushes the schema to the next version (specify steps w/ STEP=n).'
96
149
  task :with_data => :environment do
97
- DataMigrate::DataMigrator.create_data_schema_table
150
+ DataMigrate::DataMigrator.assure_data_schema_table
98
151
  step = ENV['STEP'] ? ENV['STEP'].to_i : 1
99
152
  DataMigrate::DatabaseTasks.forward(step)
100
153
  Rake::Task["db:_dump"].invoke
@@ -105,7 +158,7 @@ namespace :db do
105
158
  namespace :version do
106
159
  desc "Retrieves the current schema version numbers for data and schema migrations"
107
160
  task :with_data => :environment do
108
- DataMigrate::DataMigrator.create_data_schema_table
161
+ DataMigrate::DataMigrator.assure_data_schema_table
109
162
  puts "Current Schema version: #{ActiveRecord::Migrator.current_version}"
110
163
  puts "Current Data version: #{DataMigrate::DataMigrator.current_version}"
111
164
  end
@@ -146,26 +199,25 @@ namespace :db do
146
199
  end
147
200
  end
148
201
  end
149
-
150
- namespace :prepare do
151
- desc "Runs setup if database does not exist, or runs data and schema migrations if it does"
152
- task with_data: :environment do
153
- DataMigrate::DatabaseTasks.prepare_all_with_data
154
- end
155
- end
156
202
  end
157
203
 
158
204
  namespace :data do
159
205
  desc 'Migrate data migrations (options: VERSION=x, VERBOSE=false)'
160
206
  task :migrate => :environment do
161
- DataMigrate::Tasks::DataMigrateTasks.migrate
207
+ original_db_config = ActiveRecord::Base.connection_db_config
208
+ ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
209
+ ActiveRecord::Base.establish_connection(db_config)
210
+ DataMigrate::Tasks::DataMigrateTasks.migrate
211
+ end
162
212
  Rake::Task["data:dump"].invoke
213
+ ensure
214
+ ActiveRecord::Base.establish_connection(original_db_config)
163
215
  end
164
216
 
165
217
  namespace :migrate do
166
218
  desc 'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).'
167
219
  task :redo => :environment do
168
- DataMigrate::DataMigrator.create_data_schema_table
220
+ DataMigrate::DataMigrator.assure_data_schema_table
169
221
  if ENV["VERSION"]
170
222
  Rake::Task["data:migrate:down"].invoke
171
223
  Rake::Task["data:migrate:up"].invoke
@@ -177,7 +229,7 @@ namespace :data do
177
229
 
178
230
  desc 'Runs the "up" for a given migration VERSION.'
179
231
  task :up => :environment do
180
- DataMigrate::DataMigrator.create_data_schema_table
232
+ DataMigrate::DataMigrator.assure_data_schema_table
181
233
  version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
182
234
  raise "VERSION is required" unless version
183
235
  DataMigrate::DataMigrator.run(:up, DataMigrate::DatabaseTasks.data_migrations_path, version)
@@ -188,20 +240,23 @@ namespace :data do
188
240
  task :down => :environment do
189
241
  version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
190
242
  raise "VERSION is required" unless version
191
- DataMigrate::DataMigrator.create_data_schema_table
243
+ DataMigrate::DataMigrator.assure_data_schema_table
192
244
  DataMigrate::DataMigrator.run(:down, DataMigrate::DatabaseTasks.data_migrations_path, version)
193
245
  Rake::Task["data:dump"].invoke
194
246
  end
195
247
 
196
248
  desc "Display status of data migrations"
197
249
  task :status => :environment do
198
- DataMigrate::Tasks::DataMigrateTasks.status
250
+ ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
251
+ ActiveRecord::Base.establish_connection(db_config)
252
+ DataMigrate::Tasks::DataMigrateTasks.status(db_config)
253
+ end
199
254
  end
200
255
  end
201
256
 
202
257
  desc 'Rolls the schema back to the previous version (specify steps w/ STEP=n).'
203
258
  task :rollback => :environment do
204
- DataMigrate::DataMigrator.create_data_schema_table
259
+ DataMigrate::DataMigrator.assure_data_schema_table
205
260
  step = ENV['STEP'] ? ENV['STEP'].to_i : 1
206
261
  DataMigrate::DataMigrator.rollback(DataMigrate::DatabaseTasks.data_migrations_path, step)
207
262
  Rake::Task["data:dump"].invoke
@@ -209,7 +264,7 @@ namespace :data do
209
264
 
210
265
  desc 'Pushes the schema to the next version (specify steps w/ STEP=n).'
211
266
  task :forward => :environment do
212
- DataMigrate::DataMigrator.create_data_schema_table
267
+ DataMigrate::DataMigrator.assure_data_schema_table
213
268
  step = ENV['STEP'] ? ENV['STEP'].to_i : 1
214
269
  # TODO: No worky for .forward
215
270
  # DataMigrate::DataMigrator.forward('db/data/', step)
@@ -222,7 +277,7 @@ namespace :data do
222
277
 
223
278
  desc "Retrieves the current schema version number for data migrations"
224
279
  task :version => :environment do
225
- DataMigrate::DataMigrator.create_data_schema_table
280
+ DataMigrate::DataMigrator.assure_data_schema_table
226
281
  puts "Current data version: #{DataMigrate::DataMigrator.current_version}"
227
282
  end
228
283
 
@@ -234,7 +289,10 @@ namespace :data do
234
289
 
235
290
  desc "Create a db/data_schema.rb file that stores the current data version"
236
291
  task dump: :environment do
237
- DataMigrate::Tasks::DataMigrateTasks.dump
292
+ ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
293
+ ActiveRecord::Base.establish_connection(db_config)
294
+ DataMigrate::Tasks::DataMigrateTasks.dump(db_config)
295
+ end
238
296
 
239
297
  # Allow this task to be called as many times as required. An example
240
298
  # is the migrate:redo task, which calls other two internally