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.
- checksums.yaml +4 -4
- data/.github/workflows/build.yml +3 -3
- data/.github/workflows/gempush.yml +8 -6
- data/.gitignore +2 -3
- data/.ruby-version +1 -0
- data/.travis.yml +14 -0
- data/Appraisals +5 -5
- data/Changelog.md +2 -46
- data/Gemfile +1 -0
- data/Gemfile.rails6.1 +11 -0
- data/README.md +5 -7
- data/data_migrate.gemspec +2 -2
- data/gemfiles/{rails_7.1.gemfile → rails_6.0.gemfile} +2 -1
- data/gemfiles/rails_6.1.gemfile +1 -0
- data/gemfiles/rails_7.0.gemfile +2 -1
- data/lib/data_migrate/data_migrator.rb +23 -15
- data/lib/data_migrate/data_schema.rb +2 -2
- data/lib/data_migrate/data_schema_migration.rb +7 -24
- data/lib/data_migrate/database_tasks.rb +48 -194
- data/lib/data_migrate/legacy_migrator.rb +22 -0
- data/lib/data_migrate/migration_context.rb +8 -11
- data/lib/data_migrate/schema_dumper.rb +1 -1
- data/lib/data_migrate/schema_migration.rb +4 -5
- data/lib/data_migrate/status_service.rb +4 -4
- data/lib/data_migrate/tasks/data_migrate_tasks.rb +15 -14
- data/lib/data_migrate/version.rb +1 -1
- data/lib/data_migrate.rb +1 -2
- data/spec/data_migrate/data_migrator_spec.rb +14 -17
- data/spec/data_migrate/data_schema_migration_spec.rb +8 -25
- data/spec/data_migrate/data_spec.rb +1 -1
- data/spec/data_migrate/database_tasks_spec.rb +19 -34
- data/spec/data_migrate/legacy_migrator_spec.rb +38 -0
- data/spec/data_migrate/migration_context_spec.rb +8 -15
- data/spec/data_migrate/schema_dumper_spec.rb +3 -6
- data/spec/data_migrate/schema_migration_spec.rb +6 -13
- data/spec/data_migrate/status_service_spec.rb +4 -7
- data/spec/data_migrate/tasks/data_migrate_tasks_spec.rb +14 -13
- data/spec/db/data/20091231235959_some_name.rb +1 -1
- data/spec/db/data/20171231235959_super_update.rb +1 -1
- data/spec/db/migrate/20131111111111_late_migration.rb +1 -1
- data/spec/db/migrate/20202020202011_db_migration.rb +1 -1
- data/tasks/databases.rake +83 -25
- metadata +19 -21
- data/Gemfile.lock +0 -184
- data/gemfiles/rails_6.1.gemfile.lock +0 -229
- data/gemfiles/rails_7.0.gemfile.lock +0 -230
- data/gemfiles/rails_7.1.gemfile.lock +0 -263
- data/lib/data_migrate/database_configurations_wrapper.rb +0 -11
- data/lib/data_migrate/rails_helper.rb +0 -79
- 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(
|
25
|
-
|
26
|
-
|
27
|
-
|
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
|
-
|
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::
|
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::
|
81
|
+
versions = DataMigrate::DataSchemaMigration.normalized_versions
|
71
82
|
expect(versions.count).to eq(1)
|
72
83
|
expect(versions.first).to eq "20091231235959"
|
73
|
-
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::
|
17
|
-
DataMigrate::
|
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::
|
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::
|
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::
|
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::
|
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::
|
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::
|
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
|
-
|
13
|
-
DataMigrate::
|
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::
|
20
|
-
DataMigrate::
|
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 =
|
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 =
|
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("
|
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
|
-
|
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("
|
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
|
-
|
37
|
-
DataMigrate::
|
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(:
|
7
|
-
|
8
|
-
|
9
|
-
|
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::
|
15
|
-
DataMigrate::
|
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
|
-
|
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
|
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 => :
|
9
|
-
|
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
|
-
|
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.
|
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.
|
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
|
-
|
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.
|
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.
|
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.
|
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
|
-
|
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.
|
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.
|
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.
|
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
|
-
|
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.
|
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.
|
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.
|
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
|
-
|
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
|