Class: Cosmos::AggregatePacketProcesser

Inherits:
Object
  • Object
show all
Defined in:
lib/cosmos/unpacking_interface/aggregate_packet_processor.rb

Overview

Encapsulates the transformation of an aggregate packet into many simple packets

Instance Method Summary collapse

Constructor Details

#initialize(mapper, transforms = {}) ⇒ AggregatePacketProcesser

Returns a new instance of AggregatePacketProcesser.



8
9
10
11
# File 'lib/cosmos/unpacking_interface/aggregate_packet_processor.rb', line 8

def initialize(mapper, transforms = {})
  @mapper = mapper
  @transforms = transforms
end

Instance Method Details

#_extract_map(map, target, item) ⇒ Object

Extract our internal BaseNameMap into an array of packets of type target/item, applying transformations if applicable



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/cosmos/unpacking_interface/aggregate_packet_processor.rb', line 23

def _extract_map(map, target, item)
  map.extract_all.each_with_index.map do |m, i| 
   keys = m.keys
   pkt = System.telemetry.packet(target, item).clone 

   keys.reduce(pkt) do |p, key|
     value = m[key]
     transform_key = [target, item, key].join("-")

     if @transforms[transform_key]
       p.write(key, @transforms[transform_key].call(target, item, key, value, i))
     else
       p.write(key, value)
     end
     p
   end 
  end
end

#unpack(packet, target, item) ⇒ Object

Converts the aggregate packet into an array of simple packets.



15
16
17
18
# File 'lib/cosmos/unpacking_interface/aggregate_packet_processor.rb', line 15

def unpack(packet, target, item) 
  values_map = @mapper.build_map(packet) # 
  _extract_map(values_map, target, item)
end