class Shoulda::Matchers::ActiveModel::ValidateLengthOfMatcher

@private

Public Class Methods

new(attribute) click to toggle source
Calls superclass method
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 271
def initialize(attribute)
  super(attribute)
  @options = {}
  @short_message = nil
  @long_message = nil
end

Public Instance Methods

allow_nil() click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 326
def allow_nil
  @options[:allow_nil] = true
  self
end
does_not_match?(subject) click to toggle source
Calls superclass method
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 359
def does_not_match?(subject)
  super(subject)

  lower_bound_does_not_match? ||
    upper_bound_does_not_match? ||
    allow_nil_does_not_match? ||
    allow_blank_does_not_match?
end
is_at_least(length) click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 278
def is_at_least(length)
  @options[:minimum] = length
  @short_message ||= :too_short
  self
end
is_at_most(length) click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 284
def is_at_most(length)
  @options[:maximum] = length
  @long_message ||= :too_long
  self
end
is_equal_to(length) click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 290
def is_equal_to(length)
  @options[:minimum] = length
  @options[:maximum] = length
  @short_message ||= :wrong_length
  @long_message ||= :wrong_length
  self
end
matches?(subject) click to toggle source
Calls superclass method
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 350
def matches?(subject)
  super(subject)

  lower_bound_matches? &&
    upper_bound_matches? &&
    allow_nil_matches? &&
    allow_blank_matches?
end
simple_description() click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 331
def simple_description
  description = "validate that the length of :#{@attribute}"

  if @options.key?(:minimum) && @options.key?(:maximum)
    if @options[:minimum] == @options[:maximum]
      description << " is #{@options[:minimum]}"
    else
      description << " is between #{@options[:minimum]}"
      description << " and #{@options[:maximum]}"
    end
  elsif @options.key?(:minimum)
    description << " is at least #{@options[:minimum]}"
  elsif @options.key?(:maximum)
    description << " is at most #{@options[:maximum]}"
  end

  description
end
with_long_message(message) click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 317
def with_long_message(message)
  if message
    @expects_custom_validation_message = true
    @long_message = message
  end

  self
end
with_message(message) click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 298
def with_message(message)
  if message
    @expects_custom_validation_message = true
    @short_message = message
    @long_message = message
  end

  self
end
with_short_message(message) click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 308
def with_short_message(message)
  if message
    @expects_custom_validation_message = true
    @short_message = message
  end

  self
end

Private Instance Methods

allow_nil_does_not_match?() click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 449
def allow_nil_does_not_match?
  expects_to_allow_nil? && disallows_value_of(nil)
end
allow_nil_matches?() click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 445
def allow_nil_matches?
  !expects_to_allow_nil? || allows_value_of(nil)
end
allows_higher_length?() click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 409
def allows_higher_length?
  @options.key?(:maximum) &&
    allows_length_of?(
      @options[:maximum] + 1,
      translated_long_message,
    )
end
allows_length_of?(length, message) click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 453
def allows_length_of?(length, message)
  allows_value_of(string_of_length(length), message)
end
allows_lower_length?() click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 390
def allows_lower_length?
  @options.key?(:minimum) &&
    @options[:minimum] > 0 &&
    allows_length_of?(
      @options[:minimum] - 1,
      translated_short_message,
    )
end
allows_maximum_length?() click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 435
def allows_maximum_length?
  !@options.key?(:maximum) ||
    allows_length_of?(@options[:maximum], translated_long_message)
end
allows_minimum_length?() click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 425
def allows_minimum_length?
  !@options.key?(:minimum) ||
    allows_length_of?(@options[:minimum], translated_short_message)
end
disallows_higher_length?() click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 417
def disallows_higher_length?
  !@options.key?(:maximum) ||
    disallows_length_of?(
      @options[:maximum] + 1,
      translated_long_message,
    )
end
disallows_length_of?(length, message) click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 457
def disallows_length_of?(length, message)
  disallows_value_of(string_of_length(length), message)
end
disallows_lower_length?() click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 399
def disallows_lower_length?
  !@options.key?(:minimum) ||
    @options[:minimum] == 0 ||
    (@options[:minimum] == 1 && expects_to_allow_blank?) ||
    disallows_length_of?(
      @options[:minimum] - 1,
      translated_short_message,
    )
end
disallows_maximum_length?() click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 440
def disallows_maximum_length?
  @options.key?(:maximum) &&
    disallows_length_of?(@options[:maximum], translated_long_message)
end
disallows_minimum_length?() click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 430
def disallows_minimum_length?
  @options.key?(:minimum) &&
    disallows_length_of?(@options[:minimum], translated_short_message)
end
expects_to_allow_nil?() click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 370
def expects_to_allow_nil?
  @options[:allow_nil]
end
lower_bound_does_not_match?() click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 378
def lower_bound_does_not_match?
  allows_lower_length? || disallows_minimum_length?
end
lower_bound_matches?() click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 374
def lower_bound_matches?
  disallows_lower_length? && allows_minimum_length?
end
string_of_length(length) click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 461
def string_of_length(length)
  'x' * length
end
translated_long_message() click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 480
def translated_long_message
  @_translated_long_message ||=
    if @long_message.is_a?(Symbol)
      default_error_message(
        @long_message,
        model_name: @subject.class.to_s.underscore,
        instance: @subject,
        attribute: @attribute,
        count: @options[:maximum],
      )
    else
      @long_message
    end
end
translated_short_message() click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 465
def translated_short_message
  @_translated_short_message ||=
    if @short_message.is_a?(Symbol)
      default_error_message(
        @short_message,
        model_name: @subject.class.to_s.underscore,
        instance: @subject,
        attribute: @attribute,
        count: @options[:minimum],
      )
    else
      @short_message
    end
end
upper_bound_does_not_match?() click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 386
def upper_bound_does_not_match?
  allows_higher_length? || disallows_maximum_length?
end
upper_bound_matches?() click to toggle source
# File lib/shoulda/matchers/active_model/validate_length_of_matcher.rb, line 382
def upper_bound_matches?
  disallows_higher_length? && allows_maximum_length?
end