Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 15 additions & 8 deletions lib/data_migrate/database_tasks.rb
Original file line number Diff line number Diff line change
Expand Up @@ -186,16 +186,12 @@ def self.migrate_with_data

ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true

# 7.2 removes the param for db_configs_with_versions in https://github.com/rails/rails/commit/9572fcb4a0bd5396436689a6a42613886871cd81
# 7.1 stable backported the change in https://github.com/rails/rails/commit/c53ec4b60980036b43528829d4b0b7457f759224
schema_mapped_versions = if Gem::Dependency.new("railties", ">= 7.1.4").match?("railties", Gem.loaded_specs["railties"].version, true)
ActiveRecord::Tasks::DatabaseTasks.db_configs_with_versions
else
db_configs = ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env)

ActiveRecord::Tasks::DatabaseTasks.db_configs_with_versions(db_configs)
unless ActiveRecord::Tasks::DatabaseTasks.respond_to?(:db_configs_with_versions)
pending_migrations.each { |migration| run_migration(migration, :up) }
return
end

schema_mapped_versions = schema_db_configs_with_versions
data_mapped_versions = DataMigrate::DatabaseTasks.db_configs_with_versions

mapped_versions = schema_mapped_versions.merge(data_mapped_versions) do |_key, schema_db_configs, data_db_configs|
Expand Down Expand Up @@ -279,6 +275,17 @@ def dump_schema_after_migration?
end
end

def self.schema_db_configs_with_versions
method = ActiveRecord::Tasks::DatabaseTasks.method(:db_configs_with_versions)
if method.arity == 1
db_configs = ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env)
ActiveRecord::Tasks::DatabaseTasks.db_configs_with_versions(db_configs)
else
ActiveRecord::Tasks::DatabaseTasks.db_configs_with_versions
end
end
private_class_method :schema_db_configs_with_versions

def schema_format
if ActiveRecord.respond_to?(:schema_format)
ActiveRecord.schema_format
Expand Down
25 changes: 25 additions & 0 deletions spec/data_migrate/database_tasks_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,31 @@
end
end

describe :migrate_with_data do
let(:env) { ActiveRecord::Tasks::DatabaseTasks.env }

before do
hash_config = ActiveRecord::DatabaseConfigurations::HashConfig.new(
env, 'primary',
adapter: "sqlite3",
database: "spec/db/test.db",
migrations_paths: "spec/db/migrate"
)
configurations = ActiveRecord::DatabaseConfigurations.new([hash_config])
allow(ActiveRecord::Base).to receive(:configurations).and_return(configurations)
end

it "runs all pending data and schema migrations" do
subject.migrate_with_data

data_versions = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
expect(data_versions).to include("20091231235959")

schema_versions = DataMigrate::RailsHelper.schema_migration.normalized_versions
expect(schema_versions).to include("20131111111111")
end
end

describe :prepare_all_with_data do
let(:db_config) do
ActiveRecord::DatabaseConfigurations::HashConfig.new(
Expand Down