Module: Ruby::Rego::Builtins::Aggregates
- Defined in:
- lib/ruby/rego/builtins/aggregates.rb
Overview
Built-in aggregation helpers.
Constant Summary collapse
- AGGREGATE_FUNCTIONS =
{ "count" => :count, "sum" => :sum, "max" => :max, "min" => :min, "all" => :all, "any" => :any }.freeze
Class Method Summary collapse
-
.all(array) ⇒ Ruby::Rego::BooleanValue
-
.any(array) ⇒ Ruby::Rego::BooleanValue
-
.count(collection) ⇒ Ruby::Rego::NumberValue
-
.max(array) ⇒ Ruby::Rego::NumberValue
-
.min(array) ⇒ Ruby::Rego::NumberValue
-
.register! ⇒ Ruby::Rego::Builtins::BuiltinRegistry
-
.sum(array) ⇒ Ruby::Rego::NumberValue
Class Method Details
.all(array) ⇒ Ruby::Rego::BooleanValue
75 76 77 78 |
# File 'lib/ruby/rego/builtins/aggregates.rb', line 75 def self.all(array) Base.assert_type(array, expected: ArrayValue, context: "all") BooleanValue.new(array.value.all?(&:truthy?)) end |
.any(array) ⇒ Ruby::Rego::BooleanValue
82 83 84 85 |
# File 'lib/ruby/rego/builtins/aggregates.rb', line 82 def self.any(array) Base.assert_type(array, expected: ArrayValue, context: "any") BooleanValue.new(array.value.any?(&:truthy?)) end |
.count(collection) ⇒ Ruby::Rego::NumberValue
40 41 42 43 44 45 46 47 48 |
# File 'lib/ruby/rego/builtins/aggregates.rb', line 40 def self.count(collection) Base.assert_type( collection, expected: [ArrayValue, ObjectValue, SetValue, StringValue], context: "count" ) NumberValue.new(collection.value.size) end |
.max(array) ⇒ Ruby::Rego::NumberValue
59 60 61 62 63 |
# File 'lib/ruby/rego/builtins/aggregates.rb', line 59 def self.max(array) numbers = numeric_array(array, name: "max") ensure_non_empty(numbers, name: "max") NumberValue.new(numbers.max) end |
.min(array) ⇒ Ruby::Rego::NumberValue
67 68 69 70 71 |
# File 'lib/ruby/rego/builtins/aggregates.rb', line 67 def self.min(array) numbers = numeric_array(array, name: "min") ensure_non_empty(numbers, name: "min") NumberValue.new(numbers.min) end |
.register! ⇒ Ruby::Rego::Builtins::BuiltinRegistry
21 22 23 24 25 26 27 28 29 |
# File 'lib/ruby/rego/builtins/aggregates.rb', line 21 def self.register! registry = BuiltinRegistry.instance AGGREGATE_FUNCTIONS.each do |name, handler| register_function(registry, name, handler) end registry end |
.sum(array) ⇒ Ruby::Rego::NumberValue
52 53 54 55 |
# File 'lib/ruby/rego/builtins/aggregates.rb', line 52 def self.sum(array) numbers = numeric_array(array, name: "sum") NumberValue.new(numbers.sum) end |