def add(attribute, type = :invalid, **options)
      error = Error.new(
        @base,
        *normalize_arguments(attribute, type, options)
      )

      if exception = options[:strict]
        exception = ActiveModel::StrictValidationFailed if exception == true
        raise exception, error.full_message
      end

      @errors.append(error)

      error
    end
def add(attribute, type = :invalid, **options)
      error = Error.new(
        @base,
        *normalize_arguments(attribute, type, options)
      )

      if exception = options[:strict]
        exception = ActiveModel::StrictValidationFailed if exception == true
        raise exception, error.full_message
      end

      @errors.append(error)

      error
    end
Adds +message+ to the error messages and used validator type to +details+ on +attribute+.
 More than one error can be added to the same +attribute+.
 If no +message+ is supplied, <tt>:invalid</tt> is assumed.

   person.errors.add(:name)
   # => ["is invalid"]
   person.errors.add(:name, :not_implemented, message: "must be implemented")
   # => ["is invalid", "must be implemented"]

   person.errors.messages
   # => {:name=>["is invalid", "must be implemented"]}

   person.errors.details
   # => {:name=>[{error: :not_implemented}, {error: :invalid}]}

 If +message+ is a symbol, it will be translated using the appropriate
 scope (see +generate_message+).

 If +message+ is a proc, it will be called, allowing for things like
 <tt>Time.now</tt> to be used within an error.

 If the <tt>:strict</tt> option is set to +true+, it will raise
 ActiveModel::StrictValidationFailed instead of adding the error.
 <tt>:strict</tt> option can also be set to any other exception.

   person.errors.add(:name, :invalid, strict: true)
   # => ActiveModel::StrictValidationFailed: Name is invalid
   person.errors.add(:name, :invalid, strict: NameIsInvalid)
   # => NameIsInvalid: Name is invalid

   person.errors.messages # => {}

 +attribute+ should be set to <tt>:base</tt> if the error is not
 directly associated with a single attribute.

   person.errors.add(:base, :name_or_email_blank,
     message: "either name or email must be present")
   person.errors.messages
   # => {:base=>["either name or email must be present"]}
   person.errors.details
   # => {:base=>[{error: :name_or_email_blank}]}