class unprocessable

def self.down

def self.down
  remove_column :audits, :association_type
  remove_column :audits, :association_id
end

def self.down

def self.down
  remove_column :audits, :comment
end

def self.down

def self.down
  remove_column :audits, :remote_address
end

def self.down

def self.down
  remove_column :audits, :request_uuid
end

def self.down

def self.down
  if index_exists?(:audits, [:auditable_type, :auditable_id, :version], name: index_name)
    remove_index :audits, name: index_name
    add_index :audits, [:auditable_type, :auditable_id], name: index_name
  end
end

def self.down

def self.down
  drop_table :audits
end

def self.down

def self.down
  if index_exists? :audits, [:associated_id, :associated_type], :name => 'associated_index'
    remove_index :audits, :name => 'associated_index'
  end
  rename_column :audits, :associated_type, :association_type
  rename_column :audits, :associated_id, :association_id
  add_index :audits, [:association_id, :association_type], :name => 'association_index'
end

def self.down

def self.down
  rename_column :audits, :audited_changes, :changes
end

def self.down

def self.down
  rename_column :audits, :association_type, :auditable_parent_type
  rename_column :audits, :association_id, :auditable_parent_id
end

def self.down

def self.down
  fix_index_order_for [:associated_type, :associated_id], 'associated_index'
  fix_index_order_for [:auditable_type, :auditable_id], 'auditable_index'
end

def self.up

def self.up
  add_column :audits, :association_id, :integer
  add_column :audits, :association_type, :string
end

def self.up

def self.up
  add_column :audits, :comment, :string
end

def self.up

def self.up
  add_column :audits, :remote_address, :string
end

def self.up

def self.up
  add_column :audits, :request_uuid, :string
  add_index :audits, :request_uuid
end

def self.up

def self.up
  if index_exists?(:audits, [:auditable_type, :auditable_id], name: index_name)
    remove_index :audits, name: index_name
    add_index :audits, [:auditable_type, :auditable_id, :version], name: index_name
  end
end

def self.up

def self.up
  create_table :audits, :force => true do |t|
    t.column :auditable_id, :integer
    t.column :auditable_type, :string
    t.column :associated_id, :integer
    t.column :associated_type, :string
    t.column :user_id, :<%= options[:audited_user_id_column_type] %>
    t.column :user_type, :string
    t.column :username, :string
    t.column :action, :string
    t.column :audited_changes, :<%= options[:audited_changes_column_type] %>
    t.column :version, :integer, :default => 0
    t.column :comment, :string
    t.column :remote_address, :string
    t.column :request_uuid, :string
    t.column :created_at, :datetime
  end
  add_index :audits, [:auditable_type, :auditable_id, :version], :name => 'auditable_index'
  add_index :audits, [:associated_type, :associated_id], :name => 'associated_index'
  add_index :audits, [:user_id, :user_type], :name => 'user_index'
  add_index :audits, :request_uuid
  add_index :audits, :created_at
end

def self.up

def self.up
  if index_exists? :audits, [:association_id, :association_type], :name => 'association_index'
    remove_index :audits, :name => 'association_index'
  end
  rename_column :audits, :association_id, :associated_id
  rename_column :audits, :association_type, :associated_type
  add_index :audits, [:associated_id, :associated_type], :name => 'associated_index'
end

def self.up

def self.up
  rename_column :audits, :changes, :audited_changes
end

def self.up

def self.up
  rename_column :audits, :auditable_parent_id, :association_id
  rename_column :audits, :auditable_parent_type, :association_type
end

def self.up

def self.up
  fix_index_order_for [:associated_id, :associated_type], 'associated_index'
  fix_index_order_for [:auditable_id, :auditable_type], 'auditable_index'
end

def fix_index_order_for(columns, index_name)

def fix_index_order_for(columns, index_name)
  if index_exists? :audits, columns, name: index_name
    remove_index :audits, name: index_name
    add_index :audits, columns.reverse, name: index_name
  end
end

def index_name

def index_name
  'auditable_index'
end