class Dry::Schema::Trace
Captures predicates defined within the DSL
@api private
Constants
- INVALID_PREDICATES
Attributes
captures[R]
@api private
compiler[R]
@api private
Public Class Methods
new(compiler = Compiler.new)
click to toggle source
@api private
# File lib/dry/schema/trace.rb, line 26 def initialize(compiler = Compiler.new) @compiler = compiler @captures = [] end
Public Instance Methods
append(op)
click to toggle source
@api private
# File lib/dry/schema/trace.rb, line 58 def append(op) captures << op self end
Also aliased as: <<
class()
click to toggle source
@api private
# File lib/dry/schema/trace.rb, line 81 def class ::Dry::Schema::Trace end
evaluate(*args, **opts)
click to toggle source
@api private
# File lib/dry/schema/trace.rb, line 32 def evaluate(*args, **opts) predicates = opts.empty? ? args : args.push(opts) evaluate_predicates(predicates).each do |rule| append(rule) end self end
evaluate_predicates(predicates)
click to toggle source
@api private
# File lib/dry/schema/trace.rb, line 43 def evaluate_predicates(predicates) predicates.flat_map do |predicate| if predicate.respond_to?(:call) predicate elsif predicate.is_a?(::Array) predicate.map { |pred| evaluate_predicates(pred).reduce(:&) }.reduce(:|) elsif predicate.is_a?(::Hash) predicate.map { |pred, *args| __send__(pred, *args) } else __send__(predicate) end end end
to_ast()
click to toggle source
@api private
# File lib/dry/schema/trace.rb, line 76 def to_ast reduced_rule.to_ast end
to_rule(name = nil)
click to toggle source
@api private
# File lib/dry/schema/trace.rb, line 65 def to_rule(name = nil) return if captures.empty? if name compiler.visit([:key, [name, to_ast]]) else reduced_rule end end
Private Instance Methods
method_missing(meth, *args, &block)
click to toggle source
@api private
Calls superclass method
# File lib/dry/schema/trace.rb, line 93 def method_missing(meth, *args, &block) if meth.to_s.end_with?(QUESTION_MARK) if ::Dry::Schema::Trace::INVALID_PREDICATES.include?(meth) ::Kernel.raise InvalidSchemaError, "#{meth} predicate cannot be used in this context" end unless compiler.supports?(meth) ::Kernel.raise ::ArgumentError, "#{meth} predicate is not defined" end predicate = Predicate.new(compiler, meth, args, block) predicate.ensure_valid predicate else super end end
reduced_rule()
click to toggle source
@api private
# File lib/dry/schema/trace.rb, line 88 def reduced_rule captures.map(&:to_ast).map(&compiler.method(:visit)).reduce(:and) end