Class: Ruby::Rego::Evaluator
- Inherits:
-
Object
- Object
- Ruby::Rego::Evaluator
- Defined in:
- lib/ruby/rego/evaluator.rb,
lib/ruby/rego/evaluator/policy_set.rb,
lib/ruby/rego/evaluator/module_wiring.rb,
lib/ruby/rego/evaluator/single_module.rb,
lib/ruby/rego/evaluator/rule_evaluator.rb,
lib/ruby/rego/evaluator/binding_helpers.rb,
lib/ruby/rego/evaluator/local_shadowing.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/rule_evaluator/query.rb,
lib/ruby/rego/evaluator/reference_key_resolver.rb,
lib/ruby/rego/evaluator/comprehension_evaluator.rb,
lib/ruby/rego/evaluator/module_context_registry.rb,
lib/ruby/rego/evaluator/rule_evaluator/bindings.rb,
lib/ruby/rego/evaluator/object_literal_evaluator.rb,
lib/ruby/rego/evaluator/template_value_formatter.rb,
lib/ruby/rego/evaluator/reference_resolver/caching.rb,
lib/ruby/rego/evaluator/reference_resolver/imports.rb,
lib/ruby/rego/evaluator/rule_evaluator/rule_bodies.rb,
lib/ruby/rego/evaluator/rule_evaluator/rule_values.rb,
lib/ruby/rego/evaluator/rule_evaluator/partial_rules.rb,
lib/ruby/rego/evaluator/rule_evaluator/function_rules.rb,
lib/ruby/rego/evaluator/expression_evaluator/operators.rb,
lib/ruby/rego/evaluator/expression_evaluator/quantifiers.rb,
lib/ruby/rego/evaluator/variable_collector/pattern_names.rb,
lib/ruby/rego/evaluator/reference_resolver/path_resolution.rb,
lib/ruby/rego/evaluator/variable_collector/dispatch_tables.rb,
lib/ruby/rego/evaluator/expression_evaluator/node_evaluation.rb,
lib/ruby/rego/evaluator/reference_resolver/static_key_builder.rb,
lib/ruby/rego/evaluator/variable_collector/bound_variable_collector.rb
Overview
Evaluates compiled Rego modules against input and data. :reek:InstanceVariableAssumption
Defined Under Namespace
Modules: AssignmentSupport, BindingHelpers, LocalShadowing, OperatorEvaluator, VariableCollectorHelpers Classes: BoundVariableCollector, ComprehensionEvaluator, ExpressionDispatch, ExpressionEvaluator, ModuleContext, ModuleContextRegistry, 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
-
.for_policy_set(policy_set, input: {}, data: {}) ⇒ Evaluator
Build an evaluator over a compiled policy set.
-
.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.
80 81 82 83 84 85 86 87 88 |
# File 'lib/ruby/rego/evaluator.rb', line 80 def initialize(compiled_module, input: {}, data: {}) @policy_set = nil @module_contexts = nil @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.
93 94 95 |
# File 'lib/ruby/rego/evaluator.rb', line 93 def compiled_module @compiled_module end |
#environment ⇒ Environment (readonly)
The environment used to evaluate expressions and rules.
98 99 100 |
# File 'lib/ruby/rego/evaluator.rb', line 98 def environment @environment end |
Class Method Details
.for_policy_set(policy_set, input: {}, data: {}) ⇒ Evaluator
Build an evaluator over a compiled policy set.
69 70 71 72 73 |
# File 'lib/ruby/rego/evaluator.rb', line 69 def self.for_policy_set(policy_set, input: {}, data: {}) evaluator = allocate evaluator.send(:initialize_with_policy_set, policy_set, input: input, data: data) evaluator end |
.from_ast(ast_module, options = {}) ⇒ Evaluator
Build an evaluator directly from an AST module.
56 57 58 59 60 61 |
# File 'lib/ruby/rego/evaluator.rb', line 56 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.
45 46 47 48 49 |
# File 'lib/ruby/rego/evaluator.rb', line 45 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.
104 105 106 107 |
# File 'lib/ruby/rego/evaluator.rb', line 104 def evaluate(query = nil) environment.memoization.reset! environment.using_builtin_registry(impure_registry) { evaluate_query_or_rules(query) } end |