Module: Ruby::Rego::Builtins::Collections::ArrayOps

Defined in:
lib/ruby/rego/builtins/collections/array_ops.rb

Overview

Array-focused collection helpers.

Class Method Summary collapse

Class Method Details

.array_concat(left, right) ⇒ Ruby::Rego::ArrayValue

Parameters:

Returns:



43
44
45
46
47
# File 'lib/ruby/rego/builtins/collections/array_ops.rb', line 43

def self.array_concat(left, right)
  left_values = array_values(left, name: "array.concat left")
  right_values = array_values(right, name: "array.concat right")
  ArrayValue.new(left_values + right_values)
end

.array_slice(array, start, stop) ⇒ Ruby::Rego::ArrayValue

Parameters:

Returns:



53
54
55
56
57
# File 'lib/ruby/rego/builtins/collections/array_ops.rb', line 53

def self.array_slice(array, start, stop)
  elements = array_values(array, name: "array.slice array")
  start_index, stop_index = slice_indices(start, stop)
  ArrayValue.new(slice_elements(elements, start_index, stop_index))
end

.flatten(array) ⇒ Ruby::Rego::ArrayValue

Flattens one level only (matching OPA): each directly-nested array’s elements are spliced in, but arrays nested deeper are left intact.

Parameters:

Returns:



35
36
37
38
# File 'lib/ruby/rego/builtins/collections/array_ops.rb', line 35

def self.flatten(array)
  elements = array_values(array, name: "array.flatten")
  ArrayValue.new(elements.flat_map { |element| element.is_a?(ArrayValue) ? element.value : [element] })
end

.reverse(array) ⇒ Ruby::Rego::ArrayValue

Parameters:

Returns:



26
27
28
29
# File 'lib/ruby/rego/builtins/collections/array_ops.rb', line 26

def self.reverse(array)
  elements = array_values(array, name: "array.reverse")
  ArrayValue.new(elements.reverse)
end

.sort(array) ⇒ Ruby::Rego::ArrayValue

Parameters:

Returns:



15
16
17
18
19
20
21
22
# File 'lib/ruby/rego/builtins/collections/array_ops.rb', line 15

def self.sort(array)
  elements = array_values(array, name: "sort")
  return ArrayValue.new([]) if elements.empty?

  ensure_uniform_sort_type(elements)
  sorted = elements.sort_by(&:to_ruby)
  ArrayValue.new(sorted)
end