class Shoulda::ActiveRecord::Matchers::HaveDbIndexMatcher

:nodoc:

def correct_unique?

def correct_unique?
  return true if @unique.nil?
  if matched_index.unique == @unique
    true
  else
    @missing = "#{table_name} has an index named #{matched_index.name} " <<
               "of unique #{matched_index.unique}, not #{@unique}."
    false
  end
end

def description

def description
  "have a #{index_type} index on columns #{@columns.join(' and ')}"
end

def expectation

def expectation
  expected = "#{model_class.name} to #{description}"
end

def failure_message

def failure_message
  "Expected #{expectation} (#{@missing})"
end

def index_exists?

def index_exists?
  ! matched_index.nil?
end

def index_type

def index_type
  case @unique
  when nil
    ''
  when false
    'non-unique'
  else
    'unique'
  end
end

def indexes

def indexes
  ::ActiveRecord::Base.connection.indexes(table_name)
end

def initialize(macro, columns)

:nodoc:
def initialize(macro, columns)
  @macro = macro
  @columns = normalize_columns_to_array(columns)
end

def matched_index

def matched_index
  indexes.detect { |each| each.columns == @columns }
end

def matches?(subject)

def matches?(subject)
  @subject = subject
  index_exists? && correct_unique?
end

def model_class

def model_class
  @subject.class
end

def negative_failure_message

def negative_failure_message
  "Did not expect #{expectation}"
end

def normalize_columns_to_array(columns)

def normalize_columns_to_array(columns)
  if columns.class == Array
    columns.collect { |each| each.to_s }
  else
    [columns.to_s]
  end
end

def table_name

def table_name
  model_class.table_name
end

def unique(unique)

def unique(unique)
  @unique = unique
  self
end