class Validate::Constraints::ValidationContext
Attributes
value[R]
violations[R]
Public Class Methods
key(key, violations = [])
click to toggle source
# File lib/validate/constraints/validation_context.rb, line 14 def self.key(key, violations = []) new(key, Path.new([KeyPath.new(key)]), violations) end
new(value, path = Path.new, violations = [])
click to toggle source
# File lib/validate/constraints/validation_context.rb, line 21 def initialize(value, path = Path.new, violations = []) @value = value @path = path @violations = violations @keys = Hash.new do |hash, key| unless @value.respond_to?(:[]) || @value.respond_to_missing?(:[]) raise Error::KeyError, "#{key.inspect}: value doesn't respond to :[]" end begin hash[key] = child_context(@value[key], KeyPath.new(key)) rescue => e raise Error::KeyError, "#{key.inspect}: #{e.message}", cause: e end end @attrs = Hash.new do |hash, attr| unless @value.respond_to?(attr) || @value.respond_to_missing?(attr) raise Error::NameError, "#{attr.inspect}: value doesn't respond to #{attr.inspect}" end hash[attr] = child_context(@value.send(attr), AttrPath.new(attr)) end end
none()
click to toggle source
# File lib/validate/constraints/validation_context.rb, line 6 def self.none @none ||= None.new end
root(value, violations = [])
click to toggle source
# File lib/validate/constraints/validation_context.rb, line 10 def self.root(value, violations = []) new(value, Path.new, violations) end
Public Instance Methods
[](key)
click to toggle source
# File lib/validate/constraints/validation_context.rb, line 47 def [](key) @keys[key] end
add_violation(constraint)
click to toggle source
# File lib/validate/constraints/validation_context.rb, line 55 def add_violation(constraint) @violations << create_violation(constraint) self end
attr(name)
click to toggle source
# File lib/validate/constraints/validation_context.rb, line 51 def attr(name) @attrs[name] end
clear_violations()
click to toggle source
# File lib/validate/constraints/validation_context.rb, line 60 def clear_violations @violations.clear self end
has_violations?()
click to toggle source
# File lib/validate/constraints/validation_context.rb, line 65 def has_violations? !@violations.empty? end
merge(other)
click to toggle source
# File lib/validate/constraints/validation_context.rb, line 75 def merge(other) other.violations.each do |violation| @violations << Constraint::Violation.new(violation.value, @path.child(violation.path), violation.constraint) end self end
to_err(backtrace = [])
click to toggle source
# File lib/validate/constraints/validation_context.rb, line 69 def to_err(backtrace = []) err = Error::ConstraintViolationError.new(@violations.freeze) err.set_backtrace(backtrace) err end
Private Instance Methods
child_context(value, path)
click to toggle source
# File lib/validate/constraints/validation_context.rb, line 88 def child_context(value, path) ValidationContext.new(value, @path.child(path), @violations) end
create_violation(constraint)
click to toggle source
# File lib/validate/constraints/validation_context.rb, line 84 def create_violation(constraint) Constraint::Violation.new(@value, @path, constraint) end