Exception: SplitIoClient::Impressions

Inherits:
NoMethodError
  • Object
show all
Defined in:
lib/engine/impressions/impressions.rb

Overview

class to manage cached impressions

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(max) ⇒ Impressions

initializes the class

Parameters:

  • max (int)

    max number of cached entries



22
23
24
25
# File 'lib/engine/impressions/impressions.rb', line 22

def initialize(max)
  @queue = Queue.new
  @max_number_of_keys = max
end

Instance Attribute Details

#max_number_of_keysint

max number of cached entries for impressions

Returns:

  • (int)

    max numbre of entries



16
17
18
# File 'lib/engine/impressions/impressions.rb', line 16

def max_number_of_keys
  @max_number_of_keys
end

#queueobject

the queue of cached impression values

Returns:

  • (object)

    array of impressions



11
12
13
# File 'lib/engine/impressions/impressions.rb', line 11

def queue
  @queue
end

Instance Method Details

#clearObject

clears the impressions queue



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/engine/impressions/impressions.rb', line 45

def clear
  popped_impressions = []
  begin
    loop do
      impression_element = @queue.pop(true)
      feature_hash = popped_impressions.find { |i| i[:feature] == impression_element[:feature] }
      if feature_hash.nil?
        popped_impressions << {feature: impression_element[:feature], impressions: [] << impression_element[:impressions]}
      else
        feature_hash[:impressions] << impression_element[:impressions]
      end
    end
  rescue ThreadError
  end
  popped_impressions
end

#log(id, feature, treatment, time) ⇒ Object

generates a new entry for impressions list

Parameters:

  • id (string)

    user key

  • feature (string)

    feature name

  • treatment (string)

    treatment value

  • time (time)

    time value in milisenconds

Returns:

  • void



36
37
38
39
# File 'lib/engine/impressions/impressions.rb', line 36

def log(id, feature, treatment, time)
  impressions = KeyImpressions.new(id, treatment, time)
  @queue << {feature: feature, impressions: impressions}
end