data_migrate 8.5.0 → 9.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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build.yml +34 -0
  3. data/.github/workflows/gempush.yml +6 -7
  4. data/.gitignore +3 -2
  5. data/Appraisals +5 -9
  6. data/Changelog.md +44 -0
  7. data/Gemfile.lock +148 -0
  8. data/README.md +9 -7
  9. data/data_migrate.gemspec +1 -10
  10. data/gemfiles/rails_6.1.gemfile +1 -1
  11. data/gemfiles/rails_6.1.gemfile.lock +227 -0
  12. data/gemfiles/rails_7.0.gemfile.lock +229 -0
  13. data/gemfiles/{rails_6.0.gemfile → rails_7.1.gemfile} +1 -1
  14. data/gemfiles/rails_7.1.gemfile.lock +262 -0
  15. data/lib/data_migrate/config.rb +1 -1
  16. data/lib/data_migrate/{data_migrator_five.rb → data_migrator.rb} +11 -34
  17. data/lib/data_migrate/data_schema.rb +2 -2
  18. data/lib/data_migrate/data_schema_migration.rb +24 -7
  19. data/lib/data_migrate/database_tasks.rb +37 -74
  20. data/lib/data_migrate/migration_context.rb +11 -8
  21. data/lib/data_migrate/rails_helper.rb +79 -0
  22. data/lib/data_migrate/schema_dumper.rb +1 -1
  23. data/lib/data_migrate/{schema_migration_six.rb → schema_migration.rb} +7 -4
  24. data/lib/data_migrate/{status_service_five.rb → status_service.rb} +14 -8
  25. data/lib/data_migrate/tasks/data_migrate_tasks.rb +16 -37
  26. data/lib/data_migrate/version.rb +1 -1
  27. data/lib/data_migrate.rb +4 -9
  28. data/spec/data_migrate/config_spec.rb +13 -10
  29. data/spec/data_migrate/data_migrator_spec.rb +25 -43
  30. data/spec/data_migrate/data_schema_migration_spec.rb +25 -8
  31. data/spec/data_migrate/data_spec.rb +1 -12
  32. data/spec/data_migrate/database_tasks_spec.rb +43 -76
  33. data/spec/data_migrate/migration.rb +11 -13
  34. data/spec/data_migrate/migration_context_spec.rb +20 -39
  35. data/spec/data_migrate/schema_dumper_spec.rb +11 -21
  36. data/spec/data_migrate/schema_migration_spec.rb +46 -41
  37. data/spec/data_migrate/status_service_spec.rb +29 -55
  38. data/spec/data_migrate/tasks/data_migrate_tasks_spec.rb +32 -67
  39. data/spec/db/data/20091231235959_some_name.rb +1 -1
  40. data/spec/db/data/20171231235959_super_update.rb +1 -1
  41. data/spec/db/migrate/{5.2/20131111111111_late_migration.rb → 20131111111111_late_migration.rb} +1 -1
  42. data/spec/db/migrate/{6.0/20202020202011_db_migration.rb → 20202020202011_db_migration.rb} +1 -1
  43. data/spec/spec_helper.rb +2 -8
  44. data/tasks/databases.rake +15 -13
  45. metadata +20 -34
  46. data/.ruby-version +0 -1
  47. data/.travis.yml +0 -14
  48. data/Gemfile.rails5.2 +0 -10
  49. data/gemfiles/rails_5.2.gemfile +0 -8
  50. data/lib/data_migrate/legacy_migrator.rb +0 -22
  51. data/lib/data_migrate/schema_migration_five.rb +0 -31
  52. data/spec/data_migrate/legacy_migrator_spec.rb +0 -50
  53. data/spec/db/6.0/20091231235959_some_name.rb +0 -9
  54. data/spec/db/6.0/20171231235959_super_update.rb +0 -9
  55. data/spec/db/data-6.0/20091231235959_some_name.rb +0 -9
  56. data/spec/db/data-6.0/20171231235959_super_update.rb +0 -9
  57. data/spec/db/data-6.0/20181128000207_excluded_file.rb.other_ext +0 -1
  58. data/spec/db/migrate/5.2/20202020202011_db_migration.rb +0 -9
  59. data/spec/db/migrate/6.0/20131111111111_late_migration.rb +0 -9
@@ -9,36 +9,23 @@ module DataMigrate
9
9
  extend ActiveRecord::Tasks::DatabaseTasks
10
10
 
11
11
  class << self
12
- def schema_file_type(_format = nil)
13
- "data_schema.rb"
12
+ def schema_file(_format = nil)
13
+ File.join(db_dir, "data_schema.rb")
14
14
  end
15
15
 
16
- def dump_filename(namespace, format = ActiveRecord::Base.schema_format)
17
- filename = if namespace == "primary"
18
- schema_file_type(format)
19
- else
20
- "#{namespace}_#{schema_file_type(format)}"
21
- end
22
-
23
- ENV["DATA_SCHEMA"] || File.join(schema_location, filename)
16
+ def schema_file_type(_format = nil)
17
+ "data_schema.rb"
24
18
  end
25
19
 
26
- def schema_dump_path(db_config, format = ActiveRecord.schema_format)
27
- return ENV["DATA_SCHEMA"] if ENV["DATA_SCHEMA"]
28
-
29
- filename = if db_config.primary?
20
+ # This method is removed in Rails 7.0
21
+ def dump_filename(spec_name, format = ActiveRecord::Base.schema_format)
22
+ filename = if spec_name == "primary"
30
23
  schema_file_type(format)
31
24
  else
32
- [db_config.name, schema_file_type(format)].join("_")
25
+ "#{spec_name}_#{schema_file_type(format)}"
33
26
  end
34
27
 
35
- return unless filename
36
-
37
- File.dirname(filename) == schema_location ? filename : File.join(schema_location, filename)
38
- end
39
-
40
- def schema_location
41
- db_dir
28
+ ENV["DATA_SCHEMA"] || File.join(db_dir, filename)
42
29
  end
43
30
 
44
31
  def check_schema_file(filename)
@@ -55,9 +42,8 @@ module DataMigrate
55
42
  )
56
43
  end
57
44
 
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)}
45
+ def sort_migrations(*migrations)
46
+ migrations.flatten.sort { |a, b| sort_string(a) <=> sort_string(b) }
61
47
  end
62
48
 
63
49
  def sort_string migration
@@ -81,15 +67,26 @@ module DataMigrate
81
67
  )
82
68
  end
83
69
  end
84
- end
85
70
 
86
- # This overrides ActiveRecord::Tasks::DatabaseTasks
87
- def self.schema_file(_format = nil)
88
- File.join(db_dir, "data_schema.rb")
71
+ def schema_dump_path(db_config, format = ActiveRecord.schema_format)
72
+ return ENV["DATA_SCHEMA"] if ENV["DATA_SCHEMA"]
73
+
74
+ # We only require a schema.rb file for the primary database
75
+ return unless db_config.primary?
76
+
77
+ File.join(File.dirname(ActiveRecord::Tasks::DatabaseTasks.schema_dump_path(db_config, format)), schema_file_type)
78
+ end
79
+
80
+ # Override this method from `ActiveRecord::Tasks::DatabaseTasks`
81
+ # to ensure that the sha saved in ar_internal_metadata table
82
+ # is from the original schema.rb file
83
+ def schema_sha1(file)
84
+ ActiveRecord::Tasks::DatabaseTasks.schema_dump_path(ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env, name: "primary"))
85
+ end
89
86
  end
90
87
 
91
88
  def self.forward(step = 1)
92
- DataMigrate::DataMigrator.assure_data_schema_table
89
+ DataMigrate::DataMigrator.create_data_schema_table
93
90
  migrations = pending_migrations.reverse.pop(step).reverse
94
91
  migrations.each do | pending_migration |
95
92
  if pending_migration[:kind] == :data
@@ -97,63 +94,29 @@ module DataMigrate
97
94
  DataMigrate::DataMigrator.run(:up, data_migrations_path, pending_migration[:version])
98
95
  elsif pending_migration[:kind] == :schema
99
96
  ActiveRecord::Migration.write("== %s %s" % ["Schema", "=" * 69])
100
- DataMigrate::SchemaMigration.run(:up, schema_migrations_path, pending_migration[:version])
97
+ DataMigrate::SchemaMigration.run(:up, DataMigrate::SchemaMigration.migrations_paths, pending_migration[:version])
101
98
  end
102
99
  end
103
100
  end
104
101
 
105
- def self.data_migrations_path
106
- DataMigrate.config.data_migrations_path
107
- end
108
-
109
- def self.schema_migrations_path
110
- "db/migrate/"
111
- end
112
-
113
- def self.pending_migrations
114
- sort_migrations(pending_schema_migrations, pending_data_migrations)
115
- end
116
-
117
102
  def self.pending_data_migrations
118
103
  data_migrations = DataMigrate::DataMigrator.migrations(data_migrations_path)
119
- sort_migrations(DataMigrate::DataMigrator.new(:up, data_migrations ).
120
- pending_migrations.map {|m| { version: m.version, name: m.name, kind: :data }})
104
+ data_migrator = DataMigrate::RailsHelper.data_migrator(:up, data_migrations)
105
+ sort_migrations(
106
+ data_migrator.pending_migrations.map { |m| { version: m.version, name: m.name, kind: :data } }
107
+ )
121
108
  end
122
109
 
123
110
  def self.pending_schema_migrations
124
111
  ::DataMigrate::SchemaMigration.pending_schema_migrations
125
112
  end
126
113
 
127
- def self.sort_migrations(set1, set2 = nil)
128
- migrations = set1 + (set2 || [])
129
- migrations.sort {|a, b| sort_string(a) <=> sort_string(b)}
130
- end
131
-
132
- def self.sort_string(migration)
133
- "#{migration[:version]}_#{migration[:kind] == :data ? 1 : 0}"
134
- end
135
-
136
114
  def self.past_migrations(sort = nil)
137
- sort = sort.downcase if sort
138
- db_list_data =
139
- if DataMigrate::DataSchemaMigration.table_exists?
140
- DataMigrate::DataSchemaMigration.normalized_versions.sort
141
- else
142
- []
143
- end
144
- db_list_schema = ActiveRecord::SchemaMigration.normalized_versions.sort.sort
145
- migrations = db_list_data.map do |d|
146
- {
147
- version: d.to_i, kind: :data
148
- }
149
- end +
150
- db_list_schema.map do |d|
151
- {
152
- version: d.to_i, kind: :schema
153
- }
154
- end
155
-
156
- sort == "asc" ? sort_migrations(migrations) : sort_migrations(migrations).reverse
115
+ data_versions = DataMigrate::RailsHelper.data_schema_migration.table_exists? ? DataMigrate::RailsHelper.data_schema_migration.normalized_versions : []
116
+ schema_versions = DataMigrate::RailsHelper.schema_migration.normalized_versions
117
+ migrations = data_versions.map { |v| { version: v.to_i, kind: :data } } + schema_versions.map { |v| { version: v.to_i, kind: :schema } }
118
+
119
+ sort&.downcase == "asc" ? sort_migrations(migrations) : sort_migrations(migrations).reverse
157
120
  end
158
121
  end
159
122
  end
@@ -11,7 +11,8 @@ module DataMigrate
11
11
  migrations
12
12
  end
13
13
 
14
- DataMigrator.new(:up, selected_migrations, target_version).migrate
14
+ data_migrator = DataMigrate::RailsHelper.data_migrator(:up, selected_migrations, DataMigrate::RailsHelper.schema_migration, DataMigrate::RailsHelper.internal_metadata, target_version)
15
+ data_migrator.migrate
15
16
  end
16
17
 
17
18
  def down(target_version = nil)
@@ -22,11 +23,13 @@ module DataMigrate
22
23
  migrations
23
24
  end
24
25
 
25
- DataMigrator.new(:down, selected_migrations, target_version).migrate
26
+ data_migrator = DataMigrate::RailsHelper.data_migrator(:down, selected_migrations, DataMigrate::RailsHelper.schema_migration, DataMigrate::RailsHelper.internal_metadata, target_version)
27
+ data_migrator.migrate
26
28
  end
27
29
 
28
30
  def run(direction, target_version)
29
- DataMigrator.new(direction, migrations, target_version).run
31
+ data_migrator = DataMigrate::RailsHelper.data_migrator(direction, migrations, DataMigrate::RailsHelper.schema_migration, DataMigrate::RailsHelper.internal_metadata, target_version)
32
+ data_migrator.run
30
33
  end
31
34
 
32
35
  def current_version
@@ -40,12 +43,12 @@ module DataMigrate
40
43
  end
41
44
 
42
45
  def migrations_status
43
- db_list = DataSchemaMigration.normalized_versions
46
+ db_list = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
44
47
 
45
48
  file_list = migration_files.map do |file|
46
49
  version, name, scope = parse_migration_filename(file)
47
50
  raise ActiveRecord::IllegalMigrationNameError.new(file) unless version
48
- version = ActiveRecord::SchemaMigration.normalize_migration_number(version)
51
+ version = DataMigrate::RailsHelper.schema_migration.normalize_migration_number(version)
49
52
  status = db_list.delete(version) ? "up" : "down"
50
53
  [status, version, (name + scope).humanize]
51
54
  end.compact
@@ -60,15 +63,15 @@ module DataMigrate
60
63
  private
61
64
 
62
65
  def get_all_versions
63
- if DataMigrate::DataSchemaMigration.table_exists?
64
- DataSchemaMigration.normalized_versions.map(&:to_i)
66
+ if DataMigrate::RailsHelper.data_schema_migration.table_exists?
67
+ DataMigrate::RailsHelper.data_schema_migration.normalized_versions.map(&:to_i)
65
68
  else
66
69
  []
67
70
  end
68
71
  end
69
72
 
70
73
  def move(direction, steps)
71
- migrator = DataMigrator.new(direction, migrations)
74
+ migrator = DataMigrate::RailsHelper.data_migrator(direction, migrations)
72
75
 
73
76
  if current_version != 0 && !migrator.current_migration
74
77
  raise ActiveRecord::UnknownMigrationVersionError.new(current_version)
@@ -0,0 +1,79 @@
1
+ module DataMigrate
2
+ class RailsHelper
3
+ class << self
4
+ def rails_version_equal_to_or_higher_than_7_1
5
+ return @equal_to_or_higher_than_7_1 if defined?(@equal_to_or_higher_than_7_1)
6
+
7
+ @equal_to_or_higher_than_7_1 = Gem::Dependency.new("railties", ">= 7.1.0.alpha").match?("railties", Gem.loaded_specs["railties"].version, true)
8
+ end
9
+
10
+ def rails_version_equal_to_or_higher_than_7_0
11
+ return @rails_version_equal_to_or_higher_than_7_0 if defined?(@rails_version_equal_to_or_higher_than_7_0)
12
+
13
+ @rails_version_equal_to_or_higher_than_7_0 = Gem::Dependency.new("railties", ">= 7.0").match?("railties", Gem.loaded_specs["railties"].version, true)
14
+ end
15
+
16
+ def internal_metadata
17
+ if rails_version_equal_to_or_higher_than_7_1
18
+ ActiveRecord::Base.connection.internal_metadata
19
+ else
20
+ ActiveRecord::InternalMetadata
21
+ end
22
+ end
23
+
24
+ def schema_migration
25
+ if rails_version_equal_to_or_higher_than_7_1
26
+ ActiveRecord::Base.connection.schema_migration
27
+ else
28
+ ActiveRecord::SchemaMigration
29
+ end
30
+ end
31
+
32
+ def schema_migration_versions
33
+ if rails_version_equal_to_or_higher_than_7_1
34
+ schema_migration.versions
35
+ else
36
+ schema_migration.all.pluck(:version)
37
+ end
38
+ end
39
+
40
+ def schema_create_version(version)
41
+ if rails_version_equal_to_or_higher_than_7_1
42
+ schema_migration.create_version(version)
43
+ else
44
+ schema_migration.create(version: version)
45
+ end
46
+ end
47
+
48
+ def data_schema_delete_version(version)
49
+ if rails_version_equal_to_or_higher_than_7_1
50
+ data_schema_migration.delete_version(version)
51
+ else
52
+ data_schema_migration.where(version: version.to_s).delete_all
53
+ end
54
+ end
55
+
56
+ def data_schema_migration
57
+ if rails_version_equal_to_or_higher_than_7_1
58
+ DataMigrate::DataSchemaMigration.new(ActiveRecord::Tasks::DatabaseTasks.migration_connection)
59
+ else
60
+ DataMigrate::DataSchemaMigration
61
+ end
62
+ end
63
+
64
+ def data_migrator(
65
+ direction,
66
+ migrations,
67
+ schema_migration = DataMigrate::RailsHelper.schema_migration,
68
+ internal_metadata = DataMigrate::RailsHelper.internal_metadata,
69
+ target_version = nil
70
+ )
71
+ if rails_version_equal_to_or_higher_than_7_1
72
+ DataMigrate::DataMigrator.new(direction, migrations, schema_migration, internal_metadata, target_version)
73
+ else
74
+ DataMigrate::DataMigrator.new(direction, migrations, schema_migration, target_version)
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -26,7 +26,7 @@ module DataMigrate
26
26
 
27
27
  def initialize(connection)
28
28
  @connection = connection
29
- all_versions = DataSchemaMigration.normalized_versions
29
+ all_versions = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
30
30
 
31
31
  @version = begin
32
32
  all_versions.max
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DataMigrate
2
4
  # Helper class to getting access to db schema
3
5
  # to allow data/schema combiation tasks
@@ -5,14 +7,14 @@ module DataMigrate
5
7
  def self.pending_schema_migrations
6
8
  all_migrations = DataMigrate::MigrationContext.new(migrations_paths).migrations
7
9
  sort_migrations(
8
- ActiveRecord::Migrator.new(:up, all_migrations, ActiveRecord::Base.connection.schema_migration).
10
+ ActiveRecord::Migrator.new(:up, all_migrations, DataMigrate::RailsHelper.schema_migration, DataMigrate::RailsHelper.internal_metadata).
9
11
  pending_migrations.
10
12
  map {|m| { version: m.version, kind: :schema }}
11
13
  )
12
14
  end
13
15
 
14
16
  def self.run(direction, migration_paths, version)
15
- ActiveRecord::MigrationContext.new(migration_paths, ActiveRecord::Base.connection.schema_migration).run(direction, version)
17
+ ActiveRecord::MigrationContext.new(migration_paths, DataMigrate::RailsHelper.schema_migration).run(direction, version)
16
18
  end
17
19
 
18
20
  def self.sort_migrations(set1, set2 = nil)
@@ -22,9 +24,10 @@ module DataMigrate
22
24
 
23
25
  def self.migrations_paths
24
26
  spec_name = DataMigrate.config.spec_name
25
- if spec_name && Rails.version > '6.1'
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)
26
29
  ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: spec_name).migrations_paths
27
- elsif spec_name
30
+ elsif spec_name && Gem::Dependency.new("railties", "~> 6.1").match?("railties", Gem.loaded_specs["railties"].version)
28
31
  ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, spec_name: spec_name).migrations_paths
29
32
  else
30
33
  Rails.application.config.paths["db/migrate"].to_a
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DataMigrate
2
4
  class StatusService
3
5
  class << self
@@ -22,22 +24,18 @@ module DataMigrate
22
24
  private
23
25
 
24
26
  def table_name
25
- DataMigrate::DataSchemaMigration.table_name
27
+ DataMigrate::RailsHelper.data_schema_migration.table_name
26
28
  end
27
29
 
28
30
  def output(stream)
29
- unless DataMigrate::DataSchemaMigration.table_exists?
31
+ unless DataMigrate::RailsHelper.data_schema_migration.table_exists?
30
32
  stream.puts "Data migrations table does not exist yet."
31
33
  return
32
34
  end
33
35
 
34
36
  # output
35
- if ActiveRecord.version >= Gem::Version.new('7.0')
36
- stream.puts "\ndatabase: #{ActiveRecord::Base.connection_db_config.configuration_hash[:database]}\n\n"
37
- else
38
- stream.puts "\ndatabase: #{ActiveRecord::Base.connection_config[:database]}\n\n"
39
- end
40
- stream.puts "#{'Status'.center(8)} #{'Migration ID'.ljust(14)} Migration Name"
37
+ stream.puts "\ndatabase: #{database_name}\n\n"
38
+ stream.puts "#{"Status".center(8)} #{"Migration ID".ljust(14)} Migration Name"
41
39
  stream.puts "-" * 50
42
40
  db_list.each do |status, version, name|
43
41
  stream.puts "#{status.center(8)} #{version.ljust(14)} #{name}"
@@ -45,6 +43,14 @@ module DataMigrate
45
43
  stream.puts
46
44
  end
47
45
 
46
+ def database_name
47
+ if Gem::Dependency.new("railties", "~> 7.0").match?("railties", Gem.loaded_specs["railties"].version)
48
+ ActiveRecord::Base.connection_db_config.configuration_hash[:database]
49
+ elsif Gem::Dependency.new("railties", "~> 6.1").match?("railties", Gem.loaded_specs["railties"].version)
50
+ ActiveRecord::Base.connection_config[:database]
51
+ end
52
+ end
53
+
48
54
  def db_list
49
55
  DataMigrate::DataMigrator.migrations_status
50
56
  end
@@ -1,12 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DataMigrate
2
4
  module Tasks
3
5
  module DataMigrateTasks
4
6
  extend self
5
7
 
6
- def schema_migrations_path
7
- File.join('db', 'migrate')
8
- end
9
-
10
8
  def migrations_paths
11
9
  @migrations_paths ||= DataMigrate.config.data_migrations_path
12
10
  end
@@ -24,13 +22,13 @@ module DataMigrate
24
22
  def migrate
25
23
  target_version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
26
24
 
27
- DataMigrate::DataMigrator.assure_data_schema_table
25
+ DataMigrate::DataMigrator.create_data_schema_table
28
26
  DataMigrate::MigrationContext.new(migrations_paths).migrate(target_version)
29
27
  end
30
28
 
31
29
  def abort_if_pending_migrations(migrations, message)
32
30
  if migrations.any?
33
- puts "You have #{migrations.size} pending #{migrations.size > 1 ? 'migrations:' : 'migration:'}"
31
+ puts "You have #{migrations.size} pending #{'migration'.pluralize(migrations.size)}:"
34
32
  migrations.each do |pending_migration|
35
33
  puts " %4d %s" % [pending_migration[:version], pending_migration[:name]]
36
34
  end
@@ -47,24 +45,14 @@ module DataMigrate
47
45
  end
48
46
 
49
47
  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)
48
+ DataMigrate::StatusService.dump
56
49
  end
57
50
 
58
51
  def status_with_schema
59
- config = connect_to_database
60
- return unless config
61
-
62
52
  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}"
53
+ "SELECT version FROM #{DataMigrate::RailsHelper.data_schema_migration.table_name}"
67
54
  )
55
+ db_list_schema = DataMigrate::RailsHelper.schema_migration_versions
68
56
  file_list = []
69
57
 
70
58
  Dir.foreach(File.join(Rails.root, migrations_paths)) do |file|
@@ -75,7 +63,9 @@ module DataMigrate
75
63
  end
76
64
  end
77
65
 
78
- Dir.foreach(File.join(Rails.root, schema_migrations_path)) do |file|
66
+ DataMigrate::SchemaMigration.migrations_paths.map do |path|
67
+ Dir.children(path) if Dir.exist?(path)
68
+ end.flatten.compact.each do |file|
79
69
  # only files matching "20091231235959_some_name.rb" pattern
80
70
  if match_data = /(\d{14})_(.+)\.rb/.match(file)
81
71
  status = db_list_schema.delete(match_data[1]) ? 'up' : 'down'
@@ -86,7 +76,7 @@ module DataMigrate
86
76
  file_list.sort!{|a,b| "#{a[1]}_#{a[3] == 'data' ? 1 : 0}" <=> "#{b[1]}_#{b[3] == 'data' ? 1 : 0}" }
87
77
 
88
78
  # output
89
- puts "\ndatabase: #{config['database']}\n\n"
79
+ puts "\ndatabase: #{database_name}\n\n"
90
80
  puts "#{"Status".center(8)} #{"Type".center(8)} #{"Migration ID".ljust(14)} Migration Name"
91
81
  puts "-" * 60
92
82
  file_list.each do |file|
@@ -103,23 +93,12 @@ module DataMigrate
103
93
 
104
94
  private
105
95
 
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
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]
121
101
  end
122
- config
123
102
  end
124
103
  end
125
104
  end
@@ -1,3 +1,3 @@
1
1
  module DataMigrate
2
- VERSION = "8.5.0".freeze
2
+ VERSION = "9.2.0".freeze
3
3
  end
data/lib/data_migrate.rb CHANGED
@@ -1,22 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require File.join(File.dirname(__FILE__), "data_migrate", "data_migrator_five")
3
+ require File.join(File.dirname(__FILE__), "data_migrate", "rails_helper")
4
+ require File.join(File.dirname(__FILE__), "data_migrate", "data_migrator")
4
5
  require File.join(File.dirname(__FILE__), "data_migrate", "data_schema_migration")
5
6
  require File.join(File.dirname(__FILE__), "data_migrate", "data_schema")
6
7
  require File.join(File.dirname(__FILE__), "data_migrate", "database_tasks")
7
8
  require File.join(File.dirname(__FILE__), "data_migrate", "schema_dumper")
8
- require File.join(File.dirname(__FILE__), "data_migrate", "status_service_five")
9
+ require File.join(File.dirname(__FILE__), "data_migrate", "status_service")
9
10
  require File.join(File.dirname(__FILE__), "data_migrate", "migration_context")
10
11
  require File.join(File.dirname(__FILE__), "data_migrate", "railtie")
11
12
  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
-
15
- if Rails::VERSION::MAJOR == 5
16
- require File.join(File.dirname(__FILE__), "data_migrate", "schema_migration_five")
17
- else
18
- require File.join(File.dirname(__FILE__), "data_migrate", "schema_migration_six")
19
- end
14
+ require File.join(File.dirname(__FILE__), "data_migrate", "schema_migration")
20
15
 
21
16
  module DataMigrate
22
17
  def self.root
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe DataMigrate::Config do
@@ -11,41 +13,42 @@ describe DataMigrate::Config do
11
13
 
12
14
  describe "data migration path configured" do
13
15
  subject { DataMigrate.config.data_migrations_path }
16
+ let(:data_migrations_path) { "db/awesome/" }
17
+
14
18
  before do
15
- @before = DataMigrate.config.data_migrations_path
19
+ @original_data_migrations_path = DataMigrate.config.data_migrations_path
20
+
16
21
  DataMigrate.configure do |config|
17
- config.data_migrations_path = "db/awesome/"
22
+ config.data_migrations_path = data_migrations_path
18
23
  end
19
24
  end
20
25
 
21
26
  after do
22
27
  DataMigrate.configure do |config|
23
- config.data_migrations_path = @before
28
+ config.data_migrations_path = @original_data_migrations_path
24
29
  end
25
30
  end
26
31
 
27
32
  it "equals the custom data migration path" do
28
- is_expected.to eq "db/awesome/"
33
+ is_expected.to eq(data_migrations_path)
29
34
  end
30
35
  end
31
36
 
32
37
  describe "data template path configured" do
33
38
  subject { DataMigrate.config.data_template_path }
39
+ let(:data_template_path) { File.join(DataMigrate.root, "generators", "data_migration", "templates", "data_migration.rb") }
34
40
 
35
41
  before do
36
- @before = DataMigrate.config.data_template_path
42
+ @original_data_migrations_path = DataMigrate.config.data_template_path
43
+
37
44
  DataMigrate.configure do |config|
38
45
  config.data_template_path = data_template_path
39
46
  end
40
47
  end
41
48
 
42
- let(:data_template_path) do
43
- File.join(DataMigrate.root, "generators", "data_migration", "templates", "data_migration.rb")
44
- end
45
-
46
49
  after do
47
50
  DataMigrate.configure do |config|
48
- config.data_template_path = @before
51
+ config.data_template_path = @original_data_migrations_path
49
52
  end
50
53
  end
51
54