class ActiveInteraction::Errors
An extension that provides the ability to merge other errors into itself.
Attributes
backtrace[RW]
Public Instance Methods
local_attribute(attribute)
click to toggle source
@private
# File lib/active_interaction/errors.rb, line 28 def local_attribute(attribute) attribute.to_s.sub(/\A([^.\[]*).*\z/, '\1').to_sym end
merge!(other)
click to toggle source
Merge other errors into this one.
@param other [Errors]
@return [Errors]
# File lib/active_interaction/errors.rb, line 13 def merge!(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, detail, message) end end end self end
Private Instance Methods
attribute?(attribute)
click to toggle source
# File lib/active_interaction/errors.rb, line 34 def attribute?(attribute) @base.respond_to?(local_attribute(attribute)) end
detailed_error?(detail)
click to toggle source
# File lib/active_interaction/errors.rb, line 38 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 54 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, detail, message) end end
merge_message!(attribute, detail, message)
click to toggle source
# File lib/active_interaction/errors.rb, line 42 def merge_message!(attribute, detail, message) options = detail.dup options.delete(:error) unless attribute?(attribute) message = full_message(attribute, message) attribute = :base end add(attribute, message, **options) unless added?(attribute, message, **options) end