Class: Ruby::Rego::Evaluator

Inherits:
Object
  • Object
show all
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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(compiled_module, input: {}, data: {}) ⇒ Evaluator

Create an evaluator for a compiled module.

Parameters:

  • compiled_module (#rules_by_name, #package_path)

    compiled module

  • input (Object) (defaults to: {})

    input document

  • data (Object) (defaults to: {})

    data document



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.

Returns:

  • (#rules_by_name, #package_path)


93
94
95
# File 'lib/ruby/rego/evaluator.rb', line 93

def compiled_module
  @compiled_module
end

#environmentEnvironment (readonly)

The environment used to evaluate expressions and rules.

Returns:



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.

Parameters:

  • policy_set (CompiledPolicySet)
  • input (Object) (defaults to: {})

    input document

  • data (Object) (defaults to: {})

    data document

Returns:



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.

Parameters:

  • ast_module (AST::Module)

    parsed module

  • options (Hash) (defaults to: {})

    evaluator options (input, data, compiler)

Returns:



56
57
58
59
60
61
# File 'lib/ruby/rego/evaluator.rb', line 56

def self.from_ast(ast_module, options = {})
  default_input = {} # @type var default_input: Hash[untyped, untyped]
  default_data = {} # @type var default_data: Hash[untyped, untyped]
  options = { input: default_input, data: default_data, compiler: Compiler.new }.merge(options)
  new(options[:compiler].compile(ast_module), input: options[:input], data: options[:data])
end

.from_environment(compiled_module, environment) ⇒ Evaluator

Builds an evaluator with a preconfigured environment.

Parameters:

  • compiled_module (#rules_by_name, #package_path)

    compiled module

  • environment (Environment)

    preconfigured environment

Returns:



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.

Parameters:

  • query (Object, nil) (defaults to: nil)

    query path (e.g. “data.package.rule”)

Returns:

  • (Result, nil)

    evaluation result, or nil when a query is undefined



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