Class: Ruby::Rego::Parser::RuleHeadPathBuilder

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

Overview

Builds nested object values for rule head segments.

Instance Method Summary collapse

Constructor Details

#initialize(head:, segments:, location:) ⇒ RuleHeadPathBuilder

Returns a new instance of RuleHeadPathBuilder.

Parameters:

  • head (Hash)
  • segments (Array<AST::expression>)
  • location (Location)


311
312
313
314
315
# File 'lib/ruby/rego/parser/rules.rb', line 311

def initialize(head:, segments:, location:)
  @head = head
  @segments = segments
  @location = location
end

Instance Method Details

#callHash

Returns:

  • (Hash)


318
319
320
321
322
323
324
325
326
327
328
329
330
331
# File 'lib/ruby/rego/parser/rules.rb', line 318

def call
  key_segment, *remaining = segments
  return head unless key_segment

  value_node = head[:value] || AST::BooleanLiteral.new(value: true, location: location)
  value_node = build_nested_value(remaining, value_node)

  head.merge(
    type: :partial_object,
    key: normalize(key_segment),
    value: value_node,
    nested: remaining.any?
  )
end