class Shoulda::Matchers::ActiveRecord::AssociationMatchers::JoinTableMatcher
@private
def actual_join_table_columns
def actual_join_table_columns connection.columns(join_table_name).map(&:name) end
def column_label
def column_label if missing_columns.count > 1 'columns' else 'column' end end
def expected_join_table_columns
def expected_join_table_columns [foreign_key, association_foreign_key] end
def initialize(association_matcher, reflector)
def initialize(association_matcher, reflector) @association_matcher = association_matcher @reflector = reflector end
def join_table_exists?
def join_table_exists? if connection.tables.include?(join_table_name) true else @failure_message = missing_table_message false end end
def join_table_has_correct_columns?
def join_table_has_correct_columns? if missing_columns.empty? true else @failure_message = missing_columns_message false end end
def join_table_option_correct?
def join_table_option_correct? if options.key?(:join_table_name) if option_verifier.correct_for_string?(:join_table, options[:join_table_name]) true else @failure_message = "#{name} should use '#{options[:join_table_name]}' for :join_table option" false end else true end end
def matches?(subject)
def matches?(subject) join_table_option_correct? && join_table_exists? && join_table_has_correct_columns? end
def missing_columns
def missing_columns @missing_columns ||= expected_join_table_columns.select do |key| !actual_join_table_columns.include?(key.to_s) end end
def missing_columns_message
def missing_columns_message missing = missing_columns.join(', ') "join table #{join_table_name} missing #{column_label}: #{missing}" end
def missing_table_message
def missing_table_message "join table #{join_table_name} doesn't exist" end