class ConflictFreeSchema::Database::SchemaVersionFiles

Constants

MIGRATION_DIRECTORIES
MIGRATION_VERSION_GLOB
SCHEMA_DIRECTORY

Public Class Methods

connection() click to toggle source
# File lib/conflict_free_schema/database/schema_version_files.rb, line 67
def self.connection
  ActiveRecord::Base.connection
end
find_version_filenames() click to toggle source
# File lib/conflict_free_schema/database/schema_version_files.rb, line 50
def self.find_version_filenames
  Dir.glob(MIGRATION_VERSION_GLOB, base: schema_directory)
end
find_versions_from_migration_files() click to toggle source
# File lib/conflict_free_schema/database/schema_version_files.rb, line 58
def self.find_versions_from_migration_files
  migration_directories.each_with_object([]) do |directory, migration_versions|
    directory_migrations = Dir.glob(MIGRATION_VERSION_GLOB, base: directory)
    directory_versions = directory_migrations.map! { |m| m.split('_').first }

    migration_versions.concat(directory_versions)
  end
end
init_schema_directory() click to toggle source
# File lib/conflict_free_schema/database/schema_version_files.rb, line 54
def self.init_schema_directory
  FileUtils.mkdir_p(schema_directory)
end
load_all() click to toggle source
# File lib/conflict_free_schema/database/schema_version_files.rb, line 29
      def self.load_all
        init_schema_directory
        version_filenames = find_version_filenames
        return if version_filenames.empty?

        values = version_filenames.map { |vf| "('#{connection.quote_string(vf)}')" }
        connection.execute(<<~SQL)
          INSERT INTO schema_migrations (version)
          VALUES #{values.join(',')}
          ON CONFLICT DO NOTHING
        SQL
      end
migration_directories() click to toggle source
# File lib/conflict_free_schema/database/schema_version_files.rb, line 46
def self.migration_directories
  @migration_directories ||= MIGRATION_DIRECTORIES.map { |dir| Rails.root.join(dir) }
end
schema_directory() click to toggle source
# File lib/conflict_free_schema/database/schema_version_files.rb, line 42
def self.schema_directory
  @schema_directory ||= Rails.root.join(SCHEMA_DIRECTORY)
end
touch_all(versions_from_database) click to toggle source
# File lib/conflict_free_schema/database/schema_version_files.rb, line 12
def self.touch_all(versions_from_database)
  init_schema_directory
  versions_from_migration_files = find_versions_from_migration_files

  version_filepaths = find_version_filenames.map { |f| schema_directory.join(f) }
  FileUtils.rm(version_filepaths)

  versions_to_create = versions_from_database & versions_from_migration_files
  versions_to_create.each do |version|
    version_filepath = schema_directory.join(version)

    File.open(version_filepath, 'w') do |file|
      file << Digest::SHA256.hexdigest(version)
    end
  end
end