Class: MeterBox::Recorder

Inherits:
Object
  • Object
show all
Defined in:
lib/meter_box/recorder.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.call(**kwargs) ⇒ Object



5
6
7
# File 'lib/meter_box/recorder.rb', line 5

def self.call(**kwargs)
  new.call(**kwargs)
end

Instance Method Details

#call(owner:, meter:, value: 1, dimensions: {}, metadata: {}, idempotency_key: nil, recorded_at: nil) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/meter_box/recorder.rb', line 9

def call(owner:, meter:, value: 1, dimensions: {}, metadata: {},
         idempotency_key: nil, recorded_at: nil)
  validate_owner!(owner)
  meter_obj = MeterBox.config.fetch(meter)
  validate_value!(value)
  validate_metadata!()
  meter_obj.validate_dimensions!(dimensions)

  attrs = {
    owner_type:      owner.class.name,
    owner_id:        owner.id.to_s,
    meter_name:      meter_obj.name.to_s,
    value:           value,
    dimensions:      stringify(dimensions),
    metadata:        stringify_keys(),
    idempotency_key: idempotency_key,
    recorded_at:     recorded_at || Time.current
  }

  insert_with_idempotency(attrs)
end