Class: MeterBox::Query
- Inherits:
-
Object
- Object
- MeterBox::Query
- Defined in:
- lib/meter_box/query.rb
Constant Summary collapse
- ALLOWED_OPTS =
%i[since until where].freeze
Class Method Summary collapse
- .breakdown(owner:, meter:, by:, **opts) ⇒ Object
- .events_for(owner:, meter:, **opts) ⇒ Object
- .over_cap?(owner:, meter:, cap:, **opts) ⇒ Boolean
- .total(owner:, meter:, **opts) ⇒ Object
Class Method Details
.breakdown(owner:, meter:, by:, **opts) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/meter_box/query.rb', line 13 def self.breakdown(owner:, meter:, by:, **opts) validate_opts!(opts) meter_obj = MeterBox.config.fetch(meter) keys = Array(by).map(&:to_sym) keys.each do |k| unless meter_obj.declared_keys.include?(k) raise UnknownDimension, "dimension '#{k}' not declared on meter '#{meter}'" end end scope = build_scope(owner, meter, opts) group_sql = keys.map { |k| "dimensions->>'#{k}'" }.join(", ") raw = Aggregation.apply_grouped(scope, group_sql, meter_obj.aggregation) raw.each_with_object({}) do |(row, val), out| values = Array(row) out[keys.zip(values).to_h] = val end end |
.events_for(owner:, meter:, **opts) ⇒ Object
38 39 40 41 |
# File 'lib/meter_box/query.rb', line 38 def self.events_for(owner:, meter:, **opts) validate_opts!(opts) build_scope(owner, meter, opts) end |
.over_cap?(owner:, meter:, cap:, **opts) ⇒ Boolean
34 35 36 |
# File 'lib/meter_box/query.rb', line 34 def self.over_cap?(owner:, meter:, cap:, **opts) (total(owner: owner, meter: meter, **opts) || 0) >= cap end |
.total(owner:, meter:, **opts) ⇒ Object
7 8 9 10 11 |
# File 'lib/meter_box/query.rb', line 7 def self.total(owner:, meter:, **opts) validate_opts!(opts) meter_obj = MeterBox.config.fetch(meter) Aggregation.apply(build_scope(owner, meter, opts), meter_obj.aggregation) end |