class Cosmos::AggregatePacketProcesser

Encapsulates the transformation of an aggregate packet into many simple packets

Public Class Methods

new(mapper, transforms = {}) click to toggle source
# File lib/cosmos/unpacking_interface/aggregate_packet_processor.rb, line 8
def initialize(mapper, transforms = {})
  @mapper = mapper
  @transforms = transforms
end

Public Instance Methods

_extract_map(map, target, item) click to toggle source

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

# 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) click to toggle source

Converts the aggregate packet into an array of simple packets.

# 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