data_migrate 8.1.0 → 8.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c2279e8f7ac44136ae9fca448e3a239066cf901e1f8e46813888deed8d2288f5
4
- data.tar.gz: c0314320a07bff4ce02e148b4e7026e22155a7eab18e3a69c441f1689880ff0f
3
+ metadata.gz: ba5ee2c5d78ddb60b5b23067b5103c4f1dba6d1249984dfe2489382cc9bc9f1a
4
+ data.tar.gz: d6ed21a477ffe26c2705f9582a4f370e1a20807297200ba62988ada34c0f42fc
5
5
  SHA512:
6
- metadata.gz: '087890b935d8a520994eebebfbfdf6c86b6cd115fbb7629f65e1d56170bd1c013109cbbb5bf737a4a61572db3e1a85e966589f4541c422d772e87fdaf2be2f5f'
7
- data.tar.gz: f6a2e6811e8cdb29ab0cfa963a6fc69d4b8694fe09aa6cd0eb9859784cbe9c2c1e5fbaad4b35dee4c3923a0d74ab66c410523818f53e585eeced1cfee0546716
6
+ metadata.gz: d31827b46b9def6d3be01606f027e040cc340e3c4aebea687980f2eefa4ca86acd92f9fb495c6b25578c69f8cfba78aa8ac6863b276945450e43323ff2458fec
7
+ data.tar.gz: eec842d6f96134abea3945d27e4d366f8f093ac0cfe14ff7f4931b61c2a872cd21fe4c19e7ccec54dedba470b224bf0b9b199f3c4941cad0d2b896de5211b8ac
data/Changelog.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 8.2.0
4
+
5
+ Delegate to anonymous subclass of AR::SchemaMigration [foxondo](https://github.com/foxondo)
6
+
7
+ ## 8.1.1
8
+
9
+ Revert 8.1.0 changes
10
+
3
11
  ## 8.1.0
4
12
 
5
13
  Avoid globally accessible functions for all rake tasks [berniechiu](https://github.com/berniechiu)
data/README.md CHANGED
@@ -132,6 +132,27 @@ require 'capistrano/data_migrate'
132
132
 
133
133
  From now on capistrano will run `rake db:migrate:with_data` in every deploy.
134
134
 
135
+ ## Rails Engines support
136
+
137
+ This gem also has a initial support for adding data migrations inside Rails engines.
138
+ Inside the Engine's class initializer (the one that inherits from `Rails::Engine`, usually inside `engines/ENGINE_NAME/lib/engine.rb`) you need to add something like this:
139
+
140
+
141
+ ```ruby
142
+ module EngineName
143
+ class Engine < ::Rails::Engine
144
+ initializer :engine_name do |app|
145
+ ::DataMigrate.configure do |data_migrate|
146
+ default_path = ::DataMigrate::Config.new.data_migrations_path
147
+ data_migrate.data_migrations_path = [default_path, root.join('db', 'data')]
148
+ end
149
+ end
150
+ end
151
+ end
152
+ ```
153
+
154
+ Then, in the Engine's `db/data` folder, you can add data migrations and run them as usual.
155
+
135
156
  ### Contributing
136
157
 
137
158
  ## Testing
@@ -1,15 +1,14 @@
1
1
  module DataMigrate
2
- class DataSchemaMigration < ::ActiveRecord::SchemaMigration
3
-
2
+ class DataSchemaMigration
4
3
  class << self
5
- def table_name
6
- ActiveRecord::Base.table_name_prefix + 'data_migrations' + ActiveRecord::Base.table_name_suffix
7
- end
4
+ delegate :table_name, :primary_key, :create_table, :normalized_versions, :create, :create!, :table_exists?, :where, to: :instance
8
5
 
9
- def primary_key
10
- "version"
6
+ def instance
7
+ @instance ||= Class.new(::ActiveRecord::SchemaMigration) do
8
+ define_singleton_method(:table_name) { ActiveRecord::Base.table_name_prefix + 'data_migrations' + ActiveRecord::Base.table_name_suffix }
9
+ define_singleton_method(:primary_key) { "version" }
10
+ end
11
11
  end
12
12
  end
13
13
  end
14
14
  end
15
-
@@ -47,40 +47,6 @@ 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
84
50
  end
85
51
 
86
52
  # This overrides ActiveRecord::Tasks::DatabaseTasks
@@ -155,5 +121,6 @@ module DataMigrate
155
121
 
156
122
  sort == "asc" ? sort_migrations(migrations) : sort_migrations(migrations).reverse
157
123
  end
124
+
158
125
  end
159
126
  end
@@ -1,3 +1,3 @@
1
1
  module DataMigrate
2
- VERSION = "8.1.0".freeze
2
+ VERSION = "8.2.0".freeze
3
3
  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
- DataMigrate::DataMigrator.assure_data_schema_table
7
+ 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 = DataMigrate::DatabaseTasks.pending_migrations.map{ |m| m.merge(:direction =>:up) }
14
+ migrations = 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
- DataMigrate::DatabaseTasks.pending_schema_migrations.keep_if{ |m| m[:version] <= target_version }.map{ |m| m.merge(:direction =>:up) }
18
+ 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
- DataMigrate::DatabaseTasks.past_migrations.keep_if{ |m| m[:version] > target_version }.map{ |m| m.merge(:direction =>:down) }
20
+ 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 = DataMigrate::DataMigrator.current_version
25
+ current_data_version = ActiveRecord::Migrator.current_version
26
26
  data_migrations = if target_version > current_data_version
27
- DataMigrate::DatabaseTasks.pending_data_migrations.keep_if{ |m| m[:version] <= target_version }.map{ |m| m.merge(:direction =>:up) }
27
+ 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
- DataMigrate::DatabaseTasks.past_migrations.keep_if{ |m| m[:version] > target_version }.map{ |m| m.merge(:direction =>:down) }
29
+ 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
- DataMigrate::DatabaseTasks.sort_migrations data_migrations, schema_migrations
38
+ sort_migrations data_migrations, schema_migrations
39
39
  elsif target_version < current_data_version && target_version < current_schema_version
40
- DataMigrate::DatabaseTasks.sort_migrations(data_migrations, schema_migrations).reverse
40
+ 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
- DataMigrate::DatabaseTasks.run_migration(migration, migration[:direction])
49
+ 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
- DataMigrate::DataMigrator.assure_data_schema_table
59
+ 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
- DataMigrate::DataMigrator.assure_data_schema_table
75
+ assure_data_schema_table
76
76
  run_both = ENV["BOTH"] == "true"
77
- migrations = DataMigrate::DatabaseTasks.pending_migrations.keep_if{|m| m[:version] == version}
77
+ migrations = 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
- DataMigrate::DatabaseTasks.run_migration(migration, :up)
84
+ 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
- DataMigrate::DataMigrator.assure_data_schema_table
97
+ assure_data_schema_table
98
98
  run_both = ENV["BOTH"] == "true"
99
- migrations = DataMigrate::DatabaseTasks.past_migrations.keep_if{|m| m[:version] == version}
99
+ migrations = 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
- DataMigrate::DatabaseTasks.run_migration(migration, :down)
106
+ run_migration(migration, :down)
107
107
  end
108
108
 
109
109
  Rake::Task["db:_dump"].invoke
@@ -123,9 +123,9 @@ namespace :db do
123
123
  desc 'Rolls the schema back to the previous version (specify steps w/ STEP=n).'
124
124
  task :with_data => :environment do
125
125
  step = ENV['STEP'] ? ENV['STEP'].to_i : 1
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)
126
+ assure_data_schema_table
127
+ past_migrations[0..(step - 1)].each do | past_migration |
128
+ run_migration(past_migration, :down)
129
129
  end
130
130
 
131
131
  Rake::Task["db:_dump"].invoke
@@ -136,7 +136,7 @@ namespace :db do
136
136
  namespace :forward do
137
137
  desc 'Pushes the schema to the next version (specify steps w/ STEP=n).'
138
138
  task :with_data => :environment do
139
- DataMigrate::DataMigrator.assure_data_schema_table
139
+ assure_data_schema_table
140
140
  step = ENV['STEP'] ? ENV['STEP'].to_i : 1
141
141
  DataMigrate::DatabaseTasks.forward(step)
142
142
  Rake::Task["db:_dump"].invoke
@@ -147,7 +147,7 @@ namespace :db do
147
147
  namespace :version do
148
148
  desc "Retrieves the current schema version numbers for data and schema migrations"
149
149
  task :with_data => :environment do
150
- DataMigrate::DataMigrator.assure_data_schema_table
150
+ assure_data_schema_table
151
151
  puts "Current Schema version: #{ActiveRecord::Migrator.current_version}"
152
152
  puts "Current Data version: #{DataMigrate::DataMigrator.current_version}"
153
153
  end
@@ -157,7 +157,7 @@ namespace :db do
157
157
  desc "Raises an error if there are pending migrations or data migrations"
158
158
  task with_data: :environment do
159
159
  message = %{Run `rake db:migrate:with_data` to update your database then try again.}
160
- DataMigrate::Tasks::DataMigrateTasks.abort_if_pending_migrations(DataMigrate::DatabaseTasks.pending_migrations, message)
160
+ DataMigrate::Tasks::DataMigrateTasks.abort_if_pending_migrations(pending_migrations, message)
161
161
  end
162
162
  end
163
163
 
@@ -200,7 +200,7 @@ namespace :data do
200
200
  namespace :migrate do
201
201
  desc 'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).'
202
202
  task :redo => :environment do
203
- DataMigrate::DataMigrator.assure_data_schema_table
203
+ assure_data_schema_table
204
204
  if ENV["VERSION"]
205
205
  Rake::Task["data:migrate:down"].invoke
206
206
  Rake::Task["data:migrate:up"].invoke
@@ -212,10 +212,10 @@ namespace :data do
212
212
 
213
213
  desc 'Runs the "up" for a given migration VERSION.'
214
214
  task :up => :environment do
215
- DataMigrate::DataMigrator.assure_data_schema_table
215
+ assure_data_schema_table
216
216
  version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
217
217
  raise "VERSION is required" unless version
218
- DataMigrate::DataMigrator.run(:up, DataMigrate::DatabaseTasks.data_migrations_path, version)
218
+ DataMigrate::DataMigrator.run(:up, data_migrations_path, version)
219
219
  Rake::Task["data:dump"].invoke
220
220
  end
221
221
 
@@ -223,8 +223,8 @@ namespace :data do
223
223
  task :down => :environment do
224
224
  version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
225
225
  raise "VERSION is required" unless version
226
- DataMigrate::DataMigrator.assure_data_schema_table
227
- DataMigrate::DataMigrator.run(:down, DataMigrate::DatabaseTasks.data_migrations_path, version)
226
+ assure_data_schema_table
227
+ DataMigrate::DataMigrator.run(:down, data_migrations_path, version)
228
228
  Rake::Task["data:dump"].invoke
229
229
  end
230
230
 
@@ -236,35 +236,35 @@ namespace :data do
236
236
 
237
237
  desc 'Rolls the schema back to the previous version (specify steps w/ STEP=n).'
238
238
  task :rollback => :environment do
239
- DataMigrate::DataMigrator.assure_data_schema_table
239
+ assure_data_schema_table
240
240
  step = ENV['STEP'] ? ENV['STEP'].to_i : 1
241
- DataMigrate::DataMigrator.rollback(DataMigrate::DatabaseTasks.data_migrations_path, step)
241
+ DataMigrate::DataMigrator.rollback(data_migrations_path, step)
242
242
  Rake::Task["data:dump"].invoke
243
243
  end
244
244
 
245
245
  desc 'Pushes the schema to the next version (specify steps w/ STEP=n).'
246
246
  task :forward => :environment do
247
- DataMigrate::DataMigrator.assure_data_schema_table
247
+ assure_data_schema_table
248
248
  step = ENV['STEP'] ? ENV['STEP'].to_i : 1
249
249
  # TODO: No worky for .forward
250
250
  # DataMigrate::DataMigrator.forward('db/data/', step)
251
- migrations = DataMigrate::DatabaseTasks.pending_data_migrations.reverse.pop(step).reverse
251
+ migrations = pending_data_migrations.reverse.pop(step).reverse
252
252
  migrations.each do | pending_migration |
253
- DataMigrate::DataMigrator.run(:up, DataMigrate::DatabaseTasks.data_migrations_path, pending_migration[:version])
253
+ DataMigrate::DataMigrator.run(:up, data_migrations_path, pending_migration[:version])
254
254
  end
255
255
  Rake::Task["data:dump"].invoke
256
256
  end
257
257
 
258
258
  desc "Retrieves the current schema version number for data migrations"
259
259
  task :version => :environment do
260
- DataMigrate::DataMigrator.assure_data_schema_table
260
+ assure_data_schema_table
261
261
  puts "Current data version: #{DataMigrate::DataMigrator.current_version}"
262
262
  end
263
263
 
264
264
  desc "Raises an error if there are pending data migrations"
265
265
  task abort_if_pending_migrations: :environment do
266
266
  message = %{Run `rake data:migrate` to update your database then try again.}
267
- DataMigrate::Tasks::DataMigrateTasks.abort_if_pending_migrations(DataMigrate::DatabaseTasks.pending_data_migrations, message)
267
+ DataMigrate::Tasks::DataMigrateTasks.abort_if_pending_migrations(pending_data_migrations, message)
268
268
  end
269
269
 
270
270
  desc "Create a db/data_schema.rb file that stores the current data version"
@@ -287,3 +287,53 @@ namespace :data do
287
287
  end
288
288
  end
289
289
  end
290
+
291
+ def pending_migrations
292
+ DataMigrate::DatabaseTasks.sort_migrations(
293
+ DataMigrate::DatabaseTasks.pending_schema_migrations,
294
+ DataMigrate::DatabaseTasks.pending_data_migrations
295
+ )
296
+ end
297
+
298
+ def pending_data_migrations
299
+ DataMigrate::DatabaseTasks.pending_data_migrations
300
+ end
301
+
302
+ def pending_schema_migrations
303
+ DataMigrate::DatabaseTasks.pending_schema_migrations
304
+ end
305
+
306
+ def sort_migrations set_1, set_2=nil
307
+ migrations = set_1 + (set_2 || [])
308
+ migrations.sort{|a,b| sort_string(a) <=> sort_string(b)}
309
+ end
310
+
311
+ def sort_string migration
312
+ "#{migration[:version]}_#{migration[:kind] == :data ? 1 : 0}"
313
+ end
314
+
315
+ def past_migrations(sort=nil)
316
+ DataMigrate::DatabaseTasks.past_migrations(sort)
317
+ end
318
+
319
+ def assure_data_schema_table
320
+ DataMigrate::DataMigrator.assure_data_schema_table
321
+ end
322
+
323
+ def data_migrations_path
324
+ DataMigrate.config.data_migrations_path
325
+ end
326
+
327
+ def run_migration(migration, direction)
328
+ if migration[:kind] == :data
329
+ ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71])
330
+ DataMigrate::DataMigrator.run(direction, data_migrations_path, migration[:version])
331
+ else
332
+ ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69])
333
+ DataMigrate::SchemaMigration.run(
334
+ direction,
335
+ DataMigrate::SchemaMigration.migrations_paths,
336
+ migration[:version]
337
+ )
338
+ end
339
+ 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.1.0
4
+ version: 8.2.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-08-02 00:00:00.000000000 Z
13
+ date: 2022-10-24 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord