class ActiveModel::Errors::Tree

Constants

ATTRIBUTE_SEPARATOR

Public Class Methods

new(base, errors) click to toggle source
# File lib/activemodel/errors/tree.rb, line 7
def initialize(base, errors)
  @base   = base
  @errors = errors
end

Public Instance Methods

details() click to toggle source
# File lib/activemodel/errors/tree.rb, line 18
def details
  @details ||= method_tree(:details)
end
messages() click to toggle source
# File lib/activemodel/errors/tree.rb, line 14
def messages
  @messages ||= method_tree(:messages)
end

Private Instance Methods

method_tree(method) click to toggle source
# File lib/activemodel/errors/tree.rb, line 24
def method_tree(method)
  result = ActiveSupport::HashWithIndifferentAccess.new
  @errors.keys.each do |original_attribute|
    attribute, sub_attribute = original_attribute.to_s.split(ATTRIBUTE_SEPARATOR, 2) # we really only care about the first one
    if sub_attribute.nil?
      result[attribute] = @errors.send(method)[original_attribute]
    else
      sub_base = @base.send(attribute)
      result[attribute] = sub_base.respond_to?(:map) ? sub_base.map { |r| r.errors.tree.send(method) } : sub_base.errors.tree.send(method)
    end
  end
  result
end