diff --git a/lib/data_migrate/database_tasks.rb b/lib/data_migrate/database_tasks.rb index 517d7dc..910b4e3 100644 --- a/lib/data_migrate/database_tasks.rb +++ b/lib/data_migrate/database_tasks.rb @@ -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| @@ -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 diff --git a/spec/data_migrate/database_tasks_spec.rb b/spec/data_migrate/database_tasks_spec.rb index 4d3b585..1c8a37c 100644 --- a/spec/data_migrate/database_tasks_spec.rb +++ b/spec/data_migrate/database_tasks_spec.rb @@ -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(