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_for_attribute(instance, attribute)

def errors_for_attribute(instance, attribute)
  if instance.errors.respond_to?(:[])
    instance.errors[attribute]
  else
    instance.errors.on(attribute)
  end
end

def errors_match?

def errors_match?
  @instance.valid?
  @errors = errors_for_attribute(@instance, @attribute)
  @errors = [@errors] unless @errors.is_a?(Array)
  @expected_message ? (errors_match_regexp? || errors_match_string?) : (@errors.compact.any?)
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 " <<
  (@expected_message ? "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
  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