Sha256: b0074126780a3bb5d59e6b01ea990a9d9351578f9eebf0dc52f943597bce2bfa

Contents?: true

Size: 1.38 KB

Versions: 4

Compression:

Stored size: 1.38 KB

Contents

# frozen_string_literal: true

module DataMigrate
  ##
  # Provides the definition method for data_schema.rb
  class Data < ActiveRecord::Schema
    # This method is based on the following two methods
    #   ActiveRecord::Schema#define
    #   ActiveRecord::ConnectionAdapters::SchemaStatements
    #     #assume_migrated_upto_version
    def define(info)
      DataMigrate::DataMigrator.assure_data_schema_table

      return if info[:version].blank?

      version = info[:version].to_i
      table_name = DataMigrate::DataMigrator.schema_migrations_table_name
      sm_table = quote_table_name(table_name)
      migrated = select_values("SELECT version FROM #{sm_table}").map(&:to_i)

      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
      end

      unless migrated.include?(version)
        execute "INSERT INTO #{sm_table} (version) VALUES ('#{version}')"
      end

      inserted = Set.new
      (versions - migrated).each do |v|
        if inserted.include?(v)
          raise "Duplicate data migration #{v}. Please renumber your data " \
            "migrations to resolve the conflict."
        elsif v < version
          execute "INSERT INTO #{sm_table} (version) VALUES ('#{v}')"
          inserted << v
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
data_migrate-3.5.0 lib/data_migrate/data_schema.rb
data_migrate-3.4.0 lib/data_migrate/data_schema.rb
data_migrate-3.3.1 lib/data_migrate/data_schema.rb
data_migrate-3.3.0 lib/data_migrate/data_schema.rb