kaspernj/baza_migrations

View on GitHub
lib/baza_migrations/commands/add_index.rb

Summary

Maintainability
A
25 mins
Test Coverage
class BazaMigrations::Commands::AddIndex < BazaMigrations::Commands::Base
  def initialize(table_name, columns, args)
    @table_name = table_name
    @columns = columns
    @args = args
  end

  def sql
    sql = "CREATE"
    sql << " UNIQUE" if @args[:unique]
    sql << " INDEX `#{@db.escape_column(index_name)}` ON `#{@db.escape_table(@table_name)}` ("

    first = true
    columns_as_array.each do |column|
      sql << ", " unless first
      first = false if first
      sql << "`#{column}`"
    end

    sql << ")"

    [sql]
  end

  def changed_rollback_sql
    ["DROP INDEX `#{@db.escape_column(index_name)}`"]
  end

private

  def columns_as_array
    return @columns if @columns.is_a?(Array)

    [@columns]
  end

  def index_name
    name = "index_#{@table_name}_on_"

    first = true
    columns_as_array.each do |column|
      name << "_and_" unless first
      first = false if first
      name << column.to_s
    end

    name
  end
end