Class: Ruby::Rego::Evaluator::ExpressionDispatch

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby/rego/evaluator/expression_dispatch.rb

Overview

Dispatches expression evaluation for primitive and AST nodes.

Instance Method Summary collapse

Constructor Details

#initialize(primitive_types:, node_evaluators:) ⇒ ExpressionDispatch

Returns a new instance of ExpressionDispatch.

Parameters:

  • primitive_types (Array<Class>)
  • node_evaluators (Array<Array<Class, Proc>>)


10
11
12
13
14
# File 'lib/ruby/rego/evaluator/expression_dispatch.rb', line 10

def initialize(primitive_types:, node_evaluators:)
  @primitive_types = primitive_types
  @node_evaluators = node_evaluators
  @handler_cache = {} # @type var handler_cache: Hash[Class, Proc?]
end

Instance Method Details

#dispatch_node(node, evaluator) ⇒ Value?

Parameters:

Returns:



27
28
29
30
# File 'lib/ruby/rego/evaluator/expression_dispatch.rb', line 27

def dispatch_node(node, evaluator)
  handler = handler_for(node)
  handler&.call(node, evaluator)
end

#primitive_value(node) ⇒ Value?

Parameters:

  • node (Object)

Returns:



18
19
20
21
22
# File 'lib/ruby/rego/evaluator/expression_dispatch.rb', line 18

def primitive_value(node)
  return Value.from_ruby(node) if primitive_types.any? { |klass| node.is_a?(klass) }

  nil
end