class Shoulda::Matchers::ActiveRecord::DefineEnumForMatcher

@private

Attributes

attribute_name[R]
options[R]
record[R]

Public Class Methods

new(attribute_name) click to toggle source
# File lib/shoulda/matchers/active_record/define_enum_for_matcher.rb, line 54
def initialize(attribute_name)
  @attribute_name = attribute_name
  @options = {}
end

Public Instance Methods

description() click to toggle source
# File lib/shoulda/matchers/active_record/define_enum_for_matcher.rb, line 79
def description
  desc = "define :#{attribute_name} as an enum"

  if options[:expected_enum_values]
    desc << " with #{options[:expected_enum_values]}"
  end

  desc << " and store the value in a column with an integer type"

  desc
end
failure_message() click to toggle source
# File lib/shoulda/matchers/active_record/define_enum_for_matcher.rb, line 69
def failure_message
  "Expected #{expectation}"
end
Also aliased as: failure_message_for_should
failure_message_for_should()
Alias for: failure_message
failure_message_for_should_not()
failure_message_when_negated() click to toggle source
# File lib/shoulda/matchers/active_record/define_enum_for_matcher.rb, line 74
def failure_message_when_negated
  "Did not expect #{expectation}"
end
matches?(subject) click to toggle source
# File lib/shoulda/matchers/active_record/define_enum_for_matcher.rb, line 64
def matches?(subject)
  @record = subject
  enum_defined? && enum_values_match? && column_type_is_integer?
end
with(expected_enum_values) click to toggle source
# File lib/shoulda/matchers/active_record/define_enum_for_matcher.rb, line 59
def with(expected_enum_values)
  options[:expected_enum_values] = expected_enum_values
  self
end

Protected Instance Methods

actual_enum_values() click to toggle source
# File lib/shoulda/matchers/active_record/define_enum_for_matcher.rb, line 103
def actual_enum_values
  model.send(attribute_name.to_s.pluralize)
end
column() click to toggle source
# File lib/shoulda/matchers/active_record/define_enum_for_matcher.rb, line 119
def column
  model.columns_hash[attribute_name.to_s]
end
column_type_is_integer?() click to toggle source
# File lib/shoulda/matchers/active_record/define_enum_for_matcher.rb, line 115
def column_type_is_integer?
  column.type == :integer
end
enum_defined?() click to toggle source
# File lib/shoulda/matchers/active_record/define_enum_for_matcher.rb, line 107
def enum_defined?
  model.defined_enums.include?(attribute_name.to_s)
end
enum_values_match?() click to toggle source
# File lib/shoulda/matchers/active_record/define_enum_for_matcher.rb, line 111
def enum_values_match?
  expected_enum_values.empty? || actual_enum_values == expected_enum_values
end
expectation() click to toggle source
# File lib/shoulda/matchers/active_record/define_enum_for_matcher.rb, line 95
def expectation
  "#{model.name} to #{description}"
end
expected_enum_values() click to toggle source
# File lib/shoulda/matchers/active_record/define_enum_for_matcher.rb, line 99
def expected_enum_values
  hashify(options[:expected_enum_values]).with_indifferent_access
end
hashify(value) click to toggle source
# File lib/shoulda/matchers/active_record/define_enum_for_matcher.rb, line 127
def hashify(value)
  if value.nil?
    return {}
  end

  if value.is_a?(Array)
    new_value = {}

    value.each_with_index do |v, i|
      new_value[v] = i
    end

    new_value
  else
    value
  end
end
model() click to toggle source
# File lib/shoulda/matchers/active_record/define_enum_for_matcher.rb, line 123
def model
  record.class
end