class Shoulda::Matchers::ActiveRecord::HaveDbIndexMatcher
@private
def correct_unique?
def correct_unique? return true unless @options.key?(:unique) is_unique = matched_index.unique is_unique = !is_unique unless @options[:unique] unless is_unique @missing = "#{table_name} has an index named #{matched_index.name} " << "of unique #{matched_index.unique}, not #{@options[:unique]}." end is_unique end
def description
def description if @options.key?(:unique) "have a #{index_type} index on columns #{@columns.join(' and ')}" else "have an index on columns #{@columns.join(' and ')}" end end
def expectation
def expectation "#{model_class.name} to #{description}" end
def failure_message
def failure_message "Expected #{expectation} (#{@missing})" end
def failure_message_when_negated
def failure_message_when_negated "Did not expect #{expectation}" end
def index_exists?
def index_exists? ! matched_index.nil? end
def index_type
def index_type if @options[:unique] 'unique' else 'non-unique' end end
def indexes
def indexes ::ActiveRecord::Base.connection.indexes(table_name) end
def initialize(columns)
def initialize(columns) @columns = normalize_columns_to_array(columns) @options = {} 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 normalize_columns_to_array(columns)
def normalize_columns_to_array(columns) Array.wrap(columns).map(&:to_s) end
def table_name
def table_name model_class.table_name end
def unique(unique = true)
def unique(unique = true) @options[:unique] = unique self end