Class: Ruby::Rego::DefaultRuleValidator

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

Overview

Validates default rule values for groundness.

Instance Method Summary collapse

Constructor Details

#initialize(child_node_extractors: DEFAULT_RULE_CHILD_NODE_EXTRACTORS, builtin_registry: Builtins::BuiltinRegistry.instance) ⇒ DefaultRuleValidator

Returns a new instance of DefaultRuleValidator.



122
123
124
125
126
127
128
# File 'lib/ruby/rego/compiler/safety.rb', line 122

def initialize(
  child_node_extractors: DEFAULT_RULE_CHILD_NODE_EXTRACTORS,
  builtin_registry: Builtins::BuiltinRegistry.instance
)
  @child_node_extractors = child_node_extractors
  _ = builtin_registry
end

Instance Method Details

#check(rules_by_name) ⇒ Object

:reek:TooManyStatements



131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/ruby/rego/compiler/safety.rb', line 131

def check(rules_by_name)
  Array(rules_by_name.values).flatten.each do |rule|
    value = rule.default_value
    next unless value
    next if comprehension_value?(value)
    next unless contains_variable_or_reference?(value)

    raise CompilationError.new(
      "Default rule values must be ground (no variables, references, or calls)",
      location: rule.location
    )
  end
end