data_migrate 8.0.0.rc1 → 8.1.0
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/Changelog.md +9 -0
- data/README.md +1 -15
- data/lib/data_migrate/database_tasks.rb +34 -1
- data/lib/data_migrate/schema_dumper.rb +1 -1
- data/lib/data_migrate/status_service_five.rb +1 -1
- data/lib/data_migrate/tasks/data_migrate_tasks.rb +81 -0
- data/lib/data_migrate/version.rb +1 -1
- data/spec/data_migrate/tasks/data_migrate_tasks_spec.rb +46 -0
- data/tasks/databases.rake +37 -148
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c2279e8f7ac44136ae9fca448e3a239066cf901e1f8e46813888deed8d2288f5
|
4
|
+
data.tar.gz: c0314320a07bff4ce02e148b4e7026e22155a7eab18e3a69c441f1689880ff0f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '087890b935d8a520994eebebfbfdf6c86b6cd115fbb7629f65e1d56170bd1c013109cbbb5bf737a4a61572db3e1a85e966589f4541c422d772e87fdaf2be2f5f'
|
7
|
+
data.tar.gz: f6a2e6811e8cdb29ab0cfa963a6fc69d4b8694fe09aa6cd0eb9859784cbe9c2c1e5fbaad4b35dee4c3923a0d74ab66c410523818f53e585eeced1cfee0546716
|
data/Changelog.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 8.1.0
|
4
|
+
|
5
|
+
Avoid globally accessible functions for all rake tasks [berniechiu](https://github.com/berniechiu)
|
6
|
+
fixed `db:migrate:with_data` to compare data schema versions correctly [cadactive](https://github.com/cadactive)
|
7
|
+
|
8
|
+
## 8.0.0.rc2
|
9
|
+
|
10
|
+
Bug fixes [gdott9](https://github.com/gdott9)
|
11
|
+
|
3
12
|
## 8.0.0.rc1
|
4
13
|
Add support for Rails 7
|
5
14
|
Removed support for Rails versions below 5.2. Now are supported only versions Rails 5.2 and up
|
data/README.md
CHANGED
@@ -36,22 +36,8 @@ table to track all migrations.
|
|
36
36
|
|
37
37
|
## Rails Support
|
38
38
|
|
39
|
-
Support Rails 5.
|
39
|
+
Support Rails 5.2 through 7.0
|
40
40
|
|
41
|
-
### Important notes for older versions
|
42
|
-
|
43
|
-
#### v2
|
44
|
-
|
45
|
-
If you upgraded to Rails 4 while using `data_migrate` prior to version 2,
|
46
|
-
the gem wrote data migration versions into
|
47
|
-
`schema_migrations` table. After the fix, it was corrected to write into
|
48
|
-
`data_migrations`.
|
49
|
-
|
50
|
-
If you need to use these old migrations, add the following configuration
|
51
|
-
|
52
|
-
It is recommended to move all legacy migrations from `schema_migrations` table into `data_migrations` table
|
53
|
-
|
54
|
-
This may cause some unintended consequences. See [#22](https://github.com/ilyakatz/data-migrate/issues/22)
|
55
41
|
|
56
42
|
#### v1
|
57
43
|
|
@@ -47,6 +47,40 @@ module DataMigrate
|
|
47
47
|
Kernel.abort message
|
48
48
|
end
|
49
49
|
end
|
50
|
+
|
51
|
+
def pending_migrations
|
52
|
+
sort_migrations(
|
53
|
+
pending_schema_migrations,
|
54
|
+
pending_data_migrations
|
55
|
+
)
|
56
|
+
end
|
57
|
+
|
58
|
+
def sort_migrations set_1, set_2=nil
|
59
|
+
migrations = set_1 + (set_2 || [])
|
60
|
+
migrations.sort{|a,b| sort_string(a) <=> sort_string(b)}
|
61
|
+
end
|
62
|
+
|
63
|
+
def sort_string migration
|
64
|
+
"#{migration[:version]}_#{migration[:kind] == :data ? 1 : 0}"
|
65
|
+
end
|
66
|
+
|
67
|
+
def data_migrations_path
|
68
|
+
::DataMigrate.config.data_migrations_path
|
69
|
+
end
|
70
|
+
|
71
|
+
def run_migration(migration, direction)
|
72
|
+
if migration[:kind] == :data
|
73
|
+
::ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71])
|
74
|
+
::DataMigrate::DataMigrator.run(direction, data_migrations_path, migration[:version])
|
75
|
+
else
|
76
|
+
::ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69])
|
77
|
+
::DataMigrate::SchemaMigration.run(
|
78
|
+
direction,
|
79
|
+
::Continuation::SchemaMigration.migrations_paths,
|
80
|
+
migration[:version]
|
81
|
+
)
|
82
|
+
end
|
83
|
+
end
|
50
84
|
end
|
51
85
|
|
52
86
|
# This overrides ActiveRecord::Tasks::DatabaseTasks
|
@@ -121,6 +155,5 @@ module DataMigrate
|
|
121
155
|
|
122
156
|
sort == "asc" ? sort_migrations(migrations) : sort_migrations(migrations).reverse
|
123
157
|
end
|
124
|
-
|
125
158
|
end
|
126
159
|
end
|
@@ -2,6 +2,11 @@ module DataMigrate
|
|
2
2
|
module Tasks
|
3
3
|
module DataMigrateTasks
|
4
4
|
extend self
|
5
|
+
|
6
|
+
def schema_migrations_path
|
7
|
+
File.join('db', 'migrate')
|
8
|
+
end
|
9
|
+
|
5
10
|
def migrations_paths
|
6
11
|
@migrations_paths ||= DataMigrate.config.data_migrations_path
|
7
12
|
end
|
@@ -40,6 +45,82 @@ module DataMigrate
|
|
40
45
|
ActiveRecord::Base.dump_schema_after_migration
|
41
46
|
end
|
42
47
|
end
|
48
|
+
|
49
|
+
def status
|
50
|
+
config = connect_to_database
|
51
|
+
return unless config
|
52
|
+
|
53
|
+
connection = ActiveRecord::Base.connection
|
54
|
+
puts "\ndatabase: #{config['database']}\n\n"
|
55
|
+
DataMigrate::StatusService.dump(connection)
|
56
|
+
end
|
57
|
+
|
58
|
+
def status_with_schema
|
59
|
+
config = connect_to_database
|
60
|
+
return unless config
|
61
|
+
|
62
|
+
db_list_data = ActiveRecord::Base.connection.select_values(
|
63
|
+
"SELECT version FROM #{DataMigrate::DataSchemaMigration.table_name}"
|
64
|
+
)
|
65
|
+
db_list_schema = ActiveRecord::Base.connection.select_values(
|
66
|
+
"SELECT version FROM #{ActiveRecord::SchemaMigration.schema_migrations_table_name}"
|
67
|
+
)
|
68
|
+
file_list = []
|
69
|
+
|
70
|
+
Dir.foreach(File.join(Rails.root, migrations_paths)) do |file|
|
71
|
+
# only files matching "20091231235959_some_name.rb" pattern
|
72
|
+
if match_data = /(\d{14})_(.+)\.rb/.match(file)
|
73
|
+
status = db_list_data.delete(match_data[1]) ? 'up' : 'down'
|
74
|
+
file_list << [status, match_data[1], match_data[2], 'data']
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
Dir.foreach(File.join(Rails.root, schema_migrations_path)) do |file|
|
79
|
+
# only files matching "20091231235959_some_name.rb" pattern
|
80
|
+
if match_data = /(\d{14})_(.+)\.rb/.match(file)
|
81
|
+
status = db_list_schema.delete(match_data[1]) ? 'up' : 'down'
|
82
|
+
file_list << [status, match_data[1], match_data[2], 'schema']
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
file_list.sort!{|a,b| "#{a[1]}_#{a[3] == 'data' ? 1 : 0}" <=> "#{b[1]}_#{b[3] == 'data' ? 1 : 0}" }
|
87
|
+
|
88
|
+
# output
|
89
|
+
puts "\ndatabase: #{config['database']}\n\n"
|
90
|
+
puts "#{"Status".center(8)} #{"Type".center(8)} #{"Migration ID".ljust(14)} Migration Name"
|
91
|
+
puts "-" * 60
|
92
|
+
file_list.each do |file|
|
93
|
+
puts "#{file[0].center(8)} #{file[3].center(8)} #{file[1].ljust(14)} #{file[2].humanize}"
|
94
|
+
end
|
95
|
+
db_list_schema.each do |version|
|
96
|
+
puts "#{'up'.center(8)} #{version.ljust(14)} *** NO SCHEMA FILE ***"
|
97
|
+
end
|
98
|
+
db_list_data.each do |version|
|
99
|
+
puts "#{'up'.center(8)} #{version.ljust(14)} *** NO DATA FILE ***"
|
100
|
+
end
|
101
|
+
puts
|
102
|
+
end
|
103
|
+
|
104
|
+
private
|
105
|
+
|
106
|
+
def connect_to_database
|
107
|
+
config = if ActiveRecord.version < Gem::Version.new('6.1')
|
108
|
+
ActiveRecord::Base.configurations[Rails.env || 'development']
|
109
|
+
else
|
110
|
+
ActiveRecord::Base.configurations.find_db_config(Rails.env || 'development').configuration_hash
|
111
|
+
end
|
112
|
+
ActiveRecord::Base.establish_connection(config)
|
113
|
+
|
114
|
+
unless DataMigrate::DataSchemaMigration.table_exists?
|
115
|
+
puts 'Data migrations table does not exist yet.'
|
116
|
+
config = nil
|
117
|
+
end
|
118
|
+
unless ActiveRecord::SchemaMigration.table_exists?
|
119
|
+
puts 'Schema migrations table does not exist yet.'
|
120
|
+
config = nil
|
121
|
+
end
|
122
|
+
config
|
123
|
+
end
|
43
124
|
end
|
44
125
|
end
|
45
126
|
end
|
data/lib/data_migrate/version.rb
CHANGED
@@ -115,4 +115,50 @@ describe DataMigrate::Tasks::DataMigrateTasks do
|
|
115
115
|
end
|
116
116
|
end
|
117
117
|
end
|
118
|
+
|
119
|
+
describe :status do
|
120
|
+
let(:db_config) do
|
121
|
+
{
|
122
|
+
adapter: "sqlite3",
|
123
|
+
database: "spec/db/test.db"
|
124
|
+
}
|
125
|
+
end
|
126
|
+
|
127
|
+
before do
|
128
|
+
if Rails::VERSION::MAJOR == 5
|
129
|
+
ActiveRecord::Base.configurations['test'] = db_config
|
130
|
+
else
|
131
|
+
hash_config = ActiveRecord::DatabaseConfigurations::HashConfig.new('test', 'test', db_config)
|
132
|
+
config_obj = ActiveRecord::DatabaseConfigurations.new([hash_config])
|
133
|
+
allow(ActiveRecord::Base).to receive(:configurations).and_return(config_obj)
|
134
|
+
end
|
135
|
+
|
136
|
+
allow(Rails).to receive(:root) { '.' }
|
137
|
+
|
138
|
+
if Rails::VERSION::MAJOR == 5
|
139
|
+
allow(DataMigrate::Tasks::DataMigrateTasks).to receive(:schema_migrations_path) { 'spec/db/migrate/5.2' }
|
140
|
+
else
|
141
|
+
allow(DataMigrate::Tasks::DataMigrateTasks).to receive(:schema_migrations_path) { 'spec/db/migrate/6.0' }
|
142
|
+
end
|
143
|
+
|
144
|
+
DataMigrate::Tasks::DataMigrateTasks.migrate
|
145
|
+
end
|
146
|
+
|
147
|
+
after do
|
148
|
+
ActiveRecord::Migration.drop_table("data_migrations")
|
149
|
+
end
|
150
|
+
|
151
|
+
it "should display data migration status" do
|
152
|
+
expect {
|
153
|
+
DataMigrate::Tasks::DataMigrateTasks.status
|
154
|
+
}.to output(/up 20091231235959 Some name/).to_stdout
|
155
|
+
end
|
156
|
+
|
157
|
+
it "should display schema and data migration status" do
|
158
|
+
expect {
|
159
|
+
DataMigrate::Tasks::DataMigrateTasks.status_with_schema
|
160
|
+
}.to output(match(/up data 20091231235959 Some name/)
|
161
|
+
.and match(/down schema 20131111111111 Late migration/)).to_stdout
|
162
|
+
end
|
163
|
+
end
|
118
164
|
end
|
data/tasks/databases.rake
CHANGED
@@ -4,29 +4,29 @@ namespace :db do
|
|
4
4
|
namespace :migrate do
|
5
5
|
desc "Migrate the database data and schema (options: VERSION=x, VERBOSE=false)."
|
6
6
|
task :with_data => :environment do
|
7
|
-
assure_data_schema_table
|
7
|
+
DataMigrate::DataMigrator.assure_data_schema_table
|
8
8
|
|
9
9
|
ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
|
10
10
|
target_version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
11
11
|
migrations = []
|
12
12
|
|
13
13
|
if target_version.nil?
|
14
|
-
migrations = pending_migrations.map{ |m| m.merge(:direction =>:up) }
|
14
|
+
migrations = DataMigrate::DatabaseTasks.pending_migrations.map{ |m| m.merge(:direction =>:up) }
|
15
15
|
else
|
16
16
|
current_schema_version = ActiveRecord::Migrator.current_version
|
17
17
|
schema_migrations = if target_version > current_schema_version
|
18
|
-
pending_schema_migrations.keep_if{ |m| m[:version] <= target_version }.map{ |m| m.merge(:direction =>:up) }
|
18
|
+
DataMigrate::DatabaseTasks.pending_schema_migrations.keep_if{ |m| m[:version] <= target_version }.map{ |m| m.merge(:direction =>:up) }
|
19
19
|
elsif target_version < current_schema_version
|
20
|
-
past_migrations.keep_if{ |m| m[:version] > target_version }.map{ |m| m.merge(:direction =>:down) }
|
20
|
+
DataMigrate::DatabaseTasks.past_migrations.keep_if{ |m| m[:version] > target_version }.map{ |m| m.merge(:direction =>:down) }
|
21
21
|
else # ==
|
22
22
|
[]
|
23
23
|
end
|
24
24
|
|
25
|
-
current_data_version =
|
25
|
+
current_data_version = DataMigrate::DataMigrator.current_version
|
26
26
|
data_migrations = if target_version > current_data_version
|
27
|
-
pending_data_migrations.keep_if{ |m| m[:version] <= target_version }.map{ |m| m.merge(:direction =>:up) }
|
27
|
+
DataMigrate::DatabaseTasks.pending_data_migrations.keep_if{ |m| m[:version] <= target_version }.map{ |m| m.merge(:direction =>:up) }
|
28
28
|
elsif target_version < current_data_version
|
29
|
-
past_migrations.keep_if{ |m| m[:version] > target_version }.map{ |m| m.merge(:direction =>:down) }
|
29
|
+
DataMigrate::DatabaseTasks.past_migrations.keep_if{ |m| m[:version] > target_version }.map{ |m| m.merge(:direction =>:down) }
|
30
30
|
else # ==
|
31
31
|
[]
|
32
32
|
end
|
@@ -35,9 +35,9 @@ namespace :db do
|
|
35
35
|
elsif data_migrations.empty?
|
36
36
|
schema_migrations
|
37
37
|
elsif target_version > current_data_version && target_version > current_schema_version
|
38
|
-
sort_migrations data_migrations, schema_migrations
|
38
|
+
DataMigrate::DatabaseTasks.sort_migrations data_migrations, schema_migrations
|
39
39
|
elsif target_version < current_data_version && target_version < current_schema_version
|
40
|
-
sort_migrations(data_migrations, schema_migrations).reverse
|
40
|
+
DataMigrate::DatabaseTasks.sort_migrations(data_migrations, schema_migrations).reverse
|
41
41
|
elsif target_version > current_data_version && target_version < current_schema_version
|
42
42
|
schema_migrations + data_migrations
|
43
43
|
elsif target_version < current_data_version && target_version > current_schema_version
|
@@ -46,7 +46,7 @@ namespace :db do
|
|
46
46
|
end
|
47
47
|
|
48
48
|
migrations.each do |migration|
|
49
|
-
run_migration(migration, migration[:direction])
|
49
|
+
DataMigrate::DatabaseTasks.run_migration(migration, migration[:direction])
|
50
50
|
end
|
51
51
|
|
52
52
|
Rake::Task["db:_dump"].invoke
|
@@ -56,7 +56,7 @@ namespace :db do
|
|
56
56
|
namespace :redo do
|
57
57
|
desc 'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).'
|
58
58
|
task :with_data => :environment do
|
59
|
-
assure_data_schema_table
|
59
|
+
DataMigrate::DataMigrator.assure_data_schema_table
|
60
60
|
if ENV["VERSION"]
|
61
61
|
Rake::Task["db:migrate:down:with_data"].invoke
|
62
62
|
Rake::Task["db:migrate:up:with_data"].invoke
|
@@ -72,16 +72,16 @@ namespace :db do
|
|
72
72
|
task :with_data => :environment do
|
73
73
|
version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
74
74
|
raise "VERSION is required" unless version
|
75
|
-
assure_data_schema_table
|
75
|
+
DataMigrate::DataMigrator.assure_data_schema_table
|
76
76
|
run_both = ENV["BOTH"] == "true"
|
77
|
-
migrations = pending_migrations.keep_if{|m| m[:version] == version}
|
77
|
+
migrations = DataMigrate::DatabaseTasks.pending_migrations.keep_if{|m| m[:version] == version}
|
78
78
|
|
79
79
|
unless run_both || migrations.size < 2
|
80
80
|
migrations = migrations.slice(0,1)
|
81
81
|
end
|
82
82
|
|
83
83
|
migrations.each do |migration|
|
84
|
-
run_migration(migration, :up)
|
84
|
+
DataMigrate::DatabaseTasks.run_migration(migration, :up)
|
85
85
|
end
|
86
86
|
|
87
87
|
Rake::Task["db:_dump"].invoke
|
@@ -94,16 +94,16 @@ namespace :db do
|
|
94
94
|
task :with_data => :environment do
|
95
95
|
version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
96
96
|
raise "VERSION is required" unless version
|
97
|
-
assure_data_schema_table
|
97
|
+
DataMigrate::DataMigrator.assure_data_schema_table
|
98
98
|
run_both = ENV["BOTH"] == "true"
|
99
|
-
migrations = past_migrations.keep_if{|m| m[:version] == version}
|
99
|
+
migrations = DataMigrate::DatabaseTasks.past_migrations.keep_if{|m| m[:version] == version}
|
100
100
|
|
101
101
|
unless run_both || migrations.size < 2
|
102
102
|
migrations = migrations.slice(0,1)
|
103
103
|
end
|
104
104
|
|
105
105
|
migrations.each do |migration|
|
106
|
-
run_migration(migration, :down)
|
106
|
+
DataMigrate::DatabaseTasks.run_migration(migration, :down)
|
107
107
|
end
|
108
108
|
|
109
109
|
Rake::Task["db:_dump"].invoke
|
@@ -114,49 +114,7 @@ namespace :db do
|
|
114
114
|
namespace :status do
|
115
115
|
desc "Display status of data and schema migrations"
|
116
116
|
task :with_data => :environment do
|
117
|
-
|
118
|
-
next unless config
|
119
|
-
|
120
|
-
db_list_data = ActiveRecord::Base.connection.select_values(
|
121
|
-
"SELECT version FROM #{DataMigrate::DataSchemaMigration.table_name}"
|
122
|
-
)
|
123
|
-
db_list_schema = ActiveRecord::Base.connection.select_values(
|
124
|
-
"SELECT version FROM #{ActiveRecord::SchemaMigration.schema_migrations_table_name}"
|
125
|
-
)
|
126
|
-
file_list = []
|
127
|
-
|
128
|
-
Dir.foreach(File.join(Rails.root, data_migrations_path)) do |file|
|
129
|
-
# only files matching "20091231235959_some_name.rb" pattern
|
130
|
-
if match_data = /(\d{14})_(.+)\.rb/.match(file)
|
131
|
-
status = db_list_data.delete(match_data[1]) ? 'up' : 'down'
|
132
|
-
file_list << [status, match_data[1], match_data[2], 'data']
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
Dir.foreach(File.join(Rails.root, 'db', 'migrate')) do |file|
|
137
|
-
# only files matching "20091231235959_some_name.rb" pattern
|
138
|
-
if match_data = /(\d{14})_(.+)\.rb/.match(file)
|
139
|
-
status = db_list_schema.delete(match_data[1]) ? 'up' : 'down'
|
140
|
-
file_list << [status, match_data[1], match_data[2], 'schema']
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
file_list.sort!{|a,b| "#{a[1]}_#{a[3] == 'data' ? 1 : 0}" <=> "#{b[1]}_#{b[3] == 'data' ? 1 : 0}" }
|
145
|
-
|
146
|
-
# output
|
147
|
-
puts "\ndatabase: #{config['database']}\n\n"
|
148
|
-
puts "#{"Status".center(8)} #{"Type".center(8)} #{"Migration ID".ljust(14)} Migration Name"
|
149
|
-
puts "-" * 60
|
150
|
-
file_list.each do |file|
|
151
|
-
puts "#{file[0].center(8)} #{file[3].center(8)} #{file[1].ljust(14)} #{file[2].humanize}"
|
152
|
-
end
|
153
|
-
db_list_schema.each do |version|
|
154
|
-
puts "#{'up'.center(8)} #{version.ljust(14)} *** NO SCHEMA FILE ***"
|
155
|
-
end
|
156
|
-
db_list_data.each do |version|
|
157
|
-
puts "#{'up'.center(8)} #{version.ljust(14)} *** NO DATA FILE ***"
|
158
|
-
end
|
159
|
-
puts
|
117
|
+
DataMigrate::Tasks::DataMigrateTasks.status_with_schema
|
160
118
|
end
|
161
119
|
end
|
162
120
|
end # END OF MIGRATE NAME SPACE
|
@@ -165,9 +123,9 @@ namespace :db do
|
|
165
123
|
desc 'Rolls the schema back to the previous version (specify steps w/ STEP=n).'
|
166
124
|
task :with_data => :environment do
|
167
125
|
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
|
168
|
-
assure_data_schema_table
|
169
|
-
past_migrations[0..(step - 1)].each do | past_migration |
|
170
|
-
run_migration(past_migration, :down)
|
126
|
+
DataMigrate::DataMigrator.assure_data_schema_table
|
127
|
+
DataMigrate::DatabaseTasks.past_migrations[0..(step - 1)].each do | past_migration |
|
128
|
+
DataMigrate::DatabaseTasks.run_migration(past_migration, :down)
|
171
129
|
end
|
172
130
|
|
173
131
|
Rake::Task["db:_dump"].invoke
|
@@ -178,7 +136,7 @@ namespace :db do
|
|
178
136
|
namespace :forward do
|
179
137
|
desc 'Pushes the schema to the next version (specify steps w/ STEP=n).'
|
180
138
|
task :with_data => :environment do
|
181
|
-
assure_data_schema_table
|
139
|
+
DataMigrate::DataMigrator.assure_data_schema_table
|
182
140
|
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
|
183
141
|
DataMigrate::DatabaseTasks.forward(step)
|
184
142
|
Rake::Task["db:_dump"].invoke
|
@@ -189,7 +147,7 @@ namespace :db do
|
|
189
147
|
namespace :version do
|
190
148
|
desc "Retrieves the current schema version numbers for data and schema migrations"
|
191
149
|
task :with_data => :environment do
|
192
|
-
assure_data_schema_table
|
150
|
+
DataMigrate::DataMigrator.assure_data_schema_table
|
193
151
|
puts "Current Schema version: #{ActiveRecord::Migrator.current_version}"
|
194
152
|
puts "Current Data version: #{DataMigrate::DataMigrator.current_version}"
|
195
153
|
end
|
@@ -199,7 +157,7 @@ namespace :db do
|
|
199
157
|
desc "Raises an error if there are pending migrations or data migrations"
|
200
158
|
task with_data: :environment do
|
201
159
|
message = %{Run `rake db:migrate:with_data` to update your database then try again.}
|
202
|
-
DataMigrate::Tasks::DataMigrateTasks.abort_if_pending_migrations(pending_migrations, message)
|
160
|
+
DataMigrate::Tasks::DataMigrateTasks.abort_if_pending_migrations(DataMigrate::DatabaseTasks.pending_migrations, message)
|
203
161
|
end
|
204
162
|
end
|
205
163
|
|
@@ -242,7 +200,7 @@ namespace :data do
|
|
242
200
|
namespace :migrate do
|
243
201
|
desc 'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).'
|
244
202
|
task :redo => :environment do
|
245
|
-
assure_data_schema_table
|
203
|
+
DataMigrate::DataMigrator.assure_data_schema_table
|
246
204
|
if ENV["VERSION"]
|
247
205
|
Rake::Task["data:migrate:down"].invoke
|
248
206
|
Rake::Task["data:migrate:up"].invoke
|
@@ -254,10 +212,10 @@ namespace :data do
|
|
254
212
|
|
255
213
|
desc 'Runs the "up" for a given migration VERSION.'
|
256
214
|
task :up => :environment do
|
257
|
-
assure_data_schema_table
|
215
|
+
DataMigrate::DataMigrator.assure_data_schema_table
|
258
216
|
version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
259
217
|
raise "VERSION is required" unless version
|
260
|
-
DataMigrate::DataMigrator.run(:up, data_migrations_path, version)
|
218
|
+
DataMigrate::DataMigrator.run(:up, DataMigrate::DatabaseTasks.data_migrations_path, version)
|
261
219
|
Rake::Task["data:dump"].invoke
|
262
220
|
end
|
263
221
|
|
@@ -265,52 +223,48 @@ namespace :data do
|
|
265
223
|
task :down => :environment do
|
266
224
|
version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
267
225
|
raise "VERSION is required" unless version
|
268
|
-
assure_data_schema_table
|
269
|
-
DataMigrate::DataMigrator.run(:down, data_migrations_path, version)
|
226
|
+
DataMigrate::DataMigrator.assure_data_schema_table
|
227
|
+
DataMigrate::DataMigrator.run(:down, DataMigrate::DatabaseTasks.data_migrations_path, version)
|
270
228
|
Rake::Task["data:dump"].invoke
|
271
229
|
end
|
272
230
|
|
273
231
|
desc "Display status of data migrations"
|
274
232
|
task :status => :environment do
|
275
|
-
|
276
|
-
ActiveRecord::Base.establish_connection(config)
|
277
|
-
connection = ActiveRecord::Base.connection
|
278
|
-
puts "\ndatabase: #{config['database']}\n\n"
|
279
|
-
DataMigrate::StatusService.dump(connection)
|
233
|
+
DataMigrate::Tasks::DataMigrateTasks.status
|
280
234
|
end
|
281
235
|
end
|
282
236
|
|
283
237
|
desc 'Rolls the schema back to the previous version (specify steps w/ STEP=n).'
|
284
238
|
task :rollback => :environment do
|
285
|
-
assure_data_schema_table
|
239
|
+
DataMigrate::DataMigrator.assure_data_schema_table
|
286
240
|
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
|
287
|
-
DataMigrate::DataMigrator.rollback(data_migrations_path, step)
|
241
|
+
DataMigrate::DataMigrator.rollback(DataMigrate::DatabaseTasks.data_migrations_path, step)
|
288
242
|
Rake::Task["data:dump"].invoke
|
289
243
|
end
|
290
244
|
|
291
245
|
desc 'Pushes the schema to the next version (specify steps w/ STEP=n).'
|
292
246
|
task :forward => :environment do
|
293
|
-
assure_data_schema_table
|
247
|
+
DataMigrate::DataMigrator.assure_data_schema_table
|
294
248
|
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
|
295
249
|
# TODO: No worky for .forward
|
296
250
|
# DataMigrate::DataMigrator.forward('db/data/', step)
|
297
|
-
migrations = pending_data_migrations.reverse.pop(step).reverse
|
251
|
+
migrations = DataMigrate::DatabaseTasks.pending_data_migrations.reverse.pop(step).reverse
|
298
252
|
migrations.each do | pending_migration |
|
299
|
-
DataMigrate::DataMigrator.run(:up, data_migrations_path, pending_migration[:version])
|
253
|
+
DataMigrate::DataMigrator.run(:up, DataMigrate::DatabaseTasks.data_migrations_path, pending_migration[:version])
|
300
254
|
end
|
301
255
|
Rake::Task["data:dump"].invoke
|
302
256
|
end
|
303
257
|
|
304
258
|
desc "Retrieves the current schema version number for data migrations"
|
305
259
|
task :version => :environment do
|
306
|
-
assure_data_schema_table
|
260
|
+
DataMigrate::DataMigrator.assure_data_schema_table
|
307
261
|
puts "Current data version: #{DataMigrate::DataMigrator.current_version}"
|
308
262
|
end
|
309
263
|
|
310
264
|
desc "Raises an error if there are pending data migrations"
|
311
265
|
task abort_if_pending_migrations: :environment do
|
312
266
|
message = %{Run `rake data:migrate` to update your database then try again.}
|
313
|
-
DataMigrate::Tasks::DataMigrateTasks.abort_if_pending_migrations(pending_data_migrations, message)
|
267
|
+
DataMigrate::Tasks::DataMigrateTasks.abort_if_pending_migrations(DataMigrate::DatabaseTasks.pending_data_migrations, message)
|
314
268
|
end
|
315
269
|
|
316
270
|
desc "Create a db/data_schema.rb file that stores the current data version"
|
@@ -333,68 +287,3 @@ namespace :data do
|
|
333
287
|
end
|
334
288
|
end
|
335
289
|
end
|
336
|
-
|
337
|
-
def pending_migrations
|
338
|
-
DataMigrate::DatabaseTasks.sort_migrations(
|
339
|
-
DataMigrate::DatabaseTasks.pending_schema_migrations,
|
340
|
-
DataMigrate::DatabaseTasks.pending_data_migrations
|
341
|
-
)
|
342
|
-
end
|
343
|
-
|
344
|
-
def pending_data_migrations
|
345
|
-
DataMigrate::DatabaseTasks.pending_data_migrations
|
346
|
-
end
|
347
|
-
|
348
|
-
def pending_schema_migrations
|
349
|
-
DataMigrate::DatabaseTasks.pending_schema_migrations
|
350
|
-
end
|
351
|
-
|
352
|
-
def sort_migrations set_1, set_2=nil
|
353
|
-
migrations = set_1 + (set_2 || [])
|
354
|
-
migrations.sort{|a,b| sort_string(a) <=> sort_string(b)}
|
355
|
-
end
|
356
|
-
|
357
|
-
def sort_string migration
|
358
|
-
"#{migration[:version]}_#{migration[:kind] == :data ? 1 : 0}"
|
359
|
-
end
|
360
|
-
|
361
|
-
def connect_to_database
|
362
|
-
config = ActiveRecord::Base.configurations[Rails.env || 'development']
|
363
|
-
ActiveRecord::Base.establish_connection(config)
|
364
|
-
|
365
|
-
unless DataMigrate::DataSchemaMigration.table_exists?
|
366
|
-
puts 'Data migrations table does not exist yet.'
|
367
|
-
config = nil
|
368
|
-
end
|
369
|
-
unless ActiveRecord::SchemaMigration.table_exists?
|
370
|
-
puts 'Schema migrations table does not exist yet.'
|
371
|
-
config = nil
|
372
|
-
end
|
373
|
-
config
|
374
|
-
end
|
375
|
-
|
376
|
-
def past_migrations(sort=nil)
|
377
|
-
DataMigrate::DatabaseTasks.past_migrations(sort)
|
378
|
-
end
|
379
|
-
|
380
|
-
def assure_data_schema_table
|
381
|
-
DataMigrate::DataMigrator.assure_data_schema_table
|
382
|
-
end
|
383
|
-
|
384
|
-
def data_migrations_path
|
385
|
-
DataMigrate.config.data_migrations_path
|
386
|
-
end
|
387
|
-
|
388
|
-
def run_migration(migration, direction)
|
389
|
-
if migration[:kind] == :data
|
390
|
-
ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71])
|
391
|
-
DataMigrate::DataMigrator.run(direction, data_migrations_path, migration[:version])
|
392
|
-
else
|
393
|
-
ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69])
|
394
|
-
DataMigrate::SchemaMigration.run(
|
395
|
-
direction,
|
396
|
-
DataMigrate::SchemaMigration.migrations_paths,
|
397
|
-
migration[:version]
|
398
|
-
)
|
399
|
-
end
|
400
|
-
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: data_migrate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 8.
|
4
|
+
version: 8.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew J Vargo
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2022-
|
13
|
+
date: 2022-08-02 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|
@@ -287,11 +287,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
287
287
|
version: '0'
|
288
288
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
289
289
|
requirements:
|
290
|
-
- - "
|
290
|
+
- - ">="
|
291
291
|
- !ruby/object:Gem::Version
|
292
|
-
version:
|
292
|
+
version: '0'
|
293
293
|
requirements: []
|
294
|
-
rubygems_version: 3.
|
294
|
+
rubygems_version: 3.3.7
|
295
295
|
signing_key:
|
296
296
|
specification_version: 4
|
297
297
|
summary: Rake tasks to migrate data alongside schema changes.
|