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

Extended by:
RegistryHelpers
Defined in:
lib/ruby/rego/builtins/collections.rb,
lib/ruby/rego/builtins/collections/set_ops.rb,
lib/ruby/rego/builtins/collections/array_ops.rb,
lib/ruby/rego/builtins/collections/object_ops.rb

Overview

Built-in collection helpers.

Defined Under Namespace

Modules: ArrayOps, ObjectOps, SetOps

Constant Summary collapse

MISSING_SET_ARGUMENT =
Object.new.freeze
COLLECTION_FUNCTIONS =
{
  "set" => { arity: [0, 1], handler: :set },
  "sort" => { arity: 1, handler: :sort },
  "array.reverse" => { arity: 1, handler: :array_reverse },
  "array.concat" => { arity: 2, handler: :array_concat },
  "array.slice" => { arity: 3, handler: :array_slice },
  "array.flatten" => { arity: 1, handler: :array_flatten },
  "object.get" => { arity: 3, handler: :object_get },
  "object.subset" => { arity: 2, handler: :object_subset },
  "object.keys" => { arity: 1, handler: :object_keys },
  "object.remove" => { arity: 2, handler: :object_remove },
  "object.union" => { arity: 2, handler: :object_union },
  "object.union_n" => { arity: 1, handler: :object_union_n },
  "object.filter" => { arity: 2, handler: :object_filter },
  "union" => { arity: 2, handler: :union },
  "intersection" => { arity: 2, handler: :intersection },
  "set_diff" => { arity: 2, handler: :set_diff }
}.freeze

Class Method Summary collapse

Methods included from RegistryHelpers

register_configured_functions

Class Method Details

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

Parameters:

Returns:



71
72
73
# File 'lib/ruby/rego/builtins/collections.rb', line 71

def self.array_concat(left, right)
  ArrayOps.array_concat(left, right)
end

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

Parameters:

Returns:



91
92
93
# File 'lib/ruby/rego/builtins/collections.rb', line 91

def self.array_flatten(array)
  ArrayOps.flatten(array)
end

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

Parameters:

Returns:



85
86
87
# File 'lib/ruby/rego/builtins/collections.rb', line 85

def self.array_reverse(array)
  ArrayOps.reverse(array)
end

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

Parameters:

Returns:



79
80
81
# File 'lib/ruby/rego/builtins/collections.rb', line 79

def self.array_slice(array, start, stop)
  ArrayOps.array_slice(array, start, stop)
end

.intersection(left, right) ⇒ Ruby::Rego::SetValue

Parameters:

Returns:



156
157
158
# File 'lib/ruby/rego/builtins/collections.rb', line 156

def self.intersection(left, right)
  SetOps.intersection(left, right)
end

.object_filter(object, keys) ⇒ Ruby::Rego::ObjectValue

Parameters:

Returns:



139
140
141
# File 'lib/ruby/rego/builtins/collections.rb', line 139

def self.object_filter(object, keys)
  ObjectOps.object_filter(object, keys)
end

.object_get(object, key, default) ⇒ Ruby::Rego::Value

Parameters:

Returns:



106
107
108
# File 'lib/ruby/rego/builtins/collections.rb', line 106

def self.object_get(object, key, default)
  ObjectOps.object_get(object, key, default)
end

.object_keys(object) ⇒ Ruby::Rego::SetValue

Parameters:

Returns:



112
113
114
# File 'lib/ruby/rego/builtins/collections.rb', line 112

def self.object_keys(object)
  ObjectOps.object_keys(object)
end

.object_remove(object, keys) ⇒ Ruby::Rego::ObjectValue

Parameters:

Returns:



119
120
121
# File 'lib/ruby/rego/builtins/collections.rb', line 119

def self.object_remove(object, keys)
  ObjectOps.object_remove(object, keys)
end

.object_subset(super_value, sub_value) ⇒ Ruby::Rego::BooleanValue

Parameters:

Returns:



98
99
100
# File 'lib/ruby/rego/builtins/collections.rb', line 98

def self.object_subset(super_value, sub_value)
  ObjectOps.subset(super_value, sub_value)
end

.object_union(left, right) ⇒ Ruby::Rego::ObjectValue

Parameters:

Returns:



126
127
128
# File 'lib/ruby/rego/builtins/collections.rb', line 126

def self.object_union(left, right)
  ObjectOps.object_union(left, right)
end

.object_union_n(array) ⇒ Ruby::Rego::ObjectValue

Parameters:

Returns:



132
133
134
# File 'lib/ruby/rego/builtins/collections.rb', line 132

def self.object_union_n(array)
  ObjectOps.object_union_n(array)
end

.register!Ruby::Rego::Builtins::BuiltinRegistry



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

def self.register!
  registry = BuiltinRegistry.instance

  register_configured_functions(registry, COLLECTION_FUNCTIONS)

  registry
end

.set(value = MISSING_SET_ARGUMENT) ⇒ Ruby::Rego::SetValue

Parameters:

Returns:



59
60
61
62
63
64
65
66
# File 'lib/ruby/rego/builtins/collections.rb', line 59

def self.set(value = MISSING_SET_ARGUMENT)
  return SetValue.new([]) if value.equal?(MISSING_SET_ARGUMENT)

  Base.assert_type(value, expected: [ArrayValue, SetValue], context: "set")
  return value if value.is_a?(SetValue)

  SetValue.new(value.value)
end

.set_diff(left, right) ⇒ Ruby::Rego::SetValue

Parameters:

Returns:



163
164
165
# File 'lib/ruby/rego/builtins/collections.rb', line 163

def self.set_diff(left, right)
  SetOps.set_diff(left, right)
end

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

Parameters:

Returns:



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

def self.sort(array)
  ArrayOps.sort(array)
end

.union(left, right) ⇒ Ruby::Rego::Value

Parameters:

Returns:



146
147
148
149
150
151
# File 'lib/ruby/rego/builtins/collections.rb', line 146

def self.union(left, right)
  return SetOps.union_sets(left, right) if left.is_a?(SetValue) && right.is_a?(SetValue)
  return ObjectOps.union_objects(left, right) if left.is_a?(ObjectValue) && right.is_a?(ObjectValue)

  raise_union_type_error(left, right)
end