class ActiveInteraction::Errors

An extension that provides the ability to merge other errors into itself.

Attributes

backtrace[RW]

Public Instance Methods

merge!(other) click to toggle source

Merge other errors into this one.

@param other [Errors]

@return [Errors]

# File lib/active_interaction/errors.rb, line 100
def merge!(other)
  merge_details!(other)

  self
end

Private Instance Methods

attribute?(attribute) click to toggle source
# File lib/active_interaction/errors.rb, line 108
def attribute?(attribute)
  @base.respond_to?(attribute)
end
detailed_error?(detail) click to toggle source
# File lib/active_interaction/errors.rb, line 112
def detailed_error?(detail)
  detail[:error].is_a?(Symbol)
end
merge_detail!(attribute, detail, message) click to toggle source
# File lib/active_interaction/errors.rb, line 136
def merge_detail!(attribute, detail, message)
  if attribute?(attribute) || attribute == :base
    options = detail.dup
    error = options.delete(:error)

    add(attribute, error, **options.merge(message: message)) unless added?(attribute, error, **options)
  else
    merge_message!(attribute, message)
  end
end
merge_details!(other) click to toggle source
# File lib/active_interaction/errors.rb, line 124
def merge_details!(other)
  other.messages.each do |attribute, messages|
    messages.zip(other.details[attribute]) do |message, detail|
      if detailed_error?(detail)
        merge_detail!(attribute, detail, message)
      else
        merge_message!(attribute, message)
      end
    end
  end
end
merge_message!(attribute, message) click to toggle source
# File lib/active_interaction/errors.rb, line 116
def merge_message!(attribute, message)
  unless attribute?(attribute)
    message = full_message(attribute, message)
    attribute = :base
  end
  add(attribute, message) unless added?(attribute, message)
end