Class: Ruby::Rego::Evaluator
- Inherits:
-
Object
- Object
- Ruby::Rego::Evaluator
- Defined in:
- lib/ruby/rego/evaluator.rb,
lib/ruby/rego/evaluator/rule_evaluator.rb,
lib/ruby/rego/evaluator/binding_helpers.rb,
lib/ruby/rego/evaluator/assignment_support.rb,
lib/ruby/rego/evaluator/operator_evaluator.rb,
lib/ruby/rego/evaluator/query_node_builder.rb,
lib/ruby/rego/evaluator/reference_resolver.rb,
lib/ruby/rego/evaluator/variable_collector.rb,
lib/ruby/rego/evaluator/expression_dispatch.rb,
lib/ruby/rego/evaluator/rule_value_provider.rb,
lib/ruby/rego/evaluator/expression_evaluator.rb,
lib/ruby/rego/evaluator/reference_key_resolver.rb,
lib/ruby/rego/evaluator/comprehension_evaluator.rb,
lib/ruby/rego/evaluator/rule_evaluator/bindings.rb,
lib/ruby/rego/evaluator/object_literal_evaluator.rb
Overview
Evaluates compiled Rego modules against input and data.
Defined Under Namespace
Modules: AssignmentSupport, BindingHelpers, OperatorEvaluator, VariableCollectorHelpers Classes: BoundVariableCollector, ComprehensionEvaluator, ExpressionDispatch, ExpressionEvaluator, ObjectLiteralEvaluator, QueryNodeBuilder, ReferenceKeyResolver, ReferenceResolver, RuleEvaluator, RuleValueProvider, TemplateValueFormatter, VariableCollector
Instance Attribute Summary collapse
-
#compiled_module ⇒ #rules_by_name, #package_path
readonly
The compiled module being evaluated.
-
#environment ⇒ Environment
readonly
The environment used to evaluate expressions and rules.
Class Method Summary collapse
-
.from_ast(ast_module, options = {}) ⇒ Evaluator
Build an evaluator directly from an AST module.
-
.from_environment(compiled_module, environment) ⇒ Evaluator
Builds an evaluator with a preconfigured environment.
Instance Method Summary collapse
-
#evaluate(query = nil) ⇒ Result?
Evaluate either a query path or all rules.
-
#initialize(compiled_module, input: {}, data: {}) ⇒ Evaluator
constructor
Create an evaluator for a compiled module.
Constructor Details
#initialize(compiled_module, input: {}, data: {}) ⇒ Evaluator
Create an evaluator for a compiled module.
59 60 61 62 63 64 65 |
# File 'lib/ruby/rego/evaluator.rb', line 59 def initialize(compiled_module, input: {}, data: {}) @compiled_module = compiled_module rules_by_name = compiled_module.rules_by_name package_path = compiled_module.package_path @environment = Environment.new(input: input, data: data, rules: rules_by_name) @expression_evaluator, @rule_evaluator = build_evaluators(rules_by_name, package_path) end |
Instance Attribute Details
#compiled_module ⇒ #rules_by_name, #package_path (readonly)
The compiled module being evaluated.
70 71 72 |
# File 'lib/ruby/rego/evaluator.rb', line 70 def compiled_module @compiled_module end |
#environment ⇒ Environment (readonly)
The environment used to evaluate expressions and rules.
75 76 77 |
# File 'lib/ruby/rego/evaluator.rb', line 75 def environment @environment end |
Class Method Details
.from_ast(ast_module, options = {}) ⇒ Evaluator
Build an evaluator directly from an AST module.
47 48 49 50 51 52 |
# File 'lib/ruby/rego/evaluator.rb', line 47 def self.from_ast(ast_module, = {}) default_input = {} # @type var default_input: Hash[untyped, untyped] default_data = {} # @type var default_data: Hash[untyped, untyped] = { input: default_input, data: default_data, compiler: Compiler.new }.merge() new([:compiler].compile(ast_module), input: [:input], data: [:data]) end |
.from_environment(compiled_module, environment) ⇒ Evaluator
Builds an evaluator with a preconfigured environment.
36 37 38 39 40 |
# File 'lib/ruby/rego/evaluator.rb', line 36 def self.from_environment(compiled_module, environment) evaluator = allocate evaluator.send(:initialize_with_environment, compiled_module, environment) evaluator end |
Instance Method Details
#evaluate(query = nil) ⇒ Result?
Evaluate either a query path or all rules.
81 82 83 84 85 86 87 |
# File 'lib/ruby/rego/evaluator.rb', line 81 def evaluate(query = nil) environment.memoization.reset! value, bindings = query ? evaluate_query(query) : [evaluate_rules, nil] return nil if query && value.is_a?(UndefinedValue) ResultBuilder.new(value, bindings).build end |