Sha256: f8f248b052caf68055c9069b4ad171002e37e3df72d211e71233c5af6be0b67e
Contents?: true
Size: 1.44 KB
Versions: 3
Compression:
Stored size: 1.44 KB
Contents
# frozen_string_literal: true require 'dry/logic/operations/unary' require 'dry/logic/evaluator' require 'dry/logic/result' module Dry module Logic module Operations class Key < Unary attr_reader :evaluator attr_reader :path def self.new(rules, **options) if options[:evaluator] super else name = options.fetch(:name) eval = options.fetch(:evaluator, evaluator(name)) super(rules, **options, evaluator: eval, path: name) end end def self.evaluator(name) Evaluator::Key.new(name) end def initialize(*rules, **options) super @evaluator = options[:evaluator] @path = options[:path] end def type :key end def call(hash) input = evaluator[hash] result = rule.(input) if result.success? Result::SUCCESS else Result.new(false, path) { [type, [path, result.to_ast]] } end end def [](hash) rule[evaluator[hash]] end def ast(input = Undefined) if input.equal?(Undefined) || !input.is_a?(Hash) [type, [path, rule.ast]] else [type, [path, rule.ast(evaluator[input])]] end end def to_s "#{type}[#{path}](#{rule})" end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
dry-logic-1.0.6 | lib/dry/logic/operations/key.rb |
dry-logic-1.0.5 | lib/dry/logic/operations/key.rb |
dry-logic-1.0.4 | lib/dry/logic/operations/key.rb |