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
-
.array_concat(left, right) ⇒ Ruby::Rego::ArrayValue
-
.array_slice(array, start, stop) ⇒ Ruby::Rego::ArrayValue
-
.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.
-
.reverse(array) ⇒ Ruby::Rego::ArrayValue
-
.sort(array) ⇒ Ruby::Rego::ArrayValue
Class Method Details
.array_concat(left, right) ⇒ Ruby::Rego::ArrayValue
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
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.
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
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
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 |