class Sql::Migrations::Rails::Railtie

Public Instance Methods

delete_extra_migrations!() click to toggle source
# File lib/sql/migrations/rails/railtie.rb, line 43
def delete_extra_migrations!
  tmp_migrations_path.children.select { |x| sql_migrations.keys.exclude?(x.basename('.rb')) }.each(&:delete)
end
generate_tmp_migrations!() click to toggle source
# File lib/sql/migrations/rails/railtie.rb, line 47
def generate_tmp_migrations!
  template = File.read(File.join(File.dirname(__FILE__), 'templates/migration.rb.tt'))
  modified_sql_migrations.each do |name, paths|
    erb_hash = {
      migration_class_name: name.to_s.split('_', 2).second.camelize,
      up_migration: paths.find { |x| x.to_s.end_with?('.up.sql') },
      down_migration: paths.find { |x| x.to_s.end_with?('.down.sql') }
    }

    erb_result = ERB.new(template, nil, '-').result_with_hash(erb_hash)
    Pathname(tmp_migrations_path.join("#{name}.rb")).write(erb_result)
  end
end
last_update() click to toggle source

Data about the previous files state This is needed for rebuild only modified temporary migrations

# File lib/sql/migrations/rails/railtie.rb, line 19
def last_update
  @last_update ||= begin
    file = ::Rails.root.join(Sql::Migrations::Rails::LAST_UPDATE_FILE).tap { |x| x.dirname.mkpath }
    file.file? ? JSON.parse(file.read).transform_keys(&:to_sym) : { timestamp: '0', files: {} }
  end
end
modified_sql_migrations() click to toggle source
# File lib/sql/migrations/rails/railtie.rb, line 35
def modified_sql_migrations
  @modified_sql_migrations ||= sql_migrations.select do |name, paths|
    last_update[:files][name.to_s] != paths.map { |x| x.to_s.split('.')[-2] } ||
      paths.map { |x| [x.mtime, x.ctime] }.flatten.map(&:utc)
           .max.strftime('%Y%m%d%H%M%S') > last_update[:timestamp]
  end
end
sql_migrations() click to toggle source
# File lib/sql/migrations/rails/railtie.rb, line 30
def sql_migrations
  @sql_migrations ||= ::Rails.root.join('db/migrate').glob('*.{up,down}.sql')
                             .group_by { |x| x.basename('.up.sql').basename('.down.sql') }
end
tmp_migrations_path() click to toggle source
# File lib/sql/migrations/rails/railtie.rb, line 26
def tmp_migrations_path
  @tmp_migrations_path ||= ::Rails.root.join(Sql::Migrations::Rails::TMP_MIGRATIONS_FOLDER).tap(&:mkpath)
end
update_data_file!() click to toggle source
# File lib/sql/migrations/rails/railtie.rb, line 61
def update_data_file!
  data = {
    timestamp: Time.now.utc.strftime('%Y%m%d%H%M%S'),
    files: sql_migrations.transform_values { |x1| x1.map { |x2| x2.to_s.split('.')[-2] } }
  }.to_json

  ::Rails.root.join(Sql::Migrations::Rails::LAST_UPDATE_FILE).write(data)
end
update_rails_migration_paths!() click to toggle source
# File lib/sql/migrations/rails/railtie.rb, line 70
def update_rails_migration_paths!
  ::Rails.application.config.paths['db/migrate'] << Sql::Migrations::Rails::TMP_MIGRATIONS_FOLDER
end