From 553faef2f1d581a5650e7ce456a58767e123923b Mon Sep 17 00:00:00 2001 From: James Smith Date: Sun, 2 Jul 2023 10:56:51 +0100 Subject: [PATCH] add DataMigrate::DatabaseTasks#prepare_all_with_data, an equivalent to prepare_all in core Rails. This is basically a direct copy of ActiveRecord::Tasks::DatabaseTasks#prepare_all, but instead of calling migrate, it calls migrate_with_data, and adds data into schema loading and dumping code as well. Original code is at https://github.com/rails/rails/blob/5ed37b35d666b833aeccb14a4cacd2926251232d/activerecord/lib/active_record/tasks/database_tasks.rb#L176 --- lib/data_migrate/database_tasks.rb | 35 ++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/lib/data_migrate/database_tasks.rb b/lib/data_migrate/database_tasks.rb index 59738d3..f2a16e4 100644 --- a/lib/data_migrate/database_tasks.rb +++ b/lib/data_migrate/database_tasks.rb @@ -220,5 +220,40 @@ def self.migrate_with_data end end end + + def self.prepare_all_with_data + seed = false + + each_current_configuration(env) do |db_config| + with_temporary_pool(db_config) do + begin + database_initialized = migration_connection.schema_migration.table_exists? + rescue ActiveRecord::NoDatabaseError + create(db_config) + retry + end + + unless database_initialized + if File.exist?(schema_dump_path(db_config)) + load_schema(db_config, ActiveRecord.schema_format, nil) + load_schema_current( + :ruby, + ENV["DATA_SCHEMA"] + ) + end + + seed = true + end + + migrate_with_data + if ActiveRecord.dump_schema_after_migration + dump_schema(db_config) + DataMigrate::Tasks::DataMigrateTasks.dump + end + end + end + + load_seed if seed + end end end