data_migrate 5.0.2 → 5.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +0 -1
- data/.travis.yml +4 -8
- data/Changelog.md +3 -0
- data/README.md +2 -1
- data/lib/data_migrate/data_migrator_five.rb +13 -0
- data/lib/data_migrate/database_tasks.rb +3 -2
- data/lib/data_migrate/version.rb +1 -1
- data/spec/data_migrate/data_spec.rb +0 -2
- data/spec/data_migrate/database_tasks_spec.rb +2 -2
- data/spec/spec_helper.rb +6 -0
- data/tasks/databases.rake +391 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 374e93835d9a65e56af9ce534dd650c286a3dbcf
|
4
|
+
data.tar.gz: 48a7b7a1b7870b28f4cc34bff8468cc797649c8d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b53c608118790f93587e29221f7d5aad40fcbe782f081f314d3955228f6ad45f2fbe90b565221aeb90fb38fe6642883f850b31ae7ec8d925b7b34c7a07cc2b7
|
7
|
+
data.tar.gz: 1500d7f084fcdc4b8f0a442925a695c90b495a148da5ba6021add79d432c8826c6bc2b965bc178595796d92fe8d990f931860f02e0fadcc68674546e366bf2bf
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,16 +1,12 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 2.2.
|
4
|
-
- 2.3.
|
3
|
+
- 2.2.9
|
4
|
+
- 2.3.7
|
5
|
+
- 2.4.4
|
6
|
+
- 2.5.1
|
5
7
|
script: bundle exec rspec
|
6
8
|
gemfile:
|
7
9
|
- gemfiles/rails_4.2.gemfile
|
8
10
|
- gemfiles/rails_5.0.gemfile
|
9
11
|
- gemfiles/rails_5.1.gemfile
|
10
12
|
- gemfiles/rails_5.2.gemfile
|
11
|
-
matrix:
|
12
|
-
exclude:
|
13
|
-
- rvm: 2.0.0-p648
|
14
|
-
gemfile: gemfiles/rails_5.0.gemfile
|
15
|
-
- rvm: 2.1.10
|
16
|
-
gemfile: gemfiles/rails_5.0.gemfile
|
data/Changelog.md
CHANGED
data/README.md
CHANGED
@@ -131,7 +131,8 @@ You can generate a data migration as you would a schema migration:
|
|
131
131
|
rake db:migrate:up:with_data # Runs the "up" for a given migration VERSION
|
132
132
|
rake db:migrate:with_data # Migrate the database data and schema (options: VERSION=x, VERBOSE=false)
|
133
133
|
rake db:rollback:with_data # Rolls the schema back to the previous version (specify steps w/ STEP=n)
|
134
|
-
rake db:schema:load:with_data # Load both schema.rb and data_schema.rb
|
134
|
+
rake db:schema:load:with_data # Load both schema.rb and data_schema.rb files into the database
|
135
|
+
rake db:structure:load:with_data # Load both structure.sql and data_schema.rb files into the database
|
135
136
|
rake db:version:with_data # Retrieves the current schema version numbers for data and schema migrations
|
136
137
|
|
137
138
|
Tasks work as they would with the 'vanilla' db version. The 'with_data' addition to the 'db' tasks will run the task in the context of both the data and schema migrations. That is, rake db:rollback:with_data will check to see if it was a schema or data migration invoked last, and do that. Tasks invoked in that space also have an additional line of output, indicating if the action is performed on data or schema.
|
@@ -7,6 +7,7 @@ module DataMigrate
|
|
7
7
|
self.migrations_paths = ["db/data"]
|
8
8
|
|
9
9
|
def self.assure_data_schema_table
|
10
|
+
ActiveRecord::Base.establish_connection(db_config)
|
10
11
|
DataMigrate::DataSchemaMigration.create_table
|
11
12
|
end
|
12
13
|
|
@@ -41,6 +42,13 @@ module DataMigrate
|
|
41
42
|
/(\d{14})_(.+)\.rb/.match(filename)
|
42
43
|
end
|
43
44
|
|
45
|
+
##
|
46
|
+
# Provides the full migrations_path filepath
|
47
|
+
# @return (String)
|
48
|
+
def full_migrations_path
|
49
|
+
File.join(Rails.root, *migrations_paths.split(File::SEPARATOR))
|
50
|
+
end
|
51
|
+
|
44
52
|
def migrations_status
|
45
53
|
DataMigrate::MigrationContext.new(migrations_paths).migrations_status
|
46
54
|
end
|
@@ -58,6 +66,11 @@ module DataMigrate
|
|
58
66
|
def rollback(migrations_path, steps)
|
59
67
|
DataMigrate::MigrationContext.new(migrations_path).rollback(steps)
|
60
68
|
end
|
69
|
+
|
70
|
+
def db_config
|
71
|
+
ActiveRecord::Base.configurations[Rails.env || "development"] ||
|
72
|
+
ENV["DATABASE_URL"]
|
73
|
+
end
|
61
74
|
end
|
62
75
|
|
63
76
|
private
|
@@ -2,11 +2,12 @@
|
|
2
2
|
|
3
3
|
module DataMigrate
|
4
4
|
##
|
5
|
-
# This class extends DatabaseTasks to add a
|
5
|
+
# This class extends DatabaseTasks to add a schema_file method.
|
6
6
|
class DatabaseTasks
|
7
7
|
extend ActiveRecord::Tasks::DatabaseTasks
|
8
8
|
|
9
|
-
|
9
|
+
# This overrides ActiveRecord::Tasks::DatabaseTasks
|
10
|
+
def self.schema_file(_format = nil)
|
10
11
|
File.join(db_dir, "data_schema.rb")
|
11
12
|
end
|
12
13
|
|
data/lib/data_migrate/version.rb
CHANGED
@@ -48,9 +48,9 @@ describe DataMigrate::DatabaseTasks do
|
|
48
48
|
ActiveRecord::Base.establish_connection(db_config)
|
49
49
|
end
|
50
50
|
|
51
|
-
describe :
|
51
|
+
describe :schema_file do
|
52
52
|
it "returns the correct data schema file path" do
|
53
|
-
expect(subject.
|
53
|
+
expect(subject.schema_file(nil)).to eq "db/data_schema.rb"
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
data/spec/spec_helper.rb
CHANGED
@@ -7,3 +7,9 @@ require 'timecop'
|
|
7
7
|
if Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR == 2
|
8
8
|
DataMigrate::DataMigrator.migrations_paths = ["spec/db/data"]
|
9
9
|
end
|
10
|
+
|
11
|
+
RSpec.configure do |config|
|
12
|
+
config.mock_with :rspec do |mocks|
|
13
|
+
mocks.verify_partial_doubles = true
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,391 @@
|
|
1
|
+
require 'data_migrate/tasks/data_migrate_tasks'
|
2
|
+
|
3
|
+
namespace :db do
|
4
|
+
namespace :migrate do
|
5
|
+
desc "Migrate the database data and schema (options: VERSION=x, VERBOSE=false)."
|
6
|
+
task :with_data => :environment do
|
7
|
+
assure_data_schema_table
|
8
|
+
|
9
|
+
ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
|
10
|
+
target_version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
11
|
+
migrations = []
|
12
|
+
|
13
|
+
if target_version.nil?
|
14
|
+
migrations = pending_migrations.map{ |m| m.merge(:direction =>:up) }
|
15
|
+
else
|
16
|
+
current_schema_version = ActiveRecord::Migrator.current_version
|
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) }
|
19
|
+
elsif target_version < current_schema_version
|
20
|
+
past_migrations.keep_if{ |m| m[:version] > target_version }.map{ |m| m.merge(:direction =>:down) }
|
21
|
+
else # ==
|
22
|
+
[]
|
23
|
+
end
|
24
|
+
|
25
|
+
current_data_version = ActiveRecord::Migrator.current_version
|
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) }
|
28
|
+
elsif target_version < current_data_version
|
29
|
+
past_migrations.keep_if{ |m| m[:version] > target_version }.map{ |m| m.merge(:direction =>:down) }
|
30
|
+
else # ==
|
31
|
+
[]
|
32
|
+
end
|
33
|
+
migrations = if schema_migrations.empty?
|
34
|
+
data_migrations
|
35
|
+
elsif data_migrations.empty?
|
36
|
+
schema_migrations
|
37
|
+
elsif target_version > current_data_version && target_version > current_schema_version
|
38
|
+
sort_migrations data_migrations, schema_migrations
|
39
|
+
elsif target_version < current_data_version && target_version < current_schema_version
|
40
|
+
sort_migrations(data_migrations, schema_migrations).reverse
|
41
|
+
elsif target_version > current_data_version && target_version < current_schema_version
|
42
|
+
schema_migrations + data_migrations
|
43
|
+
elsif target_version < current_data_version && target_version > current_schema_version
|
44
|
+
schema_migrations + data_migrations
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
migrations.each do |migration|
|
49
|
+
if migration[:kind] == :data
|
50
|
+
ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71])
|
51
|
+
DataMigrate::DataMigrator.run(migration[:direction], "db/data/", migration[:version])
|
52
|
+
else
|
53
|
+
ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69])
|
54
|
+
DataMigrate::SchemaMigration.run(
|
55
|
+
migration[:direction],
|
56
|
+
Rails.application.config.paths["db/migrate"],
|
57
|
+
migration[:version]
|
58
|
+
)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
Rake::Task["db:_dump"].invoke
|
63
|
+
Rake::Task["data:dump"].invoke
|
64
|
+
end
|
65
|
+
|
66
|
+
namespace :redo do
|
67
|
+
desc 'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).'
|
68
|
+
task :with_data => :environment do
|
69
|
+
assure_data_schema_table
|
70
|
+
if ENV["VERSION"]
|
71
|
+
Rake::Task["db:migrate:down:with_data"].invoke
|
72
|
+
Rake::Task["db:migrate:up:with_data"].invoke
|
73
|
+
else
|
74
|
+
Rake::Task["db:rollback:with_data"].invoke
|
75
|
+
Rake::Task["db:migrate:with_data"].invoke
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
namespace :up do
|
81
|
+
desc 'Runs the "up" for a given migration VERSION. (options both=false)'
|
82
|
+
task :with_data => :environment do
|
83
|
+
version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
84
|
+
raise "VERSION is required" unless version
|
85
|
+
assure_data_schema_table
|
86
|
+
run_both = ENV["BOTH"] == "true"
|
87
|
+
migrations = pending_migrations.keep_if{|m| m[:version] == version}
|
88
|
+
|
89
|
+
unless run_both || migrations.size < 2
|
90
|
+
migrations = migrations.slice(0,1)
|
91
|
+
end
|
92
|
+
|
93
|
+
migrations.each do |migration|
|
94
|
+
if migration[:kind] == :data
|
95
|
+
ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71])
|
96
|
+
DataMigrate::DataMigrator.run(:up, "db/data/", migration[:version])
|
97
|
+
else
|
98
|
+
ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69])
|
99
|
+
DataMigrate::SchemaMigration.run(:up, "db/migrate/", migration[:version])
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
Rake::Task["db:_dump"].invoke
|
104
|
+
Rake::Task["data:dump"].invoke
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
namespace :down do
|
109
|
+
desc 'Runs the "down" for a given migration VERSION. (option BOTH=false)'
|
110
|
+
task :with_data => :environment do
|
111
|
+
version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
112
|
+
raise "VERSION is required" unless version
|
113
|
+
assure_data_schema_table
|
114
|
+
run_both = ENV["BOTH"] == "true"
|
115
|
+
migrations = past_migrations.keep_if{|m| m[:version] == version}
|
116
|
+
|
117
|
+
unless run_both || migrations.size < 2
|
118
|
+
migrations = migrations.slice(0,1)
|
119
|
+
end
|
120
|
+
|
121
|
+
migrations.each do |migration|
|
122
|
+
if migration[:kind] == :data
|
123
|
+
ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71])
|
124
|
+
DataMigrate::DataMigrator.run(:down, "db/data/", migration[:version])
|
125
|
+
else
|
126
|
+
ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69])
|
127
|
+
DataMigrate::SchemaMigration.run(:down, "db/migrate/", migration[:version])
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
Rake::Task["db:_dump"].invoke
|
132
|
+
Rake::Task["data:dump"].invoke
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
namespace :status do
|
137
|
+
desc "Display status of data and schema migrations"
|
138
|
+
task :with_data => :environment do
|
139
|
+
config = connect_to_database
|
140
|
+
next unless config
|
141
|
+
|
142
|
+
db_list_data = ActiveRecord::Base.connection.select_values(
|
143
|
+
"SELECT version FROM #{DataMigrate::DataSchemaMigration.table_name}"
|
144
|
+
)
|
145
|
+
db_list_schema = ActiveRecord::Base.connection.select_values(
|
146
|
+
"SELECT version FROM #{ActiveRecord::SchemaMigration.schema_migrations_table_name}"
|
147
|
+
)
|
148
|
+
file_list = []
|
149
|
+
|
150
|
+
Dir.foreach(File.join(Rails.root, 'db', 'data')) do |file|
|
151
|
+
# only files matching "20091231235959_some_name.rb" pattern
|
152
|
+
if match_data = /(\d{14})_(.+)\.rb/.match(file)
|
153
|
+
status = db_list_data.delete(match_data[1]) ? 'up' : 'down'
|
154
|
+
file_list << [status, match_data[1], match_data[2], 'data']
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
Dir.foreach(File.join(Rails.root, 'db', 'migrate')) do |file|
|
159
|
+
# only files matching "20091231235959_some_name.rb" pattern
|
160
|
+
if match_data = /(\d{14})_(.+)\.rb/.match(file)
|
161
|
+
status = db_list_schema.delete(match_data[1]) ? 'up' : 'down'
|
162
|
+
file_list << [status, match_data[1], match_data[2], 'schema']
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
file_list.sort!{|a,b| "#{a[1]}_#{a[3] == 'data' ? 1 : 0}" <=> "#{b[1]}_#{b[3] == 'data' ? 1 : 0}" }
|
167
|
+
|
168
|
+
# output
|
169
|
+
puts "\ndatabase: #{config['database']}\n\n"
|
170
|
+
puts "#{"Status".center(8)} #{"Type".center(8)} #{"Migration ID".ljust(14)} Migration Name"
|
171
|
+
puts "-" * 60
|
172
|
+
file_list.each do |file|
|
173
|
+
puts "#{file[0].center(8)} #{file[3].center(8)} #{file[1].ljust(14)} #{file[2].humanize}"
|
174
|
+
end
|
175
|
+
db_list_schema.each do |version|
|
176
|
+
puts "#{'up'.center(8)} #{version.ljust(14)} *** NO SCHEMA FILE ***"
|
177
|
+
end
|
178
|
+
db_list_data.each do |version|
|
179
|
+
puts "#{'up'.center(8)} #{version.ljust(14)} *** NO DATA FILE ***"
|
180
|
+
end
|
181
|
+
puts
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end # END OF MIGRATE NAME SPACE
|
185
|
+
|
186
|
+
namespace :rollback do
|
187
|
+
desc 'Rolls the schema back to the previous version (specify steps w/ STEP=n).'
|
188
|
+
task :with_data => :environment do
|
189
|
+
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
|
190
|
+
assure_data_schema_table
|
191
|
+
past_migrations[0..(step - 1)].each do | past_migration |
|
192
|
+
if past_migration[:kind] == :data
|
193
|
+
ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71])
|
194
|
+
DataMigrate::DataMigrator.run(:down, "db/data/", past_migration[:version])
|
195
|
+
elsif past_migration[:kind] == :schema
|
196
|
+
ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69])
|
197
|
+
ActiveRecord::Migrator.run(:down, "db/migrate/", past_migration[:version])
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
Rake::Task["db:_dump"].invoke
|
202
|
+
Rake::Task["data:dump"].invoke
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
namespace :forward do
|
207
|
+
desc 'Pushes the schema to the next version (specify steps w/ STEP=n).'
|
208
|
+
task :with_data => :environment do
|
209
|
+
assure_data_schema_table
|
210
|
+
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
|
211
|
+
DataMigrate::DatabaseTasks.forward(step)
|
212
|
+
Rake::Task["db:_dump"].invoke
|
213
|
+
Rake::Task["data:dump"].invoke
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
namespace :version do
|
218
|
+
desc "Retrieves the current schema version numbers for data and schema migrations"
|
219
|
+
task :with_data => :environment do
|
220
|
+
assure_data_schema_table
|
221
|
+
puts "Current Schema version: #{ActiveRecord::Migrator.current_version}"
|
222
|
+
puts "Current Data version: #{DataMigrate::DataMigrator.current_version}"
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
namespace :schema do
|
227
|
+
namespace :load do
|
228
|
+
desc "Load both schema.rb and data_schema.rb file into the database"
|
229
|
+
task with_data: :environment do
|
230
|
+
Rake::Task["db:schema:load"].invoke
|
231
|
+
|
232
|
+
DataMigrate::DatabaseTasks.load_schema_current(
|
233
|
+
:ruby,
|
234
|
+
ENV["DATA_SCHEMA"]
|
235
|
+
)
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
namespace :structure do
|
241
|
+
namespace :load do
|
242
|
+
desc "Load both structure.sql and data_schema.rb file into the database"
|
243
|
+
task with_data: :environment do
|
244
|
+
Rake::Task["db:structure:load"].invoke
|
245
|
+
|
246
|
+
DataMigrate::DatabaseTasks.load_schema_current(
|
247
|
+
:ruby,
|
248
|
+
ENV["DATA_SCHEMA"]
|
249
|
+
)
|
250
|
+
end
|
251
|
+
end
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
namespace :data do
|
256
|
+
desc 'Migrate data migrations (options: VERSION=x, VERBOSE=false)'
|
257
|
+
task :migrate => :environment do
|
258
|
+
DataMigrate::Tasks::DataMigrateTasks.migrate
|
259
|
+
Rake::Task["data:dump"].invoke
|
260
|
+
end
|
261
|
+
|
262
|
+
namespace :migrate do
|
263
|
+
desc 'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).'
|
264
|
+
task :redo => :environment do
|
265
|
+
assure_data_schema_table
|
266
|
+
if ENV["VERSION"]
|
267
|
+
Rake::Task["data:migrate:down"].invoke
|
268
|
+
Rake::Task["data:migrate:up"].invoke
|
269
|
+
else
|
270
|
+
Rake::Task["data:rollback"].invoke
|
271
|
+
Rake::Task["data:migrate"].invoke
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
desc 'Runs the "up" for a given migration VERSION.'
|
276
|
+
task :up => :environment do
|
277
|
+
assure_data_schema_table
|
278
|
+
version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
279
|
+
raise "VERSION is required" unless version
|
280
|
+
DataMigrate::DataMigrator.run(:up, "db/data/", version)
|
281
|
+
Rake::Task["data:dump"].invoke
|
282
|
+
end
|
283
|
+
|
284
|
+
desc 'Runs the "down" for a given migration VERSION.'
|
285
|
+
task :down => :environment do
|
286
|
+
version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
287
|
+
raise "VERSION is required" unless version
|
288
|
+
assure_data_schema_table
|
289
|
+
DataMigrate::DataMigrator.run(:down, "db/data/", version)
|
290
|
+
Rake::Task["data:dump"].invoke
|
291
|
+
end
|
292
|
+
|
293
|
+
desc "Display status of data migrations"
|
294
|
+
task :status => :environment do
|
295
|
+
config = ActiveRecord::Base.configurations[Rails.env || 'development']
|
296
|
+
ActiveRecord::Base.establish_connection(config)
|
297
|
+
connection = ActiveRecord::Base.connection
|
298
|
+
puts "\ndatabase: #{config['database']}\n\n"
|
299
|
+
DataMigrate::StatusService.dump(connection)
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
303
|
+
desc 'Rolls the schema back to the previous version (specify steps w/ STEP=n).'
|
304
|
+
task :rollback => :environment do
|
305
|
+
assure_data_schema_table
|
306
|
+
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
|
307
|
+
DataMigrate::DataMigrator.rollback('db/data/', step)
|
308
|
+
Rake::Task["data:dump"].invoke
|
309
|
+
end
|
310
|
+
|
311
|
+
desc 'Pushes the schema to the next version (specify steps w/ STEP=n).'
|
312
|
+
task :forward => :environment do
|
313
|
+
assure_data_schema_table
|
314
|
+
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
|
315
|
+
# TODO: No worky for .forward
|
316
|
+
# DataMigrate::DataMigrator.forward('db/data/', step)
|
317
|
+
migrations = pending_data_migrations.reverse.pop(step).reverse
|
318
|
+
migrations.each do | pending_migration |
|
319
|
+
DataMigrate::DataMigrator.run(:up, "db/data/", pending_migration[:version])
|
320
|
+
end
|
321
|
+
Rake::Task["data:dump"].invoke
|
322
|
+
end
|
323
|
+
|
324
|
+
desc "Retrieves the current schema version number for data migrations"
|
325
|
+
task :version => :environment do
|
326
|
+
assure_data_schema_table
|
327
|
+
puts "Current data version: #{DataMigrate::DataMigrator.current_version}"
|
328
|
+
end
|
329
|
+
|
330
|
+
desc "Create a db/data_schema.rb file that stores the current data version"
|
331
|
+
task dump: :environment do
|
332
|
+
if ActiveRecord::Base.dump_schema_after_migration
|
333
|
+
filename = DataMigrate::DatabaseTasks.schema_file
|
334
|
+
File.open(filename, "w:utf-8") do |file|
|
335
|
+
DataMigrate::SchemaDumper.dump(ActiveRecord::Base.connection, file)
|
336
|
+
end
|
337
|
+
end
|
338
|
+
|
339
|
+
# Allow this task to be called as many times as required. An example
|
340
|
+
# is the migrate:redo task, which calls other two internally
|
341
|
+
# that depend on this one.
|
342
|
+
Rake::Task["data:dump"].reenable
|
343
|
+
end
|
344
|
+
end
|
345
|
+
|
346
|
+
def pending_migrations
|
347
|
+
DataMigrate::DatabaseTasks.sort_migrations(
|
348
|
+
DataMigrate::DatabaseTasks.pending_schema_migrations,
|
349
|
+
DataMigrate::DatabaseTasks.pending_data_migrations
|
350
|
+
)
|
351
|
+
end
|
352
|
+
|
353
|
+
def pending_data_migrations
|
354
|
+
DataMigrate::DatabaseTasks.pending_data_migrations
|
355
|
+
end
|
356
|
+
|
357
|
+
def pending_schema_migrations
|
358
|
+
DataMigrate::DatabaseTasks.pending_schema_migrations
|
359
|
+
end
|
360
|
+
|
361
|
+
def sort_migrations set_1, set_2=nil
|
362
|
+
migrations = set_1 + (set_2 || [])
|
363
|
+
migrations.sort{|a,b| sort_string(a) <=> sort_string(b)}
|
364
|
+
end
|
365
|
+
|
366
|
+
def sort_string migration
|
367
|
+
"#{migration[:version]}_#{migration[:kind] == :data ? 1 : 0}"
|
368
|
+
end
|
369
|
+
|
370
|
+
def connect_to_database
|
371
|
+
config = ActiveRecord::Base.configurations[Rails.env || 'development']
|
372
|
+
ActiveRecord::Base.establish_connection(config)
|
373
|
+
|
374
|
+
unless DataMigrate::DataSchemaMigration.table_exists?
|
375
|
+
puts 'Data migrations table does not exist yet.'
|
376
|
+
config = nil
|
377
|
+
end
|
378
|
+
unless ActiveRecord::SchemaMigration.table_exists?
|
379
|
+
puts 'Schema migrations table does not exist yet.'
|
380
|
+
config = nil
|
381
|
+
end
|
382
|
+
config
|
383
|
+
end
|
384
|
+
|
385
|
+
def past_migrations(sort=nil)
|
386
|
+
DataMigrate::DatabaseTasks.past_migrations(sort)
|
387
|
+
end
|
388
|
+
|
389
|
+
def assure_data_schema_table
|
390
|
+
DataMigrate::DataMigrator.assure_data_schema_table
|
391
|
+
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: 5.0
|
4
|
+
version: 5.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: 2018-
|
13
|
+
date: 2018-09-12 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -275,7 +275,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
275
275
|
version: '0'
|
276
276
|
requirements: []
|
277
277
|
rubyforge_project: data_migrate
|
278
|
-
rubygems_version: 2.
|
278
|
+
rubygems_version: 2.6.13
|
279
279
|
signing_key:
|
280
280
|
specification_version: 4
|
281
281
|
summary: Rake tasks to migrate data alongside schema changes.
|