class Objecheck::Validator::Collector
Collector
is used in Validator#validate to aggregate errors
Attributes
current_rule_name[R]
current_t[R]
prefix_stack[R]
Public Class Methods
new(validator, parent = nil)
click to toggle source
# File lib/objecheck/validator/collector.rb, line 22 def initialize(validator, parent = nil) @validator = validator @current_validation_result = true @current_rule_name = parent ? parent.current_rule_name : nil @prefix_stack = parent ? [parent.prefix_stack.join('')] : [] @errors = [] @current_t = nil end
Public Instance Methods
add_error(msg)
click to toggle source
# File lib/objecheck/validator/collector.rb, line 38 def add_error(msg) @current_validation_result = false @errors << "#{@prefix_stack.join('')}: #{@current_rule_name}: #{msg}" end
add_prefix_in(prefix) { || ... }
click to toggle source
# File lib/objecheck/validator/collector.rb, line 31 def add_prefix_in(prefix) @prefix_stack.push(prefix) yield ensure @prefix_stack.pop end
commit(t)
click to toggle source
# File lib/objecheck/validator/collector.rb, line 66 def commit(t) check_transaction(t) @current_t = nil @errors.concat(t.errors) end
errors()
click to toggle source
# File lib/objecheck/validator/collector.rb, line 56 def errors @errors.dup end
rollback(t)
click to toggle source
# File lib/objecheck/validator/collector.rb, line 72 def rollback(t) check_transaction(t) @current_t = nil end
transaction()
click to toggle source
# File lib/objecheck/validator/collector.rb, line 60 def transaction raise Objecheck::Error, 'another transaction is already created' if @current_t @current_t = self.class.new(@validator, self) end
validate(target, rules)
click to toggle source
# File lib/objecheck/validator/collector.rb, line 43 def validate(target, rules) prev_rule_name = @current_rule_name prev_validation_result = @current_validation_result rules.each do |name, rule| @current_rule_name = name rule.validate(target, self) end @current_validation_result ensure @current_rule_name = prev_rule_name @current_validation_result = prev_validation_result end
Private Instance Methods
check_transaction(t)
click to toggle source
# File lib/objecheck/validator/collector.rb, line 79 def check_transaction(t) raise Objecheck::Error, 'transaction is not created' if !@current_t raise Objecheck::Error, "invalid transaction #{t} (current: #{@current_t})" if !t.equal?(@current_t) raise Objecheck::Error, "transaction hash uncommited nested transaction (#{t.current_t})" if t.current_t end