class Shoulda::Matchers::ActiveModel::ValidationMatcher::BuildDescription

@private

Attributes

main_description[R]
matcher[R]

Public Class Methods

call(matcher, main_description) click to toggle source
# File lib/shoulda/matchers/active_model/validation_matcher/build_description.rb, line 7
def self.call(matcher, main_description)
  new(matcher, main_description).call
end
new(matcher, main_description) click to toggle source
# File lib/shoulda/matchers/active_model/validation_matcher/build_description.rb, line 11
def initialize(matcher, main_description)
  @matcher = matcher
  @main_description = main_description
end

Public Instance Methods

call() click to toggle source
# File lib/shoulda/matchers/active_model/validation_matcher/build_description.rb, line 16
def call
  if description_clauses_for_qualifiers.any?
    "#{main_description}#{clause_for_allow_blank_or_nil},"\
    " #{description_clauses_for_qualifiers.to_sentence}"
  else
    main_description + clause_for_allow_blank_or_nil
  end
end

Private Instance Methods

clause_for_allow_blank_or_nil() click to toggle source
# File lib/shoulda/matchers/active_model/validation_matcher/build_description.rb, line 31
def clause_for_allow_blank_or_nil
  if matcher.try(:expects_to_allow_blank?)
    ' as long as it is not blank'
  elsif matcher.try(:expects_to_allow_nil?)
    ' as long as it is not nil'
  else
    ''
  end
end
description_clauses_for_qualifiers() click to toggle source
# File lib/shoulda/matchers/active_model/validation_matcher/build_description.rb, line 41
def description_clauses_for_qualifiers
  description_clauses = []

  if matcher.try(:expects_strict?)
    description_clauses <<
      if matcher.try(:expects_custom_validation_message?)
        'raising a validation exception with a custom message on failure'
      else
        'raising a validation exception on failure'
      end
  elsif matcher.try(:expects_custom_validation_message?)
    description_clauses <<
      'producing a custom validation error on failure'
  end

  description_clauses
end