Class: Ruby::Rego::Compiler
- Inherits:
-
Object
- Object
- Ruby::Rego::Compiler
- Defined in:
- lib/ruby/rego/compiler.rb
Overview
Compiles AST modules into indexed structures for evaluation.
Instance Method Summary collapse
-
#check_conflicts(rules) ⇒ void
Validate a rule set for conflicts.
-
#check_safety(rule) ⇒ void
Validate a rule for safety (unbound variables).
-
#compile(ast_module) ⇒ CompiledModule
Compile an AST module into a compiled module.
-
#index_rules(rules) ⇒ Hash{String => Array<AST::Rule>}
Index rules by name.
-
#initialize(builtin_registry: Builtins::BuiltinRegistry.instance, default_rule_validator: nil) ⇒ Compiler
constructor
Create a compiler instance.
Constructor Details
#initialize(builtin_registry: Builtins::BuiltinRegistry.instance, default_rule_validator: nil) ⇒ Compiler
Create a compiler instance.
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.
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).
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.
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.
45 46 47 |
# File 'lib/ruby/rego/compiler.rb', line 45 def index_rules(rules) rule_indexer.index(rules) end |