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

@private

def self.call(matcher, main_description)

def self.call(matcher, main_description)
  new(matcher, main_description).call
end

def call

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

def clause_for_allow_blank_or_nil

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

def description_clauses_for_qualifiers

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

def initialize(matcher, main_description)

def initialize(matcher, main_description)
  @matcher = matcher
  @main_description = main_description
end