Class: Ruby::Rego::Evaluator::RuleEvaluator
- Inherits:
-
Object
- Object
- Ruby::Rego::Evaluator::RuleEvaluator
- Includes:
- BindingHelpers
- Defined in:
- lib/ruby/rego/evaluator/rule_evaluator.rb,
lib/ruby/rego/evaluator/rule_evaluator/bindings.rb
Overview
Binding helpers for rule evaluation. :reek:DataClump
Defined Under Namespace
Classes: ModifierContext, QueryContext, ValueEvaluationContext
Instance Method Summary collapse
-
#evaluate_function_call(name, args) ⇒ Value
-
#evaluate_function_call_uncached(name, args) ⇒ Object
-
#evaluate_group(rules) ⇒ Value
-
#evaluate_rule(rule) ⇒ Value, Array
:reek:FeatureEnvy.
-
#initialize(environment:, expression_evaluator:) ⇒ RuleEvaluator
constructor
A new instance of RuleEvaluator.
-
#query_solutions(literals, env = environment) ⇒ Enumerator
private
Constructor Details
#initialize(environment:, expression_evaluator:) ⇒ RuleEvaluator
Returns a new instance of RuleEvaluator.
38 39 40 41 42 |
# File 'lib/ruby/rego/evaluator/rule_evaluator.rb', line 38 def initialize(environment:, expression_evaluator:) @environment = environment @expression_evaluator = expression_evaluator @unifier = Unifier.new end |
Instance Method Details
#evaluate_function_call(name, args) ⇒ Value
60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/ruby/rego/evaluator/rule_evaluator.rb', line 60 def evaluate_function_call(name, args) cache = memoization&.context&.function_values if cache key = [name.to_s, args] return cache[key] if cache.key?(key) cache[key] = evaluate_function_call_uncached(name, args) return cache[key] end evaluate_function_call_uncached(name, args) end |
#evaluate_function_call_uncached(name, args) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/ruby/rego/evaluator/rule_evaluator.rb', line 73 def evaluate_function_call_uncached(name, args) rules = environment.rules.fetch(name.to_s) { [] } function_rules = rules.select(&:function?) return UndefinedValue.new if function_rules.empty? value = evaluate_function_rules(function_rules, args) return value unless value.is_a?(Array) resolved = resolve_conflicts(value, name) resolved || UndefinedValue.new end |
#evaluate_group(rules) ⇒ Value
46 47 48 49 50 51 52 53 54 55 |
# File 'lib/ruby/rego/evaluator/rule_evaluator.rb', line 46 def evaluate_group(rules) return UndefinedValue.new if rules.empty? first_rule = rules.first return UndefinedValue.new if first_rule.function? return evaluate_partial_set_rules(rules) if first_rule.partial_set? return evaluate_partial_object_rules(rules) if first_rule.partial_object? evaluate_complete_rules(rules) end |
#evaluate_rule(rule) ⇒ Value, Array
:reek:FeatureEnvy
88 89 90 91 92 |
# File 'lib/ruby/rego/evaluator/rule_evaluator.rb', line 88 def evaluate_rule(rule) values = rule_body_values(rule) resolved = resolve_conflicts(values, rule.name) resolved || UndefinedValue.new end |
#query_solutions(literals, env = environment) ⇒ Enumerator
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
98 99 100 |
# File 'lib/ruby/rego/evaluator/rule_evaluator.rb', line 98 def query_solutions(literals, env = environment) eval_query(literals, env) end |