diff --git a/.github/workflows/gempush.yml b/.github/workflows/gempush.yml index 2fa3bfa0..4ba95cb6 100644 --- a/.github/workflows/gempush.yml +++ b/.github/workflows/gempush.yml @@ -3,7 +3,7 @@ name: Ruby Gem on: push: branches: - - master + - main jobs: build: diff --git a/Changelog.md b/Changelog.md index 8d10e97d..d1f40fb1 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,5 +1,21 @@ # Changelog +## 8.5.0 + +Allow custom templates [bazay](https://github.com/bazay) + +## 8.4.0 + +Avoid Globally Accessible Functions for All Rake Tasks [berniechiu](https://github.com/berniechiu) + +## 8.3.0 + +Add delegation to exists? for use by third parties [foxondo](https://github.com/foxondo) + +## 8.2.0 + +Delegate to anonymous subclass of AR::SchemaMigration [foxondo](https://github.com/foxondo) + ## 8.1.1 Revert 8.1.0 changes diff --git a/README.md b/README.md index 629538bc..f550b048 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,7 @@ You can override this setting in `config/initializers/data_migrate.rb` ```ruby DataMigrate.configure do |config| config.data_migrations_path = 'db/awesomepath/' + config.data_template_path = Rails.root.join("lib", "awesomepath", "custom_data_migration.rb") config.db_configuration = { 'host' => '127.0.0.1', 'database' => 'awesome_database', diff --git a/data_migrate.gemspec b/data_migrate.gemspec index 1c0762ff..6759751d 100644 --- a/data_migrate.gemspec +++ b/data_migrate.gemspec @@ -38,13 +38,4 @@ Gem::Specification.new do |s| s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) } s.require_paths = ["lib"] - - s.post_install_message = <<-POST_INSTALL_MESSAGE -#{"*" * 80} -data-migrate: IMPORTANT: Breaking change introduced for migrations from v2. - -Failure to run the migration can have serious consequences. -See Readme for more info. -#{"*" * 80} -POST_INSTALL_MESSAGE end diff --git a/lib/data_migrate.rb b/lib/data_migrate.rb index 47096479..39ce3a88 100644 --- a/lib/data_migrate.rb +++ b/lib/data_migrate.rb @@ -19,4 +19,7 @@ end module DataMigrate + def self.root + File.dirname(__FILE__) + end end diff --git a/lib/data_migrate/config.rb b/lib/data_migrate/config.rb index 67533b7b..d54bd246 100644 --- a/lib/data_migrate/config.rb +++ b/lib/data_migrate/config.rb @@ -12,13 +12,22 @@ def config end class Config - attr_accessor :data_migrations_gen_path, :data_migrations_path, :db_configuration, :spec_name + attr_accessor :data_migrations_path, :data_migrations_gen_path, :data_template_path, :db_configuration, :spec_name + + DEFAULT_DATA_TEMPLATE_PATH = "data_migration.rb" def initialize @data_migrations_path = "db/data/" - @data_migrations_gen_path = "db/data/" + @data_migrations_gen_path = "db/data" + @data_template_path = DEFAULT_DATA_TEMPLATE_PATH @db_configuration = nil @spec_name = nil end + + def data_template_path=(value) + @data_template_path = value.tap do |path| + raise ArgumentError, "File not found: '#{path}'" unless path == DEFAULT_DATA_TEMPLATE_PATH || File.exists?(path) + end + end end end diff --git a/lib/data_migrate/data_schema.rb b/lib/data_migrate/data_schema.rb index 605fbfbc..4de8aca1 100644 --- a/lib/data_migrate/data_schema.rb +++ b/lib/data_migrate/data_schema.rb @@ -30,10 +30,12 @@ def migrated def versions @versions ||= begin - versions = [] - Dir.foreach(DataMigrate::DataMigrator.full_migrations_path) do |file| - match_data = DataMigrate::DataMigrator.match(file) - versions << match_data[1].to_i if match_data + versions = Set.new + DataMigrate::DataMigrator.migrations_paths.each do |path| + Dir.foreach(path) do |file| + match_data = DataMigrate::DataMigrator.match(file) + versions << match_data[1].to_i if match_data + end end versions end diff --git a/lib/data_migrate/data_schema_migration.rb b/lib/data_migrate/data_schema_migration.rb index 74b111fe..68316664 100644 --- a/lib/data_migrate/data_schema_migration.rb +++ b/lib/data_migrate/data_schema_migration.rb @@ -1,15 +1,14 @@ module DataMigrate - class DataSchemaMigration < ::ActiveRecord::SchemaMigration - + class DataSchemaMigration class << self - def table_name - ActiveRecord::Base.table_name_prefix + 'data_migrations' + ActiveRecord::Base.table_name_suffix - end + delegate :table_name, :primary_key, :create_table, :normalized_versions, :create, :create!, :table_exists?, :exists?, :where, to: :instance - def primary_key - "version" + def instance + @instance ||= Class.new(::ActiveRecord::SchemaMigration) do + define_singleton_method(:table_name) { ActiveRecord::Base.table_name_prefix + 'data_migrations' + ActiveRecord::Base.table_name_suffix } + define_singleton_method(:primary_key) { "version" } + end end end end end - diff --git a/lib/data_migrate/database_tasks.rb b/lib/data_migrate/database_tasks.rb index 6a31caef..94f6c15f 100644 --- a/lib/data_migrate/database_tasks.rb +++ b/lib/data_migrate/database_tasks.rb @@ -47,6 +47,40 @@ def check_schema_file(filename) Kernel.abort message end end + + def pending_migrations + sort_migrations( + pending_schema_migrations, + pending_data_migrations + ) + end + + def sort_migrations set_1, set_2=nil + migrations = set_1 + (set_2 || []) + migrations.sort{|a,b| sort_string(a) <=> sort_string(b)} + end + + def sort_string migration + "#{migration[:version]}_#{migration[:kind] == :data ? 1 : 0}" + end + + def data_migrations_path + ::DataMigrate.config.data_migrations_path + end + + def run_migration(migration, direction) + if migration[:kind] == :data + ::ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71]) + ::DataMigrate::DataMigrator.run(direction, data_migrations_path, migration[:version]) + else + ::ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69]) + ::DataMigrate::SchemaMigration.run( + direction, + ::DataMigrate::SchemaMigration.migrations_paths, + migration[:version] + ) + end + end end # This overrides ActiveRecord::Tasks::DatabaseTasks @@ -121,6 +155,5 @@ def self.past_migrations(sort = nil) sort == "asc" ? sort_migrations(migrations) : sort_migrations(migrations).reverse end - end end diff --git a/lib/data_migrate/version.rb b/lib/data_migrate/version.rb index bad20f4c..af9d0758 100644 --- a/lib/data_migrate/version.rb +++ b/lib/data_migrate/version.rb @@ -1,3 +1,3 @@ module DataMigrate - VERSION = "8.1.1".freeze + VERSION = "8.5.0".freeze end diff --git a/lib/generators/data_migrate.rb b/lib/generators/data_migrate.rb index 2aad73f6..30b9de9c 100644 --- a/lib/generators/data_migrate.rb +++ b/lib/generators/data_migrate.rb @@ -1,9 +1,22 @@ require 'rails/generators/named_base' + module DataMigrate module Generators class DataMigrationGenerator < Rails::Generators::NamedBase #:nodoc: - def self.source_root - @_data_migrate_source_root ||= File.expand_path(File.join(File.dirname(__FILE__), generator_name, 'templates')) + class << self + def source_root + build_data_migrate_source_root + end + + private + + def build_data_migrate_source_root + if DataMigrate.config.data_template_path == DataMigrate::Config::DEFAULT_DATA_TEMPLATE_PATH + File.expand_path(File.join(File.dirname(__FILE__), generator_name, 'templates')) + else + File.expand_path(File.dirname(DataMigrate.config.data_template_path)) + end + end end end end diff --git a/lib/generators/data_migration/data_migration_generator.rb b/lib/generators/data_migration/data_migration_generator.rb index ab1546af..f2cb5ac6 100644 --- a/lib/generators/data_migration/data_migration_generator.rb +++ b/lib/generators/data_migration/data_migration_generator.rb @@ -14,7 +14,7 @@ class DataMigrationGenerator < Rails::Generators::NamedBase def create_data_migration set_local_assigns! - migration_template "data_migration.rb", data_migrations_file_path + migration_template template_path, data_migrations_file_path end protected @@ -26,6 +26,10 @@ def set_local_assigns! end end + def template_path + DataMigrate.config.data_template_path + end + def migration_base_class_name "ActiveRecord::Migration[#{ActiveRecord::Migration.current_version}]" end diff --git a/spec/data_migrate/config_spec.rb b/spec/data_migrate/config_spec.rb index 58e5caec..60cd0db9 100644 --- a/spec/data_migrate/config_spec.rb +++ b/spec/data_migrate/config_spec.rb @@ -1,12 +1,16 @@ require "spec_helper" describe DataMigrate::Config do - it "sets default data_migrations_path path", :no_override do expect(DataMigrate.config.data_migrations_path).to eq "db/data/" end + it "sets default data_template_path path", :no_override do + expect(DataMigrate.config.data_template_path).to eq DataMigrate::Config::DEFAULT_DATA_TEMPLATE_PATH + end + describe "data migration path configured" do + subject { DataMigrate.config.data_migrations_path } before do @before = DataMigrate.config.data_migrations_path DataMigrate.configure do |config| @@ -20,8 +24,43 @@ end end - it do - expect(DataMigrate.config.data_migrations_path).to eq "db/awesome/" + it "equals the custom data migration path" do + is_expected.to eq "db/awesome/" + end + end + + describe "data template path configured" do + subject { DataMigrate.config.data_template_path } + + before do + @before = DataMigrate.config.data_template_path + DataMigrate.configure do |config| + config.data_template_path = data_template_path + end + end + + let(:data_template_path) do + File.join(DataMigrate.root, "generators", "data_migration", "templates", "data_migration.rb") + end + + after do + DataMigrate.configure do |config| + config.data_template_path = @before + end + end + + it "equals the custom data template path" do + is_expected.to eq data_template_path + end + + context "when path does not exist" do + subject { DataMigrate.config.data_template_path = invalid_path } + + let(:invalid_path) { "lib/awesome/templates/data_migration.rb" } + + it "checks that file exists on setting config var" do + expect { subject }.to raise_error { ArgumentError.new("File not found: '#{data_template_path}'") } + end end end end diff --git a/spec/generators/data_migration/data_migration_generator_spec.rb b/spec/generators/data_migration/data_migration_generator_spec.rb index cc773aad..44de8d3e 100644 --- a/spec/generators/data_migration/data_migration_generator_spec.rb +++ b/spec/generators/data_migration/data_migration_generator_spec.rb @@ -4,7 +4,8 @@ require 'generators/data_migration/data_migration_generator' describe DataMigrate::Generators::DataMigrationGenerator do - let(:subject) { DataMigrate::Generators::DataMigrationGenerator } + subject { DataMigrate::Generators::DataMigrationGenerator } + describe :next_migration_number do it "next migration" do Timecop.freeze("2016-12-03 22:15:26 -0800") do @@ -19,14 +20,18 @@ end describe :migration_base_class_name do - let(:subject) { DataMigrate::Generators::DataMigrationGenerator.new(['my_migration']) } + subject { generator.send(:migration_base_class_name) } + + let(:generator) { DataMigrate::Generators::DataMigrationGenerator.new(['my_migration']) } + it "returns the correct base class name" do - expect(subject.send(:migration_base_class_name)).to eq("ActiveRecord::Migration[#{ActiveRecord::Migration.current_version}]") + is_expected.to eq("ActiveRecord::Migration[#{ActiveRecord::Migration.current_version}]") end end describe :create_data_migration do - let(:subject) { DataMigrate::Generators::DataMigrationGenerator.new(['my_migration']) } + subject { DataMigrate::Generators::DataMigrationGenerator.new(['my_migration']) } + let(:data_migrations_file_path) { 'abc/my_migration.rb' } context 'when custom data migrations path has a trailing slash' do @@ -35,7 +40,7 @@ end it 'returns correct file path' do - expect(subject).to receive(:migration_template).with( + is_expected.to receive(:migration_template).with( 'data_migration.rb', data_migrations_file_path ) @@ -49,7 +54,7 @@ end it 'returns correct file path' do - expect(subject).to receive(:migration_template).with( + is_expected.to receive(:migration_template).with( 'data_migration.rb', data_migrations_file_path ) @@ -57,4 +62,40 @@ end end end + + describe ".source_root" do + subject { described_class.source_root } + + let(:default_source_root) do + File.expand_path( + File.dirname(File.join(DataMigrate.root, "generators", "data_migration", "templates", "data_migration.rb")) + ) + end + + it { is_expected.to eq default_source_root } + + context "when DateMigrate.config.data_template_path is set" do + before do + @before = DataMigrate.config.data_template_path + DataMigrate.configure do |config| + config.data_template_path = data_template_path + end + end + + let(:data_template_path) do + File.join(DataMigrate.root, "generators", "data_migration", "templates", "data_migration.rb") + end + let(:expected_source_root) { File.dirname(data_template_path) } + + after do + DataMigrate.configure do |config| + config.data_template_path = @before + end + end + + it "reads directory from config data template path" do + is_expected.to eq expected_source_root + end + end + end end diff --git a/tasks/databases.rake b/tasks/databases.rake index c3630b38..cd61dc87 100644 --- a/tasks/databases.rake +++ b/tasks/databases.rake @@ -4,29 +4,29 @@ namespace :db do namespace :migrate do desc "Migrate the database data and schema (options: VERSION=x, VERBOSE=false)." task :with_data => :environment do - assure_data_schema_table + DataMigrate::DataMigrator.assure_data_schema_table ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true target_version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil migrations = [] if target_version.nil? - migrations = pending_migrations.map{ |m| m.merge(:direction =>:up) } + migrations = DataMigrate::DatabaseTasks.pending_migrations.map{ |m| m.merge(:direction =>:up) } else current_schema_version = ActiveRecord::Migrator.current_version schema_migrations = if target_version > current_schema_version - pending_schema_migrations.keep_if{ |m| m[:version] <= target_version }.map{ |m| m.merge(:direction =>:up) } + DataMigrate::DatabaseTasks.pending_schema_migrations.keep_if{ |m| m[:version] <= target_version }.map{ |m| m.merge(:direction =>:up) } elsif target_version < current_schema_version - past_migrations.keep_if{ |m| m[:version] > target_version }.map{ |m| m.merge(:direction =>:down) } + DataMigrate::DatabaseTasks.past_migrations.keep_if{ |m| m[:version] > target_version }.map{ |m| m.merge(:direction =>:down) } else # == [] end - current_data_version = ActiveRecord::Migrator.current_version + current_data_version = DataMigrate::DataMigrator.current_version data_migrations = if target_version > current_data_version - pending_data_migrations.keep_if{ |m| m[:version] <= target_version }.map{ |m| m.merge(:direction =>:up) } + DataMigrate::DatabaseTasks.pending_data_migrations.keep_if{ |m| m[:version] <= target_version }.map{ |m| m.merge(:direction =>:up) } elsif target_version < current_data_version - past_migrations.keep_if{ |m| m[:version] > target_version }.map{ |m| m.merge(:direction =>:down) } + DataMigrate::DatabaseTasks.past_migrations.keep_if{ |m| m[:version] > target_version }.map{ |m| m.merge(:direction =>:down) } else # == [] end @@ -35,9 +35,9 @@ namespace :db do elsif data_migrations.empty? schema_migrations elsif target_version > current_data_version && target_version > current_schema_version - sort_migrations data_migrations, schema_migrations + DataMigrate::DatabaseTasks.sort_migrations data_migrations, schema_migrations elsif target_version < current_data_version && target_version < current_schema_version - sort_migrations(data_migrations, schema_migrations).reverse + DataMigrate::DatabaseTasks.sort_migrations(data_migrations, schema_migrations).reverse elsif target_version > current_data_version && target_version < current_schema_version schema_migrations + data_migrations elsif target_version < current_data_version && target_version > current_schema_version @@ -46,7 +46,7 @@ namespace :db do end migrations.each do |migration| - run_migration(migration, migration[:direction]) + DataMigrate::DatabaseTasks.run_migration(migration, migration[:direction]) end Rake::Task["db:_dump"].invoke @@ -56,7 +56,7 @@ namespace :db do namespace :redo do desc 'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).' task :with_data => :environment do - assure_data_schema_table + DataMigrate::DataMigrator.assure_data_schema_table if ENV["VERSION"] Rake::Task["db:migrate:down:with_data"].invoke Rake::Task["db:migrate:up:with_data"].invoke @@ -72,16 +72,16 @@ namespace :db do task :with_data => :environment do version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil raise "VERSION is required" unless version - assure_data_schema_table + DataMigrate::DataMigrator.assure_data_schema_table run_both = ENV["BOTH"] == "true" - migrations = pending_migrations.keep_if{|m| m[:version] == version} + migrations = DataMigrate::DatabaseTasks.pending_migrations.keep_if{|m| m[:version] == version} unless run_both || migrations.size < 2 migrations = migrations.slice(0,1) end migrations.each do |migration| - run_migration(migration, :up) + DataMigrate::DatabaseTasks.run_migration(migration, :up) end Rake::Task["db:_dump"].invoke @@ -94,16 +94,16 @@ namespace :db do task :with_data => :environment do version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil raise "VERSION is required" unless version - assure_data_schema_table + DataMigrate::DataMigrator.assure_data_schema_table run_both = ENV["BOTH"] == "true" - migrations = past_migrations.keep_if{|m| m[:version] == version} + migrations = DataMigrate::DatabaseTasks.past_migrations.keep_if{|m| m[:version] == version} unless run_both || migrations.size < 2 migrations = migrations.slice(0,1) end migrations.each do |migration| - run_migration(migration, :down) + DataMigrate::DatabaseTasks.run_migration(migration, :down) end Rake::Task["db:_dump"].invoke @@ -123,9 +123,9 @@ namespace :db do desc 'Rolls the schema back to the previous version (specify steps w/ STEP=n).' task :with_data => :environment do step = ENV['STEP'] ? ENV['STEP'].to_i : 1 - assure_data_schema_table - past_migrations[0..(step - 1)].each do | past_migration | - run_migration(past_migration, :down) + DataMigrate::DataMigrator.assure_data_schema_table + DataMigrate::DatabaseTasks.past_migrations[0..(step - 1)].each do | past_migration | + DataMigrate::DatabaseTasks.run_migration(past_migration, :down) end Rake::Task["db:_dump"].invoke @@ -136,7 +136,7 @@ namespace :db do namespace :forward do desc 'Pushes the schema to the next version (specify steps w/ STEP=n).' task :with_data => :environment do - assure_data_schema_table + DataMigrate::DataMigrator.assure_data_schema_table step = ENV['STEP'] ? ENV['STEP'].to_i : 1 DataMigrate::DatabaseTasks.forward(step) Rake::Task["db:_dump"].invoke @@ -147,7 +147,7 @@ namespace :db do namespace :version do desc "Retrieves the current schema version numbers for data and schema migrations" task :with_data => :environment do - assure_data_schema_table + DataMigrate::DataMigrator.assure_data_schema_table puts "Current Schema version: #{ActiveRecord::Migrator.current_version}" puts "Current Data version: #{DataMigrate::DataMigrator.current_version}" end @@ -157,7 +157,7 @@ namespace :db do desc "Raises an error if there are pending migrations or data migrations" task with_data: :environment do message = %{Run `rake db:migrate:with_data` to update your database then try again.} - DataMigrate::Tasks::DataMigrateTasks.abort_if_pending_migrations(pending_migrations, message) + DataMigrate::Tasks::DataMigrateTasks.abort_if_pending_migrations(DataMigrate::DatabaseTasks.pending_migrations, message) end end @@ -200,7 +200,7 @@ namespace :data do namespace :migrate do desc 'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).' task :redo => :environment do - assure_data_schema_table + DataMigrate::DataMigrator.assure_data_schema_table if ENV["VERSION"] Rake::Task["data:migrate:down"].invoke Rake::Task["data:migrate:up"].invoke @@ -212,10 +212,10 @@ namespace :data do desc 'Runs the "up" for a given migration VERSION.' task :up => :environment do - assure_data_schema_table + DataMigrate::DataMigrator.assure_data_schema_table version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil raise "VERSION is required" unless version - DataMigrate::DataMigrator.run(:up, data_migrations_path, version) + DataMigrate::DataMigrator.run(:up, DataMigrate::DatabaseTasks.data_migrations_path, version) Rake::Task["data:dump"].invoke end @@ -223,8 +223,8 @@ namespace :data do task :down => :environment do version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil raise "VERSION is required" unless version - assure_data_schema_table - DataMigrate::DataMigrator.run(:down, data_migrations_path, version) + DataMigrate::DataMigrator.assure_data_schema_table + DataMigrate::DataMigrator.run(:down, DataMigrate::DatabaseTasks.data_migrations_path, version) Rake::Task["data:dump"].invoke end @@ -236,35 +236,35 @@ namespace :data do desc 'Rolls the schema back to the previous version (specify steps w/ STEP=n).' task :rollback => :environment do - assure_data_schema_table + DataMigrate::DataMigrator.assure_data_schema_table step = ENV['STEP'] ? ENV['STEP'].to_i : 1 - DataMigrate::DataMigrator.rollback(data_migrations_path, step) + DataMigrate::DataMigrator.rollback(DataMigrate::DatabaseTasks.data_migrations_path, step) Rake::Task["data:dump"].invoke end desc 'Pushes the schema to the next version (specify steps w/ STEP=n).' task :forward => :environment do - assure_data_schema_table + DataMigrate::DataMigrator.assure_data_schema_table step = ENV['STEP'] ? ENV['STEP'].to_i : 1 # TODO: No worky for .forward # DataMigrate::DataMigrator.forward('db/data/', step) - migrations = pending_data_migrations.reverse.pop(step).reverse + migrations = DataMigrate::DatabaseTasks.pending_data_migrations.reverse.pop(step).reverse migrations.each do | pending_migration | - DataMigrate::DataMigrator.run(:up, data_migrations_path, pending_migration[:version]) + DataMigrate::DataMigrator.run(:up, DataMigrate::DatabaseTasks.data_migrations_path, pending_migration[:version]) end Rake::Task["data:dump"].invoke end desc "Retrieves the current schema version number for data migrations" task :version => :environment do - assure_data_schema_table + DataMigrate::DataMigrator.assure_data_schema_table puts "Current data version: #{DataMigrate::DataMigrator.current_version}" end desc "Raises an error if there are pending data migrations" task abort_if_pending_migrations: :environment do message = %{Run `rake data:migrate` to update your database then try again.} - DataMigrate::Tasks::DataMigrateTasks.abort_if_pending_migrations(pending_data_migrations, message) + DataMigrate::Tasks::DataMigrateTasks.abort_if_pending_migrations(DataMigrate::DatabaseTasks.pending_data_migrations, message) end desc "Create a db/data_schema.rb file that stores the current data version" @@ -287,53 +287,3 @@ namespace :data do end end end - -def pending_migrations - DataMigrate::DatabaseTasks.sort_migrations( - DataMigrate::DatabaseTasks.pending_schema_migrations, - DataMigrate::DatabaseTasks.pending_data_migrations - ) -end - -def pending_data_migrations - DataMigrate::DatabaseTasks.pending_data_migrations -end - -def pending_schema_migrations - DataMigrate::DatabaseTasks.pending_schema_migrations -end - -def sort_migrations set_1, set_2=nil - migrations = set_1 + (set_2 || []) - migrations.sort{|a,b| sort_string(a) <=> sort_string(b)} -end - -def sort_string migration - "#{migration[:version]}_#{migration[:kind] == :data ? 1 : 0}" -end - -def past_migrations(sort=nil) - DataMigrate::DatabaseTasks.past_migrations(sort) -end - -def assure_data_schema_table - DataMigrate::DataMigrator.assure_data_schema_table -end - -def data_migrations_path - DataMigrate.config.data_migrations_path -end - -def run_migration(migration, direction) - if migration[:kind] == :data - ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71]) - DataMigrate::DataMigrator.run(direction, data_migrations_path, migration[:version]) - else - ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69]) - DataMigrate::SchemaMigration.run( - direction, - DataMigrate::SchemaMigration.migrations_paths, - migration[:version] - ) - end -end