lib/dry/logic/rule/value.rb
module Dry module Logic class Rule::Value < Rule def type :val end def nulary? arity == 0 end def arity @arity ||= predicate.arity end def args @args ||= predicate.args end def input predicate.args.last end def call(input) if nulary? Logic.Result(predicate.(), self, input) else evaled = evaluate(input) result = apply(evaled) rule = result == true ? self : curry(evaled) Logic.Result(result, rule, input) end end def apply(input) predicate.(input) end def evaluate(input) input end def to_ast [type, predicate.to_ast] end end end end