Class: SplitIoClient::Cache::Senders::ImpressionsFormatter

Inherits:
Object
  • Object
show all
Defined in:
lib/splitclient-rb/cache/senders/impressions_formatter.rb

Instance Method Summary collapse

Constructor Details

#initialize(impressions_repository) ⇒ ImpressionsFormatter

Returns a new instance of ImpressionsFormatter.



5
6
7
# File 'lib/splitclient-rb/cache/senders/impressions_formatter.rb', line 5

def initialize(impressions_repository)
  @impressions_repository = impressions_repository
end

Instance Method Details

#call(raw_impressions) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/splitclient-rb/cache/senders/impressions_formatter.rb', line 9

def call(raw_impressions)
  impressions = raw_impressions ? raw_impressions : @impressions_repository.clear
  formatted_impressions = []
  filtered_impressions = filter_impressions(impressions)

  return [] if impressions.empty? || filtered_impressions.empty?

  formatted_impressions = unique_features(filtered_impressions).each_with_object([]) do |feature, memo|
    ip = nil
    current_impressions =
      filtered_impressions
        .select { |impression| impression[:feature] == feature }
        .map do |impression|
          ip = impression[:ip]
          {
            keyName: impression[:impressions]['keyName'] || impression[:impressions]['key_name'],
            treatment: impression[:impressions]['treatment'],
            time: impression[:impressions]['time'],
            bucketingKey: impression[:impressions]['bucketingKey'] || impression[:impressions]['bucketing_key'],
            label: impression[:impressions]['label'],
            changeNumber: impression[:impressions]['changeNumber'] || impression[:impressions]['change_number'],
          }
        end

    memo << {
      testName: feature,
      keyImpressions: current_impressions,
      ip: ip
    }
  end

  formatted_impressions
end