class Shoulda::ActiveRecord::Matchers::AllowValueMatcher

:nodoc:

def description

def description
  "allow #{@attribute} to be set to #{@value.inspect}"
end

def error_description

def error_description
  if @instance.errors.empty?
    "no errors"
  else
    "errors: #{pretty_error_messages(@instance)}"
  end
end

def errors_match?

def errors_match?
  @instance.valid?
  @errors = @instance.errors.on(@attribute)
  @errors = [@errors] unless @errors.is_a?(Array)
  errors_match_regexp? || errors_match_string?
end

def errors_match_regexp?

def errors_match_regexp?
  if Regexp === @expected_message
    @matched_error = @errors.detect { |e| e =~ @expected_message }
    !@matched_error.nil?
  else
    false
  end
end

def errors_match_string?

def errors_match_string?
  if @errors.include?(@expected_message)
    @matched_error = @expected_message
    true
  else
    false
  end
end

def expectation

def expectation
  "errors to include #{@expected_message.inspect} " <<
  "when #{@attribute} is set to #{@value.inspect}"
end

def failure_message

def failure_message
  "Did not expect #{expectation}, got error: #{@matched_error}"
end

def for(attribute)

def for(attribute)
  @attribute = attribute
  self
end

def initialize(value)

def initialize(value)
  @value = value
end

def matches?(instance)

def matches?(instance)
  @instance = instance
  @expected_message ||= :invalid
  if Symbol === @expected_message
    @expected_message = default_error_message(@expected_message)
  end
  @instance.send("#{@attribute}=", @value)
  !errors_match?
end

def negative_failure_message

def negative_failure_message
  "Expected #{expectation}, got #{error_description}"
end

def with_message(message)

def with_message(message)
  @expected_message = message if message
  self
end