class RSpec::Matchers::Sequel::HaveIndexOn
Public Class Methods
new(column, unique=false)
click to toggle source
# File lib/rspec/sequel_expectations/matchers/have_index_on.rb, line 38 def initialize(column, unique=false) @columns = Array(column) @unique = unique end
Public Instance Methods
description()
click to toggle source
# File lib/rspec/sequel_expectations/matchers/have_index_on.rb, line 20 def description text = %w(have) text << 'unique' if @unique text << %(index on #{@columns.inspect}) text << %(named "#{@name}") if @name text.join(' ') end
failure_message()
click to toggle source
# File lib/rspec/sequel_expectations/matchers/have_index_on.rb, line 28 def failure_message %(expected #{@table} to #{description} but #{@error}) end
failure_message_when_negated()
click to toggle source
# File lib/rspec/sequel_expectations/matchers/have_index_on.rb, line 32 def failure_message_when_negated %(did not expect #{@table} to #{description}) end
matches?(table)
click to toggle source
# File lib/rspec/sequel_expectations/matchers/have_index_on.rb, line 12 def matches?(table) @table = table get_required_index index_present? && correct_name? && unique? end
named(name)
click to toggle source
# File lib/rspec/sequel_expectations/matchers/have_index_on.rb, line 7 def named(name) @name = name.to_sym self end
Private Instance Methods
correct_name?()
click to toggle source
# File lib/rspec/sequel_expectations/matchers/have_index_on.rb, line 73 def correct_name? if @name && @index.first != @name @error = %(index have name "#{@index.first}") false else true end end
get_required_index()
click to toggle source
# File lib/rspec/sequel_expectations/matchers/have_index_on.rb, line 43 def get_required_index @index = DB.indexes(@table).each_pair.detect { |index, opts| index.to_s.split('_').last != 'key' && opts[:columns] == @columns } end
get_required_key()
click to toggle source
PostgreSQL adapter returns index and constraints as separate objects, each with an appropriate postfix. Other case is when constaint name is defined manually and following method must take that in account too.
# File lib/rspec/sequel_expectations/matchers/have_index_on.rb, line 53 def get_required_key key = DB.indexes(@table).each_pair.detect do |key, opts| if @name key == @name else key.to_s.split('_').last == 'key' && opts[:columns] == @columns end end @key = key.nil? ? {} : key.last end
index_present?()
click to toggle source
# File lib/rspec/sequel_expectations/matchers/have_index_on.rb, line 64 def index_present? if @index.nil? @error = 'none exists' false else true end end
unique?()
click to toggle source
# File lib/rspec/sequel_expectations/matchers/have_index_on.rb, line 82 def unique? get_required_key if @index.last[:unique] == @unique || @key.fetch(:unique, false) == @unique true else @error = 'index is non-unique' false end end