data_migrate 6.8.0 → 8.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.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/.travis.yml +6 -9
- data/Appraisals +4 -8
- data/Changelog.md +12 -1
- data/Gemfile +0 -2
- data/Gemfile.rails5.2 +6 -1
- data/Gemfile.rails6.1 +6 -1
- data/data_migrate.gemspec +7 -1
- data/gemfiles/{rails_5.1.gemfile → rails_7.0.gemfile} +1 -1
- data/lib/data_migrate/database_tasks.rb +14 -0
- data/lib/data_migrate/schema_dumper.rb +0 -4
- data/lib/data_migrate/status_service_five.rb +5 -1
- data/lib/data_migrate/tasks/data_migrate_tasks.rb +12 -8
- data/lib/data_migrate/version.rb +1 -1
- data/lib/data_migrate.rb +10 -32
- data/lib/generators/data_migration/data_migration_generator.rb +1 -7
- data/lib/generators/data_migration/templates/data_migration.rb +2 -0
- data/spec/data_migrate/database_tasks_spec.rb +4 -9
- data/spec/data_migrate/migration_context_spec.rb +6 -14
- data/spec/data_migrate/schema_migration_spec.rb +21 -22
- data/spec/db/data/partial_schema/data_schema.rb +0 -1
- data/spec/db/data/partial_schema/test_data_schema.rb +0 -1
- data/spec/db/data/schema/data_schema.rb +0 -1
- data/spec/db/data/schema/test_data_schema.rb +0 -1
- data/spec/generators/data_migration/data_migration_generator_spec.rb +7 -7
- data/spec/spec_helper.rb +3 -13
- data/tasks/databases.rake +18 -32
- metadata +21 -23
- data/Gemfile.rails5 +0 -5
- data/Gemfile.rails5.1 +0 -5
- data/gemfiles/rails_4.1.gemfile +0 -7
- data/gemfiles/rails_4.2.gemfile +0 -9
- data/gemfiles/rails_5.0.gemfile +0 -8
- data/lib/data_migrate/data_migrator.rb +0 -101
- data/lib/data_migrate/migration.rb +0 -26
- data/lib/data_migrate/migration_five.rb +0 -26
- data/lib/data_migrate/schema_migration.rb +0 -31
- data/lib/data_migrate/status_service.rb +0 -65
- data/spec/db/5.0/20091231235959_some_name.rb +0 -9
- data/spec/db/5.0/20171231235959_super_update.rb +0 -9
- data/spec/db/migrate/4.2/20131111111111_late_migration.rb +0 -9
- data/spec/db/migrate/4.2/20202020202011_db_migration.rb +0 -9
- data/spec/db/migrate/5.0/20131111111111_late_migration.rb +0 -9
- data/spec/db/migrate/5.0/20202020202011_db_migration.rb +0 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: af0b932d1ca71e8bd2218c66a901c7f4075722fc716d4acf2ba20356cec069a7
|
|
4
|
+
data.tar.gz: cd0193ea16bac2ef7f21df588ff0c673e9e7706b99a55ae82452d0843c47b5d7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 20ddb8b51aa8f5fa817490baf8d016e594d15ed5a5f896fb26205fb629a2de29a5f9630a4992603d695219a8bf7d2b559c70968a6f6df6b0ec2529a9d388b6dd
|
|
7
|
+
data.tar.gz: 5f879b36def5b29a024d01144663887a03cf296f2a09a3b65962ffbdb1851fdd2c383f379ec548607fd1df414fc71b47283694ae86d53c251692fdce0380c76c
|
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.
|
|
1
|
+
2.7.5
|
data/.travis.yml
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
language: ruby
|
|
2
2
|
rvm:
|
|
3
|
-
- 2.
|
|
4
|
-
-
|
|
5
|
-
- 2.6.2
|
|
3
|
+
- 2.7
|
|
4
|
+
- 3.0
|
|
6
5
|
script: bundle exec rspec
|
|
7
6
|
gemfile:
|
|
8
|
-
- gemfiles/rails_5.1.gemfile
|
|
9
7
|
- gemfiles/rails_5.2.gemfile
|
|
10
8
|
- gemfiles/rails_6.0.gemfile
|
|
11
9
|
- gemfiles/rails_6.1.gemfile
|
|
12
|
-
|
|
10
|
+
- gemfiles/rails_7.0.gemfile
|
|
11
|
+
jobs:
|
|
13
12
|
exclude:
|
|
14
|
-
- rvm:
|
|
15
|
-
gemfile: gemfiles/
|
|
16
|
-
- rvm: 2.4.4
|
|
17
|
-
gemfile: gemfiles/rails_6.1.gemfile
|
|
13
|
+
- rvm: 3.0
|
|
14
|
+
gemfile: gemfiles/rails_5.2.gemfile
|
data/Appraisals
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
appraise 'rails-5.0' do
|
|
2
|
-
gem 'rails', '5.0.7.2'
|
|
3
|
-
end
|
|
4
|
-
|
|
5
|
-
appraise 'rails-5.1' do
|
|
6
|
-
gem 'rails', '5.1.7'
|
|
7
|
-
end
|
|
8
|
-
|
|
9
1
|
appraise 'rails-5.2' do
|
|
10
2
|
gem 'rails', '~> 5.2.3'
|
|
11
3
|
end
|
|
@@ -17,3 +9,7 @@ end
|
|
|
17
9
|
appraise 'rails-6.1' do
|
|
18
10
|
gem 'rails', '~> 6.1.0'
|
|
19
11
|
end
|
|
12
|
+
|
|
13
|
+
appraise 'rails-7.0' do
|
|
14
|
+
gem 'rails', '~> 7.0'
|
|
15
|
+
end
|
data/Changelog.md
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 8.0.0.rc1
|
|
4
|
+
Add support for Rails 7
|
|
5
|
+
Removed support for Rails versions below 5.2. Now are supported only versions Rails 5.2 and up
|
|
6
|
+
|
|
7
|
+
## 7.0.2
|
|
8
|
+
|
|
9
|
+
Remove magic comment in migration files [y-yagi](https://github.com/y-yagi)
|
|
10
|
+
User frozen string [jonnay](https://github.com/jonnay)
|
|
11
|
+
## 7.0.1
|
|
12
|
+
Use SchemaMigration.migrations_paths in main rake task [lewhit](https://github.com/lewhit)
|
|
13
|
+
|
|
3
14
|
## 6.8.0
|
|
4
15
|
|
|
5
16
|
Specify database name for migrations_paths [lewhit](https://github.com/lewhit)
|
|
6
|
-
|
|
17
|
+
## 6.7.0
|
|
7
18
|
|
|
8
19
|
Add configuration for which database name is to be used for database migrations [lewhit](https://github.com/lewhit)
|
|
9
20
|
Add tests for Rails 6.1 [lewhit](https://github.com/lewhit)
|
data/Gemfile
CHANGED
data/Gemfile.rails5.2
CHANGED
data/Gemfile.rails6.1
CHANGED
data/data_migrate.gemspec
CHANGED
|
@@ -15,7 +15,13 @@ Gem::Specification.new do |s|
|
|
|
15
15
|
|
|
16
16
|
s.rubyforge_project = "data_migrate"
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
%w[
|
|
19
|
+
activerecord
|
|
20
|
+
railties
|
|
21
|
+
].each do |rails_gem|
|
|
22
|
+
s.add_dependency(rails_gem, '>= 5.0')
|
|
23
|
+
end
|
|
24
|
+
|
|
19
25
|
s.add_development_dependency "appraisal"
|
|
20
26
|
s.add_development_dependency "rake"
|
|
21
27
|
s.add_development_dependency "rspec"
|
|
@@ -23,6 +23,20 @@ module DataMigrate
|
|
|
23
23
|
ENV["DATA_SCHEMA"] || File.join(schema_location, filename)
|
|
24
24
|
end
|
|
25
25
|
|
|
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?
|
|
30
|
+
schema_file_type(format)
|
|
31
|
+
else
|
|
32
|
+
[db_config.name, schema_file_type(format)].join("_")
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
return unless filename
|
|
36
|
+
|
|
37
|
+
File.dirname(filename) == schema_location ? filename : File.join(schema_location, filename)
|
|
38
|
+
end
|
|
39
|
+
|
|
26
40
|
def schema_location
|
|
27
41
|
db_dir
|
|
28
42
|
end
|
|
@@ -17,10 +17,6 @@ module DataMigrate
|
|
|
17
17
|
def dump(stream)
|
|
18
18
|
define_params = @version ? "version: #{@version}" : ""
|
|
19
19
|
|
|
20
|
-
if stream.respond_to?(:external_encoding) && stream.external_encoding
|
|
21
|
-
stream.puts "# encoding: #{stream.external_encoding.name}"
|
|
22
|
-
end
|
|
23
|
-
|
|
24
20
|
stream.puts "DataMigrate::Data.define(#{define_params})"
|
|
25
21
|
|
|
26
22
|
stream
|
|
@@ -32,7 +32,11 @@ module DataMigrate
|
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
# output
|
|
35
|
-
|
|
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
|
|
36
40
|
stream.puts "#{'Status'.center(8)} #{'Migration ID'.ljust(14)} Migration Name"
|
|
37
41
|
stream.puts "-" * 50
|
|
38
42
|
db_list.each do |status, version, name|
|
|
@@ -7,7 +7,7 @@ module DataMigrate
|
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
def dump
|
|
10
|
-
if
|
|
10
|
+
if dump_schema_after_migration?
|
|
11
11
|
filename = DataMigrate::DatabaseTasks.schema_file
|
|
12
12
|
ActiveRecord::Base.establish_connection(DataMigrate.config.db_configuration) if DataMigrate.config.db_configuration
|
|
13
13
|
File.open(filename, "w:utf-8") do |file|
|
|
@@ -17,14 +17,10 @@ module DataMigrate
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def migrate
|
|
20
|
-
DataMigrate::DataMigrator.assure_data_schema_table
|
|
21
20
|
target_version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
else
|
|
26
|
-
DataMigrate::DataMigrator.migrate(migrations_paths, ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
|
|
27
|
-
end
|
|
21
|
+
|
|
22
|
+
DataMigrate::DataMigrator.assure_data_schema_table
|
|
23
|
+
DataMigrate::MigrationContext.new(migrations_paths).migrate(target_version)
|
|
28
24
|
end
|
|
29
25
|
|
|
30
26
|
def abort_if_pending_migrations(migrations, message)
|
|
@@ -36,6 +32,14 @@ module DataMigrate
|
|
|
36
32
|
abort message
|
|
37
33
|
end
|
|
38
34
|
end
|
|
35
|
+
|
|
36
|
+
def dump_schema_after_migration?
|
|
37
|
+
if ActiveRecord.respond_to?(:dump_schema_after_migration)
|
|
38
|
+
ActiveRecord.dump_schema_after_migration
|
|
39
|
+
else
|
|
40
|
+
ActiveRecord::Base.dump_schema_after_migration
|
|
41
|
+
end
|
|
42
|
+
end
|
|
39
43
|
end
|
|
40
44
|
end
|
|
41
45
|
end
|
data/lib/data_migrate/version.rb
CHANGED
data/lib/data_migrate.rb
CHANGED
|
@@ -1,44 +1,22 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
elsif Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR == 2
|
|
6
|
-
require File.join(File.dirname(__FILE__), "data_migrate", "data_migrator_five")
|
|
7
|
-
else
|
|
8
|
-
require File.join(File.dirname(__FILE__), "data_migrate", "data_migrator")
|
|
9
|
-
end
|
|
10
|
-
require File.join(File.dirname(__FILE__), "data_migrate",
|
|
11
|
-
"data_schema_migration")
|
|
3
|
+
require File.join(File.dirname(__FILE__), "data_migrate", "data_migrator_five")
|
|
4
|
+
require File.join(File.dirname(__FILE__), "data_migrate", "data_schema_migration")
|
|
12
5
|
require File.join(File.dirname(__FILE__), "data_migrate", "data_schema")
|
|
13
6
|
require File.join(File.dirname(__FILE__), "data_migrate", "database_tasks")
|
|
14
7
|
require File.join(File.dirname(__FILE__), "data_migrate", "schema_dumper")
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
require File.join(File.dirname(__FILE__), "data_migrate", "schema_migration_six")
|
|
18
|
-
elsif Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR == 2
|
|
19
|
-
require File.join(File.dirname(__FILE__), "data_migrate", "status_service_five")
|
|
20
|
-
require File.join(File.dirname(__FILE__), "data_migrate", "schema_migration_five")
|
|
21
|
-
else
|
|
22
|
-
require File.join(File.dirname(__FILE__), "data_migrate", "status_service")
|
|
23
|
-
require File.join(File.dirname(__FILE__), "data_migrate", "schema_migration")
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
if Rails::VERSION::MAJOR == 6
|
|
27
|
-
require File.join(File.dirname(__FILE__), "data_migrate", "migration_context")
|
|
28
|
-
# require File.join(File.dirname(__FILE__), "data_migrate", "migration_five")
|
|
29
|
-
elsif Rails::VERSION::MAJOR == 5
|
|
30
|
-
if Rails::VERSION::MINOR == 2
|
|
31
|
-
require File.join(File.dirname(__FILE__), "data_migrate", "migration_context")
|
|
32
|
-
else
|
|
33
|
-
require File.join(File.dirname(__FILE__), "data_migrate", "migration_five")
|
|
34
|
-
end
|
|
35
|
-
else
|
|
36
|
-
require File.join(File.dirname(__FILE__), "data_migrate", "migration")
|
|
37
|
-
end
|
|
8
|
+
require File.join(File.dirname(__FILE__), "data_migrate", "status_service_five")
|
|
9
|
+
require File.join(File.dirname(__FILE__), "data_migrate", "migration_context")
|
|
38
10
|
require File.join(File.dirname(__FILE__), "data_migrate", "railtie")
|
|
39
11
|
require File.join(File.dirname(__FILE__), "data_migrate", "tasks/data_migrate_tasks")
|
|
40
12
|
require File.join(File.dirname(__FILE__), "data_migrate", "legacy_migrator")
|
|
41
13
|
require File.join(File.dirname(__FILE__), "data_migrate", "config")
|
|
42
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
|
|
20
|
+
|
|
43
21
|
module DataMigrate
|
|
44
22
|
end
|
|
@@ -27,13 +27,7 @@ module DataMigrate
|
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def migration_base_class_name
|
|
30
|
-
|
|
31
|
-
"ActiveRecord::Migration[#{ActiveRecord::Migration.current_version}]"
|
|
32
|
-
elsif ActiveRecord.version >= Gem::Version.new("5.2")
|
|
33
|
-
"DataMigrate::MigrationContext"
|
|
34
|
-
else
|
|
35
|
-
"ActiveRecord::Migration"
|
|
36
|
-
end
|
|
30
|
+
"ActiveRecord::Migration[#{ActiveRecord::Migration.current_version}]"
|
|
37
31
|
end
|
|
38
32
|
|
|
39
33
|
def data_migrations_file_path
|
|
@@ -5,16 +5,10 @@ require "spec_helper"
|
|
|
5
5
|
describe DataMigrate::DatabaseTasks do
|
|
6
6
|
let(:subject) { DataMigrate::DatabaseTasks }
|
|
7
7
|
let(:migration_path) {
|
|
8
|
-
if Rails::VERSION::MAJOR ==
|
|
9
|
-
"spec/db/migrate/
|
|
10
|
-
elsif Rails::VERSION::MAJOR == 5
|
|
11
|
-
if Rails::VERSION::MINOR == 2
|
|
12
|
-
"spec/db/migrate/5.2"
|
|
13
|
-
else
|
|
14
|
-
"spec/db/migrate/5.0"
|
|
15
|
-
end
|
|
8
|
+
if Rails::VERSION::MAJOR == 5
|
|
9
|
+
"spec/db/migrate/5.2"
|
|
16
10
|
else
|
|
17
|
-
"spec/db/migrate/
|
|
11
|
+
"spec/db/migrate/6.0"
|
|
18
12
|
end
|
|
19
13
|
}
|
|
20
14
|
let(:data_migrations_path) {
|
|
@@ -32,6 +26,7 @@ describe DataMigrate::DatabaseTasks do
|
|
|
32
26
|
# Rails.application.config.paths["db"].first
|
|
33
27
|
# @see https://github.com/rails/rails/blob/a7d49ef78c36df2d1ca876451f30915ada1079a5/activerecord/lib/active_record/tasks/database_tasks.rb#L54
|
|
34
28
|
allow(subject).to receive(:db_dir).and_return("db")
|
|
29
|
+
allow(ActiveRecord::Tasks::DatabaseTasks).to receive(:db_dir).and_return("db")
|
|
35
30
|
end
|
|
36
31
|
|
|
37
32
|
before do
|
|
@@ -2,28 +2,20 @@ require "spec_helper"
|
|
|
2
2
|
|
|
3
3
|
describe DataMigrate::DataMigrator do
|
|
4
4
|
let(:context) {
|
|
5
|
-
if (Rails::VERSION::MAJOR ==
|
|
6
|
-
DataMigrate::MigrationContext.new("spec/db/data-6.0")
|
|
7
|
-
else
|
|
5
|
+
if (Rails::VERSION::MAJOR == 5)
|
|
8
6
|
DataMigrate::MigrationContext.new("spec/db/data")
|
|
7
|
+
else
|
|
8
|
+
DataMigrate::MigrationContext.new("spec/db/data-6.0")
|
|
9
9
|
end
|
|
10
10
|
}
|
|
11
11
|
let(:schema_context) {
|
|
12
|
-
if (Rails::VERSION::MAJOR ==
|
|
13
|
-
ActiveRecord::MigrationContext.new("spec/db/migrate/6.0", ActiveRecord::Base.connection.schema_migration)
|
|
14
|
-
else
|
|
12
|
+
if (Rails::VERSION::MAJOR == 5)
|
|
15
13
|
ActiveRecord::MigrationContext.new("spec/db/migrate/5.2")
|
|
14
|
+
else
|
|
15
|
+
ActiveRecord::MigrationContext.new("spec/db/migrate/6.0", ActiveRecord::Base.connection.schema_migration)
|
|
16
16
|
end
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
before do
|
|
20
|
-
unless (Rails::VERSION::MAJOR == 5 and
|
|
21
|
-
Rails::VERSION::MINOR == 2) ||
|
|
22
|
-
Rails::VERSION::MAJOR == 6
|
|
23
|
-
skip("Tests are only applicable for Rails 5.2")
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
19
|
after do
|
|
28
20
|
begin
|
|
29
21
|
ActiveRecord::Migration.drop_table("data_migrations")
|
|
@@ -4,16 +4,10 @@ require "spec_helper"
|
|
|
4
4
|
|
|
5
5
|
describe DataMigrate::SchemaMigration do
|
|
6
6
|
let(:migration_path) {
|
|
7
|
-
if Rails::VERSION::MAJOR ==
|
|
8
|
-
"spec/db/migrate/
|
|
9
|
-
elsif Rails::VERSION::MAJOR == 5
|
|
10
|
-
if Rails::VERSION::MINOR == 2
|
|
11
|
-
"spec/db/migrate/5.2"
|
|
12
|
-
else
|
|
13
|
-
"spec/db/migrate/5.0"
|
|
14
|
-
end
|
|
7
|
+
if Rails::VERSION::MAJOR == 5
|
|
8
|
+
"spec/db/migrate/5.2"
|
|
15
9
|
else
|
|
16
|
-
"spec/db/migrate/
|
|
10
|
+
"spec/db/migrate/6.0"
|
|
17
11
|
end
|
|
18
12
|
}
|
|
19
13
|
|
|
@@ -72,22 +66,27 @@ describe DataMigrate::SchemaMigration do
|
|
|
72
66
|
if Rails.version > '6'
|
|
73
67
|
describe :migrations_paths do
|
|
74
68
|
context 'when a db_name is configured' do
|
|
69
|
+
let(:config) { double(:config) }
|
|
75
70
|
let(:paths) { ['spec/db/migrate/6.0', 'spec/db/components/migrate/6.0'] }
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
config.spec_name = 'primary'
|
|
82
|
-
end
|
|
71
|
+
let(:config_options) do
|
|
72
|
+
if Rails.version > '6.1'
|
|
73
|
+
{ env_name: 'test', name: 'primary' }
|
|
74
|
+
else
|
|
75
|
+
{ env_name: 'test', spec_name: 'primary' }
|
|
83
76
|
end
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
before do
|
|
80
|
+
DataMigrate.configure do |config|
|
|
81
|
+
config.spec_name = 'primary'
|
|
90
82
|
end
|
|
83
|
+
|
|
84
|
+
allow(ActiveRecord::Base.configurations)
|
|
85
|
+
.to receive(:configs_for)
|
|
86
|
+
.with(config_options)
|
|
87
|
+
.and_return(config)
|
|
88
|
+
|
|
89
|
+
allow(config).to receive(:migrations_paths).and_return(paths)
|
|
91
90
|
end
|
|
92
91
|
|
|
93
92
|
it 'lists schema migration paths' do
|
|
@@ -8,8 +8,12 @@ describe DataMigrate::Generators::DataMigrationGenerator do
|
|
|
8
8
|
describe :next_migration_number do
|
|
9
9
|
it "next migration" do
|
|
10
10
|
Timecop.freeze("2016-12-03 22:15:26 -0800") do
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
if ActiveRecord.version >= Gem::Version.new('7.0')
|
|
12
|
+
expect(ActiveRecord).to receive(:timestamped_migrations) { true }
|
|
13
|
+
else
|
|
14
|
+
expect(ActiveRecord::Base).to receive(:timestamped_migrations) { true }
|
|
15
|
+
end
|
|
16
|
+
expect(subject.next_migration_number(1).to_s).to eq("20161204061526")
|
|
13
17
|
end
|
|
14
18
|
end
|
|
15
19
|
end
|
|
@@ -17,11 +21,7 @@ describe DataMigrate::Generators::DataMigrationGenerator do
|
|
|
17
21
|
describe :migration_base_class_name do
|
|
18
22
|
let(:subject) { DataMigrate::Generators::DataMigrationGenerator.new(['my_migration']) }
|
|
19
23
|
it "returns the correct base class name" do
|
|
20
|
-
|
|
21
|
-
expect(subject.send(:migration_base_class_name)).to eq("ActiveRecord::Migration[#{ActiveRecord::Migration.current_version}]")
|
|
22
|
-
else
|
|
23
|
-
expect(subject.send(:migration_base_class_name)).to eq('ActiveRecord::Migration')
|
|
24
|
-
end
|
|
24
|
+
expect(subject.send(:migration_base_class_name)).to eq("ActiveRecord::Migration[#{ActiveRecord::Migration.current_version}]")
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
27
|
|
data/spec/spec_helper.rb
CHANGED
|
@@ -20,23 +20,13 @@ RSpec.configure do |config|
|
|
|
20
20
|
if example.metadata[:no_override]
|
|
21
21
|
else
|
|
22
22
|
@prev_data_migrations_path = DataMigrate.config.data_migrations_path
|
|
23
|
-
if Rails::VERSION::MAJOR ==
|
|
23
|
+
if Rails::VERSION::MAJOR == 5
|
|
24
24
|
DataMigrate.configure do |config|
|
|
25
|
-
config.data_migrations_path = "spec/db/
|
|
26
|
-
end
|
|
27
|
-
elsif Rails::VERSION::MAJOR == 5
|
|
28
|
-
if Rails::VERSION::MINOR == 2
|
|
29
|
-
DataMigrate.configure do |config|
|
|
30
|
-
config.data_migrations_path = "spec/db/data"
|
|
31
|
-
end
|
|
32
|
-
else
|
|
33
|
-
DataMigrate.configure do |config|
|
|
34
|
-
config.data_migrations_path = "spec/db/5.0"
|
|
35
|
-
end
|
|
25
|
+
config.data_migrations_path = "spec/db/data"
|
|
36
26
|
end
|
|
37
27
|
else
|
|
38
28
|
DataMigrate.configure do |config|
|
|
39
|
-
config.data_migrations_path = "spec/db/
|
|
29
|
+
config.data_migrations_path = "spec/db/6.0"
|
|
40
30
|
end
|
|
41
31
|
end
|
|
42
32
|
end
|
data/tasks/databases.rake
CHANGED
|
@@ -46,17 +46,7 @@ namespace :db do
|
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
migrations.each do |migration|
|
|
49
|
-
|
|
50
|
-
ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71])
|
|
51
|
-
DataMigrate::DataMigrator.run(migration[:direction], data_migrations_path, 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
|
|
49
|
+
run_migration(migration, migration[:direction])
|
|
60
50
|
end
|
|
61
51
|
|
|
62
52
|
Rake::Task["db:_dump"].invoke
|
|
@@ -91,13 +81,7 @@ namespace :db do
|
|
|
91
81
|
end
|
|
92
82
|
|
|
93
83
|
migrations.each do |migration|
|
|
94
|
-
|
|
95
|
-
ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71])
|
|
96
|
-
DataMigrate::DataMigrator.run(:up, data_migrations_path, migration[:version])
|
|
97
|
-
else
|
|
98
|
-
ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69])
|
|
99
|
-
DataMigrate::SchemaMigration.run(:up, "db/migrate/", migration[:version])
|
|
100
|
-
end
|
|
84
|
+
run_migration(migration, :up)
|
|
101
85
|
end
|
|
102
86
|
|
|
103
87
|
Rake::Task["db:_dump"].invoke
|
|
@@ -119,13 +103,7 @@ namespace :db do
|
|
|
119
103
|
end
|
|
120
104
|
|
|
121
105
|
migrations.each do |migration|
|
|
122
|
-
|
|
123
|
-
ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71])
|
|
124
|
-
DataMigrate::DataMigrator.run(:down, data_migrations_path, migration[:version])
|
|
125
|
-
else
|
|
126
|
-
ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69])
|
|
127
|
-
DataMigrate::SchemaMigration.run(:down, "db/migrate/", migration[:version])
|
|
128
|
-
end
|
|
106
|
+
run_migration(migration, :down)
|
|
129
107
|
end
|
|
130
108
|
|
|
131
109
|
Rake::Task["db:_dump"].invoke
|
|
@@ -189,13 +167,7 @@ namespace :db do
|
|
|
189
167
|
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
|
|
190
168
|
assure_data_schema_table
|
|
191
169
|
past_migrations[0..(step - 1)].each do | past_migration |
|
|
192
|
-
|
|
193
|
-
ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71])
|
|
194
|
-
DataMigrate::DataMigrator.run(:down, data_migrations_path, past_migration[:version])
|
|
195
|
-
elsif past_migration[:kind] == :schema
|
|
196
|
-
ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69])
|
|
197
|
-
DataMigrate::SchemaMigration.run(:down, "db/migrate/", past_migration[:version])
|
|
198
|
-
end
|
|
170
|
+
run_migration(past_migration, :down)
|
|
199
171
|
end
|
|
200
172
|
|
|
201
173
|
Rake::Task["db:_dump"].invoke
|
|
@@ -412,3 +384,17 @@ end
|
|
|
412
384
|
def data_migrations_path
|
|
413
385
|
DataMigrate.config.data_migrations_path
|
|
414
386
|
end
|
|
387
|
+
|
|
388
|
+
def run_migration(migration, direction)
|
|
389
|
+
if migration[:kind] == :data
|
|
390
|
+
ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71])
|
|
391
|
+
DataMigrate::DataMigrator.run(direction, data_migrations_path, migration[:version])
|
|
392
|
+
else
|
|
393
|
+
ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69])
|
|
394
|
+
DataMigrate::SchemaMigration.run(
|
|
395
|
+
direction,
|
|
396
|
+
DataMigrate::SchemaMigration.migrations_paths,
|
|
397
|
+
migration[:version]
|
|
398
|
+
)
|
|
399
|
+
end
|
|
400
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: data_migrate
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 8.0.0.rc1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andrew J Vargo
|
|
@@ -10,10 +10,24 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date:
|
|
13
|
+
date: 2022-01-18 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
|
-
name:
|
|
16
|
+
name: activerecord
|
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
|
18
|
+
requirements:
|
|
19
|
+
- - ">="
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '5.0'
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
requirements:
|
|
26
|
+
- - ">="
|
|
27
|
+
- !ruby/object:Gem::Version
|
|
28
|
+
version: '5.0'
|
|
29
|
+
- !ruby/object:Gem::Dependency
|
|
30
|
+
name: railties
|
|
17
31
|
requirement: !ruby/object:Gem::Requirement
|
|
18
32
|
requirements:
|
|
19
33
|
- - ">="
|
|
@@ -188,40 +202,30 @@ files:
|
|
|
188
202
|
- Appraisals
|
|
189
203
|
- Changelog.md
|
|
190
204
|
- Gemfile
|
|
191
|
-
- Gemfile.rails5
|
|
192
|
-
- Gemfile.rails5.1
|
|
193
205
|
- Gemfile.rails5.2
|
|
194
206
|
- Gemfile.rails6.1
|
|
195
207
|
- LICENSE
|
|
196
208
|
- README.md
|
|
197
209
|
- Rakefile
|
|
198
210
|
- data_migrate.gemspec
|
|
199
|
-
- gemfiles/rails_4.1.gemfile
|
|
200
|
-
- gemfiles/rails_4.2.gemfile
|
|
201
|
-
- gemfiles/rails_5.0.gemfile
|
|
202
|
-
- gemfiles/rails_5.1.gemfile
|
|
203
211
|
- gemfiles/rails_5.2.gemfile
|
|
204
212
|
- gemfiles/rails_6.0.gemfile
|
|
205
213
|
- gemfiles/rails_6.1.gemfile
|
|
214
|
+
- gemfiles/rails_7.0.gemfile
|
|
206
215
|
- lib/capistrano/data_migrate.rb
|
|
207
216
|
- lib/capistrano/data_migrate/migrate.rb
|
|
208
217
|
- lib/data_migrate.rb
|
|
209
218
|
- lib/data_migrate/config.rb
|
|
210
|
-
- lib/data_migrate/data_migrator.rb
|
|
211
219
|
- lib/data_migrate/data_migrator_five.rb
|
|
212
220
|
- lib/data_migrate/data_schema.rb
|
|
213
221
|
- lib/data_migrate/data_schema_migration.rb
|
|
214
222
|
- lib/data_migrate/database_tasks.rb
|
|
215
223
|
- lib/data_migrate/legacy_migrator.rb
|
|
216
|
-
- lib/data_migrate/migration.rb
|
|
217
224
|
- lib/data_migrate/migration_context.rb
|
|
218
|
-
- lib/data_migrate/migration_five.rb
|
|
219
225
|
- lib/data_migrate/railtie.rb
|
|
220
226
|
- lib/data_migrate/schema_dumper.rb
|
|
221
|
-
- lib/data_migrate/schema_migration.rb
|
|
222
227
|
- lib/data_migrate/schema_migration_five.rb
|
|
223
228
|
- lib/data_migrate/schema_migration_six.rb
|
|
224
|
-
- lib/data_migrate/status_service.rb
|
|
225
229
|
- lib/data_migrate/status_service_five.rb
|
|
226
230
|
- lib/data_migrate/tasks/data_migrate_tasks.rb
|
|
227
231
|
- lib/data_migrate/version.rb
|
|
@@ -242,8 +246,6 @@ files:
|
|
|
242
246
|
- spec/data_migrate/schema_migration_spec.rb
|
|
243
247
|
- spec/data_migrate/status_service_spec.rb
|
|
244
248
|
- spec/data_migrate/tasks/data_migrate_tasks_spec.rb
|
|
245
|
-
- spec/db/5.0/20091231235959_some_name.rb
|
|
246
|
-
- spec/db/5.0/20171231235959_super_update.rb
|
|
247
249
|
- spec/db/6.0/20091231235959_some_name.rb
|
|
248
250
|
- spec/db/6.0/20171231235959_super_update.rb
|
|
249
251
|
- spec/db/data-6.0/20091231235959_some_name.rb
|
|
@@ -256,10 +258,6 @@ files:
|
|
|
256
258
|
- spec/db/data/partial_schema/test_data_schema.rb
|
|
257
259
|
- spec/db/data/schema/data_schema.rb
|
|
258
260
|
- spec/db/data/schema/test_data_schema.rb
|
|
259
|
-
- spec/db/migrate/4.2/20131111111111_late_migration.rb
|
|
260
|
-
- spec/db/migrate/4.2/20202020202011_db_migration.rb
|
|
261
|
-
- spec/db/migrate/5.0/20131111111111_late_migration.rb
|
|
262
|
-
- spec/db/migrate/5.0/20202020202011_db_migration.rb
|
|
263
261
|
- spec/db/migrate/5.2/20131111111111_late_migration.rb
|
|
264
262
|
- spec/db/migrate/5.2/20202020202011_db_migration.rb
|
|
265
263
|
- spec/db/migrate/6.0/20131111111111_late_migration.rb
|
|
@@ -289,11 +287,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
289
287
|
version: '0'
|
|
290
288
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
291
289
|
requirements:
|
|
292
|
-
- - "
|
|
290
|
+
- - ">"
|
|
293
291
|
- !ruby/object:Gem::Version
|
|
294
|
-
version:
|
|
292
|
+
version: 1.3.1
|
|
295
293
|
requirements: []
|
|
296
|
-
rubygems_version: 3.2.
|
|
294
|
+
rubygems_version: 3.2.32
|
|
297
295
|
signing_key:
|
|
298
296
|
specification_version: 4
|
|
299
297
|
summary: Rake tasks to migrate data alongside schema changes.
|
data/Gemfile.rails5
DELETED
data/Gemfile.rails5.1
DELETED
data/gemfiles/rails_4.1.gemfile
DELETED
data/gemfiles/rails_4.2.gemfile
DELETED
data/gemfiles/rails_5.0.gemfile
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "active_record"
|
|
4
|
-
|
|
5
|
-
module DataMigrate
|
|
6
|
-
class DataMigrator < ActiveRecord::Migrator
|
|
7
|
-
|
|
8
|
-
def record_version_state_after_migrating(version)
|
|
9
|
-
if down?
|
|
10
|
-
migrated.delete(version)
|
|
11
|
-
DataMigrate::DataSchemaMigration.where(version: version.to_s).delete_all
|
|
12
|
-
else
|
|
13
|
-
migrated << version
|
|
14
|
-
DataMigrate::DataSchemaMigration.create!(version: version.to_s)
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def load_migrated(connection = ActiveRecord::Base.connection)
|
|
19
|
-
self.class.get_all_versions(connection)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
class << self
|
|
23
|
-
alias_method :migrations_status_orig, :migrations_status
|
|
24
|
-
|
|
25
|
-
def migrations_status
|
|
26
|
-
migrations_status_orig([DataMigrate.config.data_migrations_path])
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def current_version(connection = ActiveRecord::Base.connection)
|
|
30
|
-
get_all_versions(connection).max || 0
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def get_all_versions(connection = ActiveRecord::Base.connection)
|
|
34
|
-
if table_exists?(connection, schema_migrations_table_name)
|
|
35
|
-
DataMigrate::DataSchemaMigration.all.map { |x| x.version.to_i }.sort
|
|
36
|
-
else
|
|
37
|
-
[]
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def schema_migrations_table_name
|
|
42
|
-
ActiveRecord::Base.table_name_prefix + "data_migrations" +
|
|
43
|
-
ActiveRecord::Base.table_name_suffix
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def migrations_path
|
|
47
|
-
DataMigrate.config.data_migrations_path
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
##
|
|
51
|
-
# Provides the full migrations_path filepath
|
|
52
|
-
# @return (String)
|
|
53
|
-
def full_migrations_path
|
|
54
|
-
File.join(Rails.root, *migrations_path.split(File::SEPARATOR))
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def assure_data_schema_table
|
|
58
|
-
ActiveRecord::Base.establish_connection(db_config)
|
|
59
|
-
sm_table = DataMigrate::DataMigrator.schema_migrations_table_name
|
|
60
|
-
|
|
61
|
-
unless table_exists?(ActiveRecord::Base.connection, sm_table)
|
|
62
|
-
create_table(sm_table)
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
##
|
|
67
|
-
# Compares the given filename with what we expect data migration
|
|
68
|
-
# filenames to be, eg the "20091231235959_some_name.rb" pattern
|
|
69
|
-
# @param (String) filename
|
|
70
|
-
# @return (MatchData)
|
|
71
|
-
def match(filename)
|
|
72
|
-
/(\d{14})_(.+)\.rb$/.match(filename)
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
private
|
|
76
|
-
|
|
77
|
-
def create_table(sm_table)
|
|
78
|
-
ActiveRecord::Base.connection.create_table(sm_table, id: false) do |schema_migrations_table|
|
|
79
|
-
schema_migrations_table.string :version, primary_key: true
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
def table_exists?(connection, table_name)
|
|
84
|
-
# Avoid the warning that table_exists? prints in Rails 5.0 due a
|
|
85
|
-
# change in behavior between Rails 5.0 and Rails 5.1 of this method
|
|
86
|
-
# with respect to database views.
|
|
87
|
-
if ActiveRecord.version >= Gem::Version.new("5.0") &&
|
|
88
|
-
ActiveRecord.version < Gem::Version.new("5.1")
|
|
89
|
-
connection.data_source_exists?(table_name)
|
|
90
|
-
else
|
|
91
|
-
connection.table_exists?(schema_migrations_table_name)
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
def db_config
|
|
96
|
-
ActiveRecord::Base.configurations[Rails.env || "development"] ||
|
|
97
|
-
ENV["DATABASE_URL"]
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
end
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
module DataMigrate
|
|
2
|
-
class Migration < ::ActiveRecord::Migration
|
|
3
|
-
|
|
4
|
-
class << self
|
|
5
|
-
def check_pending!(connection = ::ActiveRecord::Base.connection)
|
|
6
|
-
raise ActiveRecord::PendingMigrationError if DataMigrator::Migrator.needs_migration?(connection)
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def migrate(direction)
|
|
10
|
-
new.migrate direction
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def table_name
|
|
14
|
-
ActiveRecord::Base.table_name_prefix + "data_migrations" + ActiveRecord::Base.table_name_suffix
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def primary_key
|
|
18
|
-
"version"
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def initialize(name = self.class.name, version = nil)
|
|
23
|
-
super(name, version)
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
module DataMigrate
|
|
2
|
-
class MigrationFive < ::ActiveRecord::Migration[5.0]
|
|
3
|
-
|
|
4
|
-
class << self
|
|
5
|
-
def check_pending!(connection = ::ActiveRecord::Base.connection)
|
|
6
|
-
raise ActiveRecord::PendingMigrationError if DataMigrator::Migrator.needs_migration?(connection)
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def migrate(direction)
|
|
10
|
-
new.migrate direction
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def table_name
|
|
14
|
-
ActiveRecord::Base.table_name_prefix + 'data_migrations' + ActiveRecord::Base.table_name_suffix
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def primary_key
|
|
18
|
-
"version"
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def initialize(name = self.class.name, version = nil)
|
|
23
|
-
super(name, version)
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
module DataMigrate
|
|
2
|
-
# Helper class to getting access to db schema
|
|
3
|
-
# to allow data/schema combiation tasks
|
|
4
|
-
class SchemaMigration
|
|
5
|
-
def self.pending_schema_migrations
|
|
6
|
-
all_migrations = DataMigrate::DataMigrator.migrations(migrations_paths)
|
|
7
|
-
sort_migrations(
|
|
8
|
-
ActiveRecord::Migrator.new(:up, all_migrations).
|
|
9
|
-
pending_migrations.
|
|
10
|
-
map {|m| { version: m.version, name: m.name, kind: :schema }}
|
|
11
|
-
)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def self.run(direction, migration_paths, version)
|
|
15
|
-
ActiveRecord::Migrator.run(direction, migration_paths, version)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def self.sort_migrations(set1, set2 = nil)
|
|
19
|
-
migrations = set1 + (set2 || [])
|
|
20
|
-
migrations.sort {|a, b| sort_string(a) <=> sort_string(b)}
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def self.migrations_paths
|
|
24
|
-
Rails.application.config.paths["db/migrate"].to_a
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def self.sort_string(migration)
|
|
28
|
-
"#{migration[:version]}_#{migration[:kind] == :data ? 1 : 0}"
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
module DataMigrate
|
|
2
|
-
class StatusService
|
|
3
|
-
class << self
|
|
4
|
-
def dump(connection = ActiveRecord::Base.connection, stream = STDOUT)
|
|
5
|
-
new(connection).dump(stream)
|
|
6
|
-
stream
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def initialize(connection)
|
|
11
|
-
@connection = connection
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def root_folder
|
|
15
|
-
Rails.root
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def dump(stream)
|
|
19
|
-
unless @connection.table_exists?(table_name)
|
|
20
|
-
stream.puts "Data migrations table does not exist yet."
|
|
21
|
-
return
|
|
22
|
-
end
|
|
23
|
-
sql = "SELECT version FROM #{DataMigrate::DataMigrator.schema_migrations_table_name}"
|
|
24
|
-
db_list = ActiveRecord::Base.connection.select_values(sql)
|
|
25
|
-
output(stream, db_list)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
private
|
|
29
|
-
|
|
30
|
-
def table_name
|
|
31
|
-
DataMigrate::DataMigrator.schema_migrations_table_name
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def output(stream, db_list)
|
|
35
|
-
stream.puts "#{"Status".center(8)} #{"Migration ID".ljust(14)} Migration Name"
|
|
36
|
-
stream.puts "-" * 50
|
|
37
|
-
list = migration_files(db_list) + migration_list(db_list)
|
|
38
|
-
list.sort! {|line1, line2| line1[1] <=> line2[1]}
|
|
39
|
-
list.each do |file|
|
|
40
|
-
stream.puts "#{file[0].center(8)} #{file[1].ljust(14)} #{file[2]}"
|
|
41
|
-
end
|
|
42
|
-
stream.puts
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def migration_list(db_list)
|
|
46
|
-
list = []
|
|
47
|
-
db_list.each do |version|
|
|
48
|
-
list << ["up", version, "********** NO FILE *************"]
|
|
49
|
-
end
|
|
50
|
-
list
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def migration_files(db_list)
|
|
54
|
-
file_list = []
|
|
55
|
-
Dir.foreach(File.join(root_folder, DataMigrate.config.data_migrations_path)) do |file|
|
|
56
|
-
# only files matching "20091231235959_some_name.rb" pattern
|
|
57
|
-
if match_data = DataMigrate::DataMigrator.match(file)
|
|
58
|
-
status = db_list.delete(match_data[1]) ? "up" : "down"
|
|
59
|
-
file_list << [status, match_data[1], match_data[2].humanize]
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
file_list
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|