Sha256: a3119d2942bceb788c1beabf35d7219af0323a2c35b6d4f7d8f684e719cb851f
Contents?: true
Size: 1.33 KB
Versions: 2
Compression:
Stored size: 1.33 KB
Contents
require 'dry/validation/rule' module Dry module Validation class RuleCompiler attr_reader :predicates def initialize(predicates) @predicates = predicates end def call(ast) ast.map { |node| visit(node) } end def visit(node) name, nodes = node send(:"visit_#{name}", nodes) end def visit_key(node) name, predicate = node Rule::Key.new(name, visit(predicate)) end def visit_val(node) name, predicate = node Rule::Value.new(name, visit(predicate)) end def visit_set(node) name, rules = node Rule::Set.new(name, call(rules)) end def visit_each(node) name, rule = node Rule::Each.new(name, visit(rule)) end def visit_predicate(node) name, args = node predicates[name].curry(*args) end def visit_and(node) left, right = node visit(left) & visit(right) end def visit_or(node) left, right = node visit(left) | visit(right) end def visit_implication(node) left, right = node visit(left) > visit(right) end def visit_group(node) identifier, predicate = node Rule::Group.new(identifier, visit(predicate)) end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
dry-validation-0.3.1 | lib/dry/validation/rule_compiler.rb |
dry-validation-0.3.0 | lib/dry/validation/rule_compiler.rb |