class Reform::Contract::Result
Collects all native results of a form of all groups and provides a unified API: success?
, errors
, messages
, hints
. success?
returns validity of the branch.
Public Class Methods
new(results, nested_results = [])
click to toggle source
# File lib/reform/result.rb, line 7 def initialize(results, nested_results = []) # DISCUSS: do we like this? @results = results # native Result objects, e.g. `#<Dry::Validation::Result output={:title=>"Fallout", :composer=>nil} errors={}>` @failure = (results + nested_results).find(&:failure?) # TODO: test nested. end
Public Instance Methods
add_error(key, error_text)
click to toggle source
# File lib/reform/result.rb, line 22 def add_error(key, error_text) CustomError.new(key, error_text, @results) end
errors(*args)
click to toggle source
# File lib/reform/result.rb, line 16 def errors(*args); filter_for(:errors, *args) end
failure?()
click to toggle source
# File lib/reform/result.rb, line 12 def failure?; @failure end
hints(*args)
click to toggle source
# File lib/reform/result.rb, line 20 def hints(*args); filter_for(:hints, *args) end
messages(*args)
click to toggle source
# File lib/reform/result.rb, line 18 def messages(*args); filter_for(:messages, *args) end
success?()
click to toggle source
# File lib/reform/result.rb, line 14 def success?; !failure? end
to_results()
click to toggle source
# File lib/reform/result.rb, line 26 def to_results @results end
Private Instance Methods
filter_for(method, *args)
click to toggle source
this doesn’t do nested errors (e.g. )
# File lib/reform/result.rb, line 33 def filter_for(method, *args) @results.collect { |r| r.public_send(method, *args).to_h } .inject({}) { |hah, err| hah.merge(err) { |key, old_v, new_v| (new_v.is_a?(Array) ? (old_v |= new_v) : old_v.merge(new_v)) } } .find_all { |k, v| # filter :nested=>{:something=>["too nested!"]} #DISCUSS: do we want that here? if v.is_a?(Hash) nested_errors = v.select { |attr_key, val| attr_key.is_a?(Integer) && val.is_a?(Array) && val.any? } v = nested_errors.to_a if nested_errors.any? end v.is_a?(Array) }.to_h end