class Subvalid::ValidationResult

Attributes

children[R]
errors[R]

Public Class Methods

new() click to toggle source
# File lib/subvalid/validation_result.rb, line 5
def initialize
  @errors = []
  @children = {}
end

Public Instance Methods

[](attribute) click to toggle source
# File lib/subvalid/validation_result.rb, line 18
def [](attribute)
  children[attribute]
end
add_error(error) click to toggle source
# File lib/subvalid/validation_result.rb, line 14
def add_error(error)
  errors << error
end
flatten(parent_attributes=[]) click to toggle source
# File lib/subvalid/validation_result.rb, line 40
def flatten(parent_attributes=[])
  # TODO make this more flexible than just hardcoded format
  flat_errors = errors.map{|error|
    if parent_attributes.empty?
      error
    else
      human_keys = parent_attributes.map{|a| a.to_s.gsub('_', ' ')}
      [human_keys.join(", "), error].join(": ")
    end
  }
  children.each do |attribute, child|
    flat_errors += child.flatten(parent_attributes + [attribute])
  end
  flat_errors
end
merge_child!(attribute, result) click to toggle source
# File lib/subvalid/validation_result.rb, line 22
def merge_child!(attribute, result)
  child = children[attribute]
  if child
    child.merge!(result)
  else
    children[attribute] = result
  end
end
to_h() click to toggle source
# File lib/subvalid/validation_result.rb, line 31
def to_h
  hash = {}
  hash[:errors] = errors.dup unless errors.empty?
  children.each do |attribute, child|
    hash[attribute] = child.to_h unless child.valid?
  end
  hash
end
valid?() click to toggle source
# File lib/subvalid/validation_result.rb, line 10
def valid?
  errors.empty? && children.values.all?(&:valid?)
end

Protected Instance Methods

merge!(result) click to toggle source
# File lib/subvalid/validation_result.rb, line 57
def merge!(result)
  @errors += result.errors
  children.merge!(result.children){|key, old_child, new_child|
    old_child.merge!(new_child)
    old_child
  }
end