1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
# frozen_string_literal: true
require "active_record"
require "data_migrate/config"
module DataMigrate
class DataMigrator < ActiveRecord::Migrator
def self.migrations_paths
[DataMigrate.config.data_migrations_path]
end
def self.assure_data_schema_table
ActiveRecord::Base.establish_connection(db_config)
DataMigrate::DataSchemaMigration.create_table
end
def initialize(direction, migrations, target_version = nil)
@direction = direction
@target_version = target_version
@migrated_versions = nil
@migrations = migrations
validate(@migrations)
DataMigrate::DataSchemaMigration.create_table
ActiveRecord::InternalMetadata.create_table
end
def load_migrated
@migrated_versions =
DataMigrate::DataSchemaMigration.normalized_versions.map(&:to_i).sort
end
class << self
def current_version
DataMigrate::MigrationContext.new(migrations_paths).current_version
end
##
# Compares the given filename with what we expect data migration
# filenames to be, eg the "20091231235959_some_name.rb" pattern
# @param (String) filename
# @return (MatchData)
def match(filename)
/(\d{14})_(.+)\.rb$/.match(filename)
end
def needs_migration?
DataMigrate::DatabaseTasks.pending_migrations.count.positive?
end
##
# Provides the full migrations_path filepath
# @return (String)
def full_migrations_path
File.join(Rails.root, *migrations_paths.split(File::SEPARATOR))
end
def migrations_status
DataMigrate::MigrationContext.new(migrations_paths).migrations_status
end
# TODO: this was added to be backward compatible, need to re-evaluate
def migrations(_migrations_paths)
#DataMigrate::MigrationContext.new(migrations_paths).migrations
DataMigrate::MigrationContext.new(_migrations_paths).migrations
end
#TODO: this was added to be backward compatible, need to re-evaluate
def run(direction, migration_paths, version)
DataMigrate::MigrationContext.new(migration_paths).run(direction, version)
end
def rollback(migrations_path, steps)
DataMigrate::MigrationContext.new(migrations_path).rollback(steps)
end
def db_config
ActiveRecord::Base.configurations[Rails.env || "development"] ||
ENV["DATABASE_URL"]
end
end
private
def record_version_state_after_migrating(version)
if down?
migrated.delete(version)
DataMigrate::DataSchemaMigration.where(version: version.to_s).delete_all
else
migrated << version
DataMigrate::DataSchemaMigration.create!(version: version.to_s)
end
end
end
end
|