Class: Ruby::Rego::Compiler

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

Overview

Compiles AST modules into indexed structures for evaluation.

Instance Method Summary collapse

Constructor Details

#initialize(builtin_registry: Builtins::BuiltinRegistry.instance, default_rule_validator: nil) ⇒ Compiler

Create a compiler instance.

Parameters:



20
21
22
23
# File 'lib/ruby/rego/compiler.rb', line 20

def initialize(builtin_registry: Builtins::BuiltinRegistry.instance, default_rule_validator: nil)
  @builtin_registry = builtin_registry
  @default_rule_validator = default_rule_validator
end

Instance Method Details

#check_conflicts(rules) ⇒ void

This method returns an undefined value.

Validate a rule set for conflicts.

Parameters:



53
54
55
# File 'lib/ruby/rego/compiler.rb', line 53

def check_conflicts(rules)
  conflict_checker.check(rules)
end

#check_safety(rule) ⇒ void

This method returns an undefined value.

Validate a rule for safety (unbound variables).

Parameters:



61
62
63
# File 'lib/ruby/rego/compiler.rb', line 61

def check_safety(rule)
  safety_checker.check_rule(rule)
end

#compile(ast_module) ⇒ CompiledModule

Compile an AST module into a compiled module.

Parameters:

Returns:



29
30
31
32
33
34
35
36
37
38
39
# File 'lib/ruby/rego/compiler.rb', line 29

def compile(ast_module)
  rules_by_name = compile_rules(ast_module)
  package_path = ast_module.package.path
  dependency_graph = dependency_graph_builder.build(rules_by_name, package_path)
  artifacts = CompilationArtifacts.new(
    rules_by_name: rules_by_name,
    package_path: package_path,
    dependency_graph: dependency_graph
  )
  CompiledModuleBuilder.build(ast_module, artifacts)
end

#index_rules(rules) ⇒ Hash{String => Array<AST::Rule>}

Index rules by name.

Parameters:

  • rules (Array<AST::Rule>)

    rules to index

Returns:

  • (Hash{String => Array<AST::Rule>})

    rules indexed by name



45
46
47
# File 'lib/ruby/rego/compiler.rb', line 45

def index_rules(rules)
  rule_indexer.index(rules)
end