data_migrate 9.4.2 → 10.0.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build.yml +3 -3
  3. data/.github/workflows/gempush.yml +8 -6
  4. data/.gitignore +2 -3
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +14 -0
  7. data/Appraisals +5 -5
  8. data/Changelog.md +2 -46
  9. data/Gemfile +1 -0
  10. data/Gemfile.rails6.1 +11 -0
  11. data/README.md +5 -7
  12. data/data_migrate.gemspec +2 -2
  13. data/gemfiles/{rails_7.1.gemfile → rails_6.0.gemfile} +2 -1
  14. data/gemfiles/rails_6.1.gemfile +1 -0
  15. data/gemfiles/rails_7.0.gemfile +2 -1
  16. data/lib/data_migrate/data_migrator.rb +23 -15
  17. data/lib/data_migrate/data_schema.rb +2 -2
  18. data/lib/data_migrate/data_schema_migration.rb +7 -24
  19. data/lib/data_migrate/database_tasks.rb +48 -194
  20. data/lib/data_migrate/legacy_migrator.rb +22 -0
  21. data/lib/data_migrate/migration_context.rb +8 -11
  22. data/lib/data_migrate/schema_dumper.rb +1 -1
  23. data/lib/data_migrate/schema_migration.rb +4 -5
  24. data/lib/data_migrate/status_service.rb +4 -4
  25. data/lib/data_migrate/tasks/data_migrate_tasks.rb +15 -14
  26. data/lib/data_migrate/version.rb +1 -1
  27. data/lib/data_migrate.rb +1 -2
  28. data/spec/data_migrate/data_migrator_spec.rb +14 -17
  29. data/spec/data_migrate/data_schema_migration_spec.rb +8 -25
  30. data/spec/data_migrate/data_spec.rb +1 -1
  31. data/spec/data_migrate/database_tasks_spec.rb +19 -34
  32. data/spec/data_migrate/legacy_migrator_spec.rb +38 -0
  33. data/spec/data_migrate/migration_context_spec.rb +8 -15
  34. data/spec/data_migrate/schema_dumper_spec.rb +3 -6
  35. data/spec/data_migrate/schema_migration_spec.rb +6 -13
  36. data/spec/data_migrate/status_service_spec.rb +4 -7
  37. data/spec/data_migrate/tasks/data_migrate_tasks_spec.rb +14 -13
  38. data/spec/db/data/20091231235959_some_name.rb +1 -1
  39. data/spec/db/data/20171231235959_super_update.rb +1 -1
  40. data/spec/db/migrate/20131111111111_late_migration.rb +1 -1
  41. data/spec/db/migrate/20202020202011_db_migration.rb +1 -1
  42. data/tasks/databases.rake +83 -25
  43. metadata +19 -21
  44. data/Gemfile.lock +0 -184
  45. data/gemfiles/rails_6.1.gemfile.lock +0 -229
  46. data/gemfiles/rails_7.0.gemfile.lock +0 -230
  47. data/gemfiles/rails_7.1.gemfile.lock +0 -263
  48. data/lib/data_migrate/database_configurations_wrapper.rb +0 -11
  49. data/lib/data_migrate/rails_helper.rb +0 -79
  50. data/lib/data_migrate/test.rb +0 -14
@@ -5,143 +5,67 @@ require "data_migrate/config"
5
5
  module DataMigrate
6
6
  ##
7
7
  # This class extends DatabaseTasks to add a schema_file method.
8
- module DatabaseTasks
8
+ class DatabaseTasks
9
9
  extend ActiveRecord::Tasks::DatabaseTasks
10
- extend self
11
-
12
- # These method are only introduced in Rails 7.1
13
- unless respond_to?(:with_temporary_connection_for_each)
14
- def with_temporary_connection_for_each(env: ActiveRecord::Tasks::DatabaseTasks.env, name: nil, &block) # :nodoc:
15
- if name
16
- db_config = ActiveRecord::Base.configurations.configs_for(env_name: env, name: name)
17
- with_temporary_connection(db_config, &block)
18
- else
19
- ActiveRecord::Base.configurations.configs_for(env_name: env, name: name).each do |db_config|
20
- with_temporary_connection(db_config, &block)
21
- end
22
- end
10
+
11
+ class << self
12
+ def schema_file_type(_format = nil)
13
+ "data_schema.rb"
23
14
  end
24
15
 
25
- def with_temporary_connection(db_config) # :nodoc:
26
- with_temporary_pool(db_config) do |pool|
27
- yield pool.connection
16
+ def dump_filename(spec_name, format = ActiveRecord::Base.schema_format)
17
+ filename = if spec_name == "primary"
18
+ schema_file_type(format)
19
+ else
20
+ "#{spec_name}_#{schema_file_type(format)}"
28
21
  end
29
- end
30
22
 
31
- def migration_class # :nodoc:
32
- ActiveRecord::Base
23
+ ENV["DATA_SCHEMA"] || File.join(db_dir, filename)
33
24
  end
34
25
 
35
- def migration_connection # :nodoc:
36
- migration_class.connection
26
+ def check_schema_file(filename)
27
+ unless File.exist?(filename)
28
+ message = +%{#{filename} doesn't exist yet. Run `rake data:migrate` to create it, then try again.}
29
+ Kernel.abort message
30
+ end
37
31
  end
38
32
 
39
- private def with_temporary_pool(db_config)
40
- original_db_config = migration_class.connection_db_config
41
- pool = migration_class.connection_handler.establish_connection(db_config)
42
-
43
- yield pool
44
- ensure
45
- migration_class.connection_handler.establish_connection(original_db_config)
33
+ def pending_migrations
34
+ sort_migrations(
35
+ pending_schema_migrations,
36
+ pending_data_migrations
37
+ )
46
38
  end
47
- end
48
-
49
- def db_configs_with_versions
50
- db_configs_with_versions = Hash.new { |h, k| h[k] = [] }
51
-
52
- with_temporary_connection_for_each do |conn|
53
- db_config = conn.pool.db_config
54
- if db_config.primary?
55
- versions_to_run = DataMigrate::DatabaseTasks.pending_data_migrations.map { |m| m[:version] }
56
- target_version = ActiveRecord::Tasks::DatabaseTasks.target_version
57
39
 
58
- versions_to_run.each do |version|
59
- next if target_version && target_version != version
60
- db_configs_with_versions[version] << DatabaseConfigurationWrapper.new(db_config)
61
- end
62
- end
40
+ def sort_migrations(*migrations)
41
+ migrations.flatten.sort { |a, b| sort_string(a) <=> sort_string(b) }
63
42
  end
64
43
 
65
- db_configs_with_versions
66
- end
67
-
68
- def schema_file(_format = nil)
69
- File.join(db_dir, "data_schema.rb")
70
- end
71
-
72
- def schema_file_type(_format = nil)
73
- "data_schema.rb"
74
- end
75
-
76
- # This method is removed in Rails 7.0
77
- def dump_filename(spec_name, format = ActiveRecord::Base.schema_format)
78
- filename = if spec_name == "primary"
79
- schema_file_type(format)
80
- else
81
- "#{spec_name}_#{schema_file_type(format)}"
44
+ def sort_string migration
45
+ "#{migration[:version]}_#{migration[:kind] == :data ? 1 : 0}"
82
46
  end
83
47
 
84
- ENV["DATA_SCHEMA"] || File.join(db_dir, filename)
85
- end
86
-
87
- def check_schema_file(filename)
88
- unless File.exist?(filename)
89
- message = +%{#{filename} doesn't exist yet. Run `rake data:migrate` to create it, then try again.}
90
- Kernel.abort message
48
+ def data_migrations_path
49
+ ::DataMigrate.config.data_migrations_path
91
50
  end
92
- end
93
-
94
- def pending_migrations
95
- sort_migrations(
96
- pending_schema_migrations,
97
- pending_data_migrations
98
- )
99
- end
100
-
101
- def sort_migrations(*migrations)
102
- migrations.flatten.sort { |a, b| sort_string(a) <=> sort_string(b) }
103
- end
104
-
105
- def sort_string migration
106
- "#{migration[:version]}_#{migration[:kind] == :data ? 1 : 0}"
107
- end
108
51
 
109
- def data_migrations_path
110
- ::DataMigrate.config.data_migrations_path
111
- end
112
-
113
- def run_migration(migration, direction)
114
- if migration[:kind] == :data
115
- ::ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71])
116
- ::DataMigrate::DataMigrator.run(direction, data_migrations_path, migration[:version])
117
- else
118
- ::ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69])
119
- ::DataMigrate::SchemaMigration.run(
120
- direction,
121
- ::DataMigrate::SchemaMigration.migrations_paths,
122
- migration[:version]
123
- )
52
+ def run_migration(migration, direction)
53
+ if migration[:kind] == :data
54
+ ::ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71])
55
+ ::DataMigrate::DataMigrator.run(direction, data_migrations_path, migration[:version])
56
+ else
57
+ ::ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69])
58
+ ::DataMigrate::SchemaMigration.run(
59
+ direction,
60
+ ::DataMigrate::SchemaMigration.migrations_paths,
61
+ migration[:version]
62
+ )
63
+ end
124
64
  end
125
65
  end
126
66
 
127
- def schema_dump_path(db_config, format = ActiveRecord.schema_format)
128
- return ENV["DATA_SCHEMA"] if ENV["DATA_SCHEMA"]
129
-
130
- # We only require a schema.rb file for the primary database
131
- return unless db_config.primary?
132
-
133
- File.join(File.dirname(ActiveRecord::Tasks::DatabaseTasks.schema_dump_path(db_config, format)), schema_file_type)
134
- end
135
-
136
- # Override this method from `ActiveRecord::Tasks::DatabaseTasks`
137
- # to ensure that the sha saved in ar_internal_metadata table
138
- # is from the original schema.rb file
139
- def schema_sha1(file)
140
- ActiveRecord::Tasks::DatabaseTasks.schema_dump_path(ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env, name: "primary"))
141
- end
142
-
143
- def forward(step = 1)
144
- DataMigrate::DataMigrator.create_data_schema_table
67
+ def self.forward(step = 1)
68
+ DataMigrate::DataMigrator.assure_data_schema_table
145
69
  migrations = pending_migrations.reverse.pop(step).reverse
146
70
  migrations.each do | pending_migration |
147
71
  if pending_migration[:kind] == :data
@@ -154,92 +78,22 @@ module DataMigrate
154
78
  end
155
79
  end
156
80
 
157
- def pending_data_migrations
81
+ def self.pending_data_migrations
158
82
  data_migrations = DataMigrate::DataMigrator.migrations(data_migrations_path)
159
- data_migrator = DataMigrate::RailsHelper.data_migrator(:up, data_migrations)
160
- sort_migrations(
161
- data_migrator.pending_migrations.map { |m| { version: m.version, name: m.name, kind: :data } }
162
- )
83
+ sort_migrations(DataMigrate::DataMigrator.new(:up, data_migrations ).
84
+ pending_migrations.map {|m| { version: m.version, name: m.name, kind: :data }})
163
85
  end
164
86
 
165
- def pending_schema_migrations
87
+ def self.pending_schema_migrations
166
88
  ::DataMigrate::SchemaMigration.pending_schema_migrations
167
89
  end
168
90
 
169
- def past_migrations(sort = nil)
170
- data_versions = DataMigrate::RailsHelper.data_schema_migration.table_exists? ? DataMigrate::RailsHelper.data_schema_migration.normalized_versions : []
171
- schema_versions = DataMigrate::RailsHelper.schema_migration.normalized_versions
91
+ def self.past_migrations(sort = nil)
92
+ data_versions = DataMigrate::DataSchemaMigration.table_exists? ? DataMigrate::DataSchemaMigration.normalized_versions : []
93
+ schema_versions = ActiveRecord::SchemaMigration.normalized_versions
172
94
  migrations = data_versions.map { |v| { version: v.to_i, kind: :data } } + schema_versions.map { |v| { version: v.to_i, kind: :schema } }
173
95
 
174
96
  sort&.downcase == "asc" ? sort_migrations(migrations) : sort_migrations(migrations).reverse
175
97
  end
176
-
177
- def self.migrate_with_data
178
- DataMigrate::DataMigrator.create_data_schema_table
179
-
180
- ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
181
-
182
- db_configs = ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env)
183
-
184
- schema_mapped_versions = ActiveRecord::Tasks::DatabaseTasks.db_configs_with_versions(db_configs)
185
- data_mapped_versions = DataMigrate::DatabaseTasks.db_configs_with_versions
186
-
187
- mapped_versions = schema_mapped_versions.merge(data_mapped_versions) do |_key, schema_db_configs, data_db_configs|
188
- schema_db_configs + data_db_configs
189
- end
190
-
191
- mapped_versions.sort.each do |version, db_configs|
192
- db_configs.each do |db_config|
193
- if is_data_migration = db_config.is_a?(DataMigrate::DatabaseConfigurationWrapper)
194
- db_config = db_config.db_config
195
- end
196
-
197
- DataMigrate::DatabaseTasks.with_temporary_connection(db_config) do
198
- if is_data_migration
199
- DataMigrate::DataMigrator.run(:up, DataMigrate::DatabaseTasks.data_migrations_path, version)
200
- else
201
- ActiveRecord::Tasks::DatabaseTasks.migrate(version)
202
- end
203
- end
204
- end
205
- end
206
- end
207
-
208
- def self.prepare_all_with_data
209
- seed = false
210
-
211
- each_current_configuration(env) do |db_config|
212
- next unless db_config.primary?
213
-
214
- with_temporary_pool(db_config) do
215
- begin
216
- database_initialized = migration_connection.schema_migration.table_exists?
217
- rescue ActiveRecord::NoDatabaseError
218
- create(db_config)
219
- retry
220
- end
221
-
222
- unless database_initialized
223
- if File.exist?(schema_dump_path(db_config))
224
- load_schema(db_config, ActiveRecord.schema_format, nil)
225
- load_schema_current(
226
- :ruby,
227
- ENV["DATA_SCHEMA"]
228
- )
229
- end
230
-
231
- seed = true
232
- end
233
-
234
- migrate_with_data
235
- if ActiveRecord.dump_schema_after_migration
236
- dump_schema(db_config)
237
- DataMigrate::Tasks::DataMigrateTasks.dump
238
- end
239
- end
240
- end
241
-
242
- load_seed if seed
243
- end
244
98
  end
245
99
  end
@@ -0,0 +1,22 @@
1
+ module DataMigrate
2
+ class LegacyMigrator
3
+ def initialize(migrations_paths = "db/data")
4
+ @migrations_paths = migrations_paths || "db/data"
5
+ end
6
+
7
+ def migrate
8
+ dates =
9
+ DataMigrate::DataMigrator.migrations(@migrations_paths).collect(&:version)
10
+ legacy = ActiveRecord::SchemaMigration.where(version: dates)
11
+ legacy.each do |v|
12
+ begin
13
+ version = v.version
14
+ puts "Creating #{version} in data schema"
15
+ DataMigrate::DataSchemaMigration.create(version: version)
16
+ rescue ActiveRecord::RecordNotUnique
17
+ nil
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -11,8 +11,7 @@ module DataMigrate
11
11
  migrations
12
12
  end
13
13
 
14
- data_migrator = DataMigrate::RailsHelper.data_migrator(:up, selected_migrations, DataMigrate::RailsHelper.schema_migration, DataMigrate::RailsHelper.internal_metadata, target_version)
15
- data_migrator.migrate
14
+ DataMigrator.new(:up, selected_migrations, target_version).migrate
16
15
  end
17
16
 
18
17
  def down(target_version = nil)
@@ -23,13 +22,11 @@ module DataMigrate
23
22
  migrations
24
23
  end
25
24
 
26
- data_migrator = DataMigrate::RailsHelper.data_migrator(:down, selected_migrations, DataMigrate::RailsHelper.schema_migration, DataMigrate::RailsHelper.internal_metadata, target_version)
27
- data_migrator.migrate
25
+ DataMigrator.new(:down, selected_migrations, target_version).migrate
28
26
  end
29
27
 
30
28
  def run(direction, target_version)
31
- data_migrator = DataMigrate::RailsHelper.data_migrator(direction, migrations, DataMigrate::RailsHelper.schema_migration, DataMigrate::RailsHelper.internal_metadata, target_version)
32
- data_migrator.run
29
+ DataMigrator.new(direction, migrations, target_version).run
33
30
  end
34
31
 
35
32
  def current_version
@@ -43,12 +40,12 @@ module DataMigrate
43
40
  end
44
41
 
45
42
  def migrations_status
46
- db_list = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
43
+ db_list = DataSchemaMigration.normalized_versions
47
44
 
48
45
  file_list = migration_files.map do |file|
49
46
  version, name, scope = parse_migration_filename(file)
50
47
  raise ActiveRecord::IllegalMigrationNameError.new(file) unless version
51
- version = DataMigrate::RailsHelper.schema_migration.normalize_migration_number(version)
48
+ version = ActiveRecord::SchemaMigration.normalize_migration_number(version)
52
49
  status = db_list.delete(version) ? "up" : "down"
53
50
  [status, version, (name + scope).humanize]
54
51
  end.compact
@@ -63,15 +60,15 @@ module DataMigrate
63
60
  private
64
61
 
65
62
  def get_all_versions
66
- if DataMigrate::RailsHelper.data_schema_migration.table_exists?
67
- DataMigrate::RailsHelper.data_schema_migration.normalized_versions.map(&:to_i)
63
+ if DataMigrate::DataSchemaMigration.table_exists?
64
+ DataSchemaMigration.normalized_versions.map(&:to_i)
68
65
  else
69
66
  []
70
67
  end
71
68
  end
72
69
 
73
70
  def move(direction, steps)
74
- migrator = DataMigrate::RailsHelper.data_migrator(direction, migrations)
71
+ migrator = DataMigrator.new(direction, migrations)
75
72
 
76
73
  if current_version != 0 && !migrator.current_migration
77
74
  raise ActiveRecord::UnknownMigrationVersionError.new(current_version)
@@ -26,7 +26,7 @@ module DataMigrate
26
26
 
27
27
  def initialize(connection)
28
28
  @connection = connection
29
- all_versions = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
29
+ all_versions = DataSchemaMigration.normalized_versions
30
30
 
31
31
  @version = begin
32
32
  all_versions.max
@@ -7,14 +7,14 @@ module DataMigrate
7
7
  def self.pending_schema_migrations
8
8
  all_migrations = DataMigrate::MigrationContext.new(migrations_paths).migrations
9
9
  sort_migrations(
10
- ActiveRecord::Migrator.new(:up, all_migrations, DataMigrate::RailsHelper.schema_migration, DataMigrate::RailsHelper.internal_metadata).
10
+ ActiveRecord::Migrator.new(:up, all_migrations, ActiveRecord::Base.connection.schema_migration).
11
11
  pending_migrations.
12
12
  map {|m| { version: m.version, kind: :schema }}
13
13
  )
14
14
  end
15
15
 
16
16
  def self.run(direction, migration_paths, version)
17
- ActiveRecord::MigrationContext.new(migration_paths, DataMigrate::RailsHelper.schema_migration).run(direction, version)
17
+ ActiveRecord::MigrationContext.new(migration_paths, ActiveRecord::Base.connection.schema_migration).run(direction, version)
18
18
  end
19
19
 
20
20
  def self.sort_migrations(set1, set2 = nil)
@@ -24,10 +24,9 @@ module DataMigrate
24
24
 
25
25
  def self.migrations_paths
26
26
  spec_name = DataMigrate.config.spec_name
27
- # The positional argument true is to include pre-release versions, such as 7.1.0.alpha
28
- if spec_name && Gem::Dependency.new("railties", ">= 7.0").match?("railties", Gem.loaded_specs["railties"].version, true)
27
+ if spec_name && Gem::Dependency.new("rails", "~> 7.0").match?("rails", Gem.loaded_specs["rails"].version)
29
28
  ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: spec_name).migrations_paths
30
- elsif spec_name && Gem::Dependency.new("railties", "~> 6.1").match?("railties", Gem.loaded_specs["railties"].version)
29
+ elsif spec_name && Gem::Dependency.new("rails", "~> 6.0").match?("rails", Gem.loaded_specs["rails"].version)
31
30
  ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, spec_name: spec_name).migrations_paths
32
31
  else
33
32
  Rails.application.config.paths["db/migrate"].to_a
@@ -24,11 +24,11 @@ module DataMigrate
24
24
  private
25
25
 
26
26
  def table_name
27
- DataMigrate::RailsHelper.data_schema_migration.table_name
27
+ DataMigrate::DataSchemaMigration.table_name
28
28
  end
29
29
 
30
30
  def output(stream)
31
- unless DataMigrate::RailsHelper.data_schema_migration.table_exists?
31
+ unless DataMigrate::DataSchemaMigration.table_exists?
32
32
  stream.puts "Data migrations table does not exist yet."
33
33
  return
34
34
  end
@@ -44,9 +44,9 @@ module DataMigrate
44
44
  end
45
45
 
46
46
  def database_name
47
- if Gem::Dependency.new("railties", "~> 7.0").match?("railties", Gem.loaded_specs["railties"].version)
47
+ if Gem::Dependency.new("rails", "~> 7.0").match?("rails", Gem.loaded_specs["rails"].version)
48
48
  ActiveRecord::Base.connection_db_config.configuration_hash[:database]
49
- elsif Gem::Dependency.new("railties", "~> 6.1").match?("railties", Gem.loaded_specs["railties"].version)
49
+ elsif Gem::Dependency.new("rails", "~> 6.0").match?("rails", Gem.loaded_specs["rails"].version)
50
50
  ActiveRecord::Base.connection_config[:database]
51
51
  end
52
52
  end
@@ -9,9 +9,9 @@ module DataMigrate
9
9
  @migrations_paths ||= DataMigrate.config.data_migrations_path
10
10
  end
11
11
 
12
- def dump
12
+ def dump(db_config)
13
13
  if dump_schema_after_migration?
14
- filename = DataMigrate::DatabaseTasks.schema_file
14
+ filename = DataMigrate::DatabaseTasks.dump_filename(spec_name(db_config), ActiveRecord::Base.schema_format)
15
15
  ActiveRecord::Base.establish_connection(DataMigrate.config.db_configuration) if DataMigrate.config.db_configuration
16
16
  File.open(filename, "w:utf-8") do |file|
17
17
  DataMigrate::SchemaDumper.dump(ActiveRecord::Base.connection, file)
@@ -22,7 +22,7 @@ module DataMigrate
22
22
  def migrate
23
23
  target_version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
24
24
 
25
- DataMigrate::DataMigrator.create_data_schema_table
25
+ DataMigrate::DataMigrator.assure_data_schema_table
26
26
  DataMigrate::MigrationContext.new(migrations_paths).migrate(target_version)
27
27
  end
28
28
 
@@ -44,15 +44,16 @@ module DataMigrate
44
44
  end
45
45
  end
46
46
 
47
- def status
48
- DataMigrate::StatusService.dump
47
+ def status(db_config)
48
+ puts "\ndatabase: #{spec_name(db_config)}\n\n"
49
+ DataMigrate::StatusService.dump(ActiveRecord::Base.connection)
49
50
  end
50
51
 
51
- def status_with_schema
52
+ def status_with_schema(db_config)
52
53
  db_list_data = ActiveRecord::Base.connection.select_values(
53
- "SELECT version FROM #{DataMigrate::RailsHelper.data_schema_migration.table_name}"
54
+ "SELECT version FROM #{DataMigrate::DataSchemaMigration.table_name}"
54
55
  )
55
- db_list_schema = DataMigrate::RailsHelper.schema_migration_versions
56
+ db_list_schema = ActiveRecord::SchemaMigration.all.pluck(:version)
56
57
  file_list = []
57
58
 
58
59
  Dir.foreach(File.join(Rails.root, migrations_paths)) do |file|
@@ -76,7 +77,7 @@ module DataMigrate
76
77
  file_list.sort!{|a,b| "#{a[1]}_#{a[3] == 'data' ? 1 : 0}" <=> "#{b[1]}_#{b[3] == 'data' ? 1 : 0}" }
77
78
 
78
79
  # output
79
- puts "\ndatabase: #{database_name}\n\n"
80
+ puts "\ndatabase: #{spec_name(db_config)}\n\n"
80
81
  puts "#{"Status".center(8)} #{"Type".center(8)} #{"Migration ID".ljust(14)} Migration Name"
81
82
  puts "-" * 60
82
83
  file_list.each do |file|
@@ -93,11 +94,11 @@ module DataMigrate
93
94
 
94
95
  private
95
96
 
96
- def database_name
97
- if Gem::Dependency.new("railties", "~> 7.0").match?("railties", Gem.loaded_specs["railties"].version)
98
- ActiveRecord::Base.connection_db_config.database
99
- elsif Gem::Dependency.new("railties", "~> 6.1").match?("railties", Gem.loaded_specs["railties"].version)
100
- ActiveRecord::Base.connection_config[:database]
97
+ def spec_name(db_config)
98
+ if Gem::Dependency.new("rails", "~> 7.0").match?("rails", Gem.loaded_specs["rails"].version)
99
+ db_config.name
100
+ elsif Gem::Dependency.new("rails", "~> 6.0").match?("rails", Gem.loaded_specs["rails"].version)
101
+ db_config.spec_name
101
102
  end
102
103
  end
103
104
  end
@@ -1,3 +1,3 @@
1
1
  module DataMigrate
2
- VERSION = "9.4.2".freeze
2
+ VERSION = "10.0.0.rc1".freeze
3
3
  end
data/lib/data_migrate.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require File.join(File.dirname(__FILE__), "data_migrate", "rails_helper")
4
3
  require File.join(File.dirname(__FILE__), "data_migrate", "data_migrator")
5
4
  require File.join(File.dirname(__FILE__), "data_migrate", "data_schema_migration")
6
5
  require File.join(File.dirname(__FILE__), "data_migrate", "data_schema")
@@ -10,9 +9,9 @@ require File.join(File.dirname(__FILE__), "data_migrate", "status_service")
10
9
  require File.join(File.dirname(__FILE__), "data_migrate", "migration_context")
11
10
  require File.join(File.dirname(__FILE__), "data_migrate", "railtie")
12
11
  require File.join(File.dirname(__FILE__), "data_migrate", "tasks/data_migrate_tasks")
12
+ require File.join(File.dirname(__FILE__), "data_migrate", "legacy_migrator")
13
13
  require File.join(File.dirname(__FILE__), "data_migrate", "config")
14
14
  require File.join(File.dirname(__FILE__), "data_migrate", "schema_migration")
15
- require File.join(File.dirname(__FILE__), "data_migrate", "database_configurations_wrapper")
16
15
 
17
16
  module DataMigrate
18
17
  def self.root
@@ -3,8 +3,7 @@
3
3
  require "spec_helper"
4
4
 
5
5
  describe DataMigrate::DataMigrator do
6
- let(:described_class) { DataMigrate::DataMigrator }
7
-
6
+ let(:subject) { DataMigrate::DataMigrator }
8
7
  let(:db_config) do
9
8
  {
10
9
  adapter: "sqlite3",
@@ -14,8 +13,8 @@ describe DataMigrate::DataMigrator do
14
13
 
15
14
  before do
16
15
  ActiveRecord::Base.establish_connection(db_config)
17
- DataMigrate::RailsHelper.schema_migration.create_table
18
- DataMigrate::RailsHelper.data_schema_migration.create_table
16
+ ::ActiveRecord::SchemaMigration.create_table
17
+ DataMigrate::DataSchemaMigration.create_table
19
18
  end
20
19
 
21
20
  after do
@@ -24,24 +23,22 @@ describe DataMigrate::DataMigrator do
24
23
  end
25
24
 
26
25
  describe ".load_migrated" do
27
- let(:migrator) { DataMigrate::RailsHelper.data_migrator(:up, []) }
28
-
29
26
  it "loads migrated versions" do
30
- DataMigrate::RailsHelper.data_schema_migration.create_version(20090000000000)
31
- DataMigrate::RailsHelper.schema_create_version(20100000000000)
32
- DataMigrate::RailsHelper.data_schema_migration.create_version(20110000000000)
33
- DataMigrate::RailsHelper.schema_create_version(20120000000000)
34
- migrated = migrator.load_migrated
27
+ DataMigrate::DataSchemaMigration.create(version: 20090000000000)
28
+ ::ActiveRecord::SchemaMigration.create(version: 20100000000000)
29
+ DataMigrate::DataSchemaMigration.create(version: 20110000000000)
30
+ ::ActiveRecord::SchemaMigration.create(version: 20120000000000)
31
+ migrated = subject.new(:up, []).load_migrated
35
32
  expect(migrated.count).to eq 2
36
33
  expect(migrated).to include 20090000000000
37
34
  expect(migrated).to include 20110000000000
38
35
  end
39
36
  end
40
37
 
41
- describe :create_data_schema_table do
38
+ describe :assure_data_schema_table do
42
39
  it "creates the data_migrations table" do
43
40
  ActiveRecord::Migration.drop_table("data_migrations") rescue nil
44
- described_class.create_data_schema_table
41
+ subject.assure_data_schema_table
45
42
  expect(
46
43
  ActiveRecord::Base.connection.table_exists?("data_migrations")
47
44
  ).to eq true
@@ -50,7 +47,7 @@ describe DataMigrate::DataMigrator do
50
47
 
51
48
  describe "#migrations_status" do
52
49
  it "returns all migrations statuses" do
53
- status = described_class.migrations_status
50
+ status = subject.migrations_status
54
51
  expect(status.length).to eq 2
55
52
  expect(status.first).to eq ["down", "20091231235959", "Some name"]
56
53
  expect(status.second).to eq ["down", "20171231235959", "Super update"]
@@ -60,19 +57,19 @@ describe DataMigrate::DataMigrator do
60
57
  describe :match do
61
58
  context "when the file does not match" do
62
59
  it "returns nil" do
63
- expect(described_class.match("not_a_data_migration_file")).to be_nil
60
+ expect(subject.match("not_a_data_migration_file")).to be_nil
64
61
  end
65
62
  end
66
63
 
67
64
  context "when the file doesn't end in .rb" do
68
65
  it "returns nil" do
69
- expect(described_class.match("20091231235959_some_name.rb.un~")).to be_nil
66
+ expect(subject.match("20091231235959_some_name.rb.un~")).to be_nil
70
67
  end
71
68
  end
72
69
 
73
70
  context "when the file matches" do
74
71
  it "returns a valid MatchData object" do
75
- match_data = described_class.match("20091231235959_some_name.rb")
72
+ match_data = subject.match("20091231235959_some_name.rb")
76
73
 
77
74
  expect(match_data[0]).to eq "20091231235959_some_name.rb"
78
75
  expect(match_data[1]).to eq "20091231235959"
@@ -1,33 +1,16 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe DataMigrate::DataSchemaMigration do
4
- if DataMigrate::RailsHelper.rails_version_equal_to_or_higher_than_7_1
5
- let(:connection) { double(:connection) }
6
- let(:subject) { DataMigrate::DataSchemaMigration.new(connection) }
7
-
8
- describe :table_name do
9
- it "returns correct table name" do
10
- expect(subject.table_name).to eq("data_migrations")
11
- end
12
- end
13
-
14
- describe :index_name do
15
- it "returns correct primary key name" do
16
- expect(subject.primary_key).to eq("version")
17
- end
18
- end
19
- else
20
- let(:subject) { DataMigrate::DataSchemaMigration }
21
- describe :table_name do
22
- it "returns correct table name" do
23
- expect(subject.table_name).to eq("data_migrations")
24
- end
4
+ let(:subject) { DataMigrate::DataSchemaMigration }
5
+ describe :table_name do
6
+ it "returns correct table name" do
7
+ expect(subject.table_name).to eq("data_migrations")
25
8
  end
9
+ end
26
10
 
27
- describe :index_name do
28
- it "returns correct primary key name" do
29
- expect(subject.primary_key).to eq("version")
30
- end
11
+ describe :index_name do
12
+ it "returns correct primary key name" do
13
+ expect(subject.primary_key).to eq("version")
31
14
  end
32
15
  end
33
16
  end
@@ -55,7 +55,7 @@ describe DataMigrate::Data do
55
55
 
56
56
  sql_select = <<-SQL
57
57
  SELECT version
58
- FROM #{DataMigrate::RailsHelper.data_schema_migration.table_name}
58
+ FROM #{DataMigrate::DataSchemaMigration.table_name}
59
59
  SQL
60
60
 
61
61
  db_list_data = ActiveRecord::Base.connection.