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