Class: Kameleoon::DataManager::Visitor

Inherits:
Object
  • Object
show all
Defined in:
lib/kameleoon/data/manager/visitor.rb

Overview

Visitor is a container of all data assigned to a visitor. It is thread-safe

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeVisitor

Returns a new instance of Visitor.



24
25
26
27
28
# File 'lib/kameleoon/data/manager/visitor.rb', line 24

def initialize
  @mutex = Concurrent::ReadWriteLock.new
  @legal_consent = false
  update_last_activity_time
end

Instance Attribute Details

#browserObject (readonly)

Returns the value of attribute browser.



21
22
23
# File 'lib/kameleoon/data/manager/visitor.rb', line 21

def browser
  @browser
end

#deviceObject (readonly)

Returns the value of attribute device.



21
22
23
# File 'lib/kameleoon/data/manager/visitor.rb', line 21

def device
  @device
end

#last_activity_timeObject (readonly)

Returns the value of attribute last_activity_time.



21
22
23
# File 'lib/kameleoon/data/manager/visitor.rb', line 21

def last_activity_time
  @last_activity_time
end

Returns the value of attribute legal_consent.



22
23
24
# File 'lib/kameleoon/data/manager/visitor.rb', line 22

def legal_consent
  @legal_consent
end

#user_agentObject (readonly)

Returns the value of attribute user_agent.



21
22
23
# File 'lib/kameleoon/data/manager/visitor.rb', line 21

def user_agent
  @user_agent
end

Instance Method Details

#add_data(log_func, *args) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/kameleoon/data/manager/visitor.rb', line 74

def add_data(log_func, *args)
  @mutex.with_write_lock do
    args.each do |data|
      case data
      when Kameleoon::UserAgent
        add_user_agent(data)
      when Kameleoon::Device
        add_device(data)
      when Kameleoon::Browser
        add_browser(data)
      when Kameleoon::CustomData
        add_custom_data(data)
      when Kameleoon::PageView
        add_page_view(data)
      when Kameleoon::Conversion
        add_conversion(data)
      else
        log_func&.call("Data has unsupported type '#{data.class}'")
      end
    end
  end
end

#assign_variation(variation) ⇒ Object



97
98
99
100
101
102
# File 'lib/kameleoon/data/manager/visitor.rb', line 97

def assign_variation(variation)
  @mutex.with_write_lock do
    @variations = {} if @variations.nil?
    @variations[variation.experiment_id] = variation
  end
end

#conversionsObject



66
67
68
# File 'lib/kameleoon/data/manager/visitor.rb', line 66

def conversions
  DataArrayStorage.new(@mutex, @conversions)
end

#count_sendable_dataObject



45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/kameleoon/data/manager/visitor.rb', line 45

def count_sendable_data
  count = 0
  @mutex.with_read_lock do
    count += 1 unless @device.nil?
    count += 1 unless @browser.nil?
    count += @custom_data_map.size unless @custom_data_map.nil?
    count += @page_view_visits.size unless @page_view_visits.nil?
    count += @conversions.size unless @conversions.nil?
    count += @variations.size unless @variations.nil?
  end
  count
end

#custom_dataObject



58
59
60
# File 'lib/kameleoon/data/manager/visitor.rb', line 58

def custom_data
  DataMapStorage.new(@mutex, @custom_data_map)
end

#enumerate_sendable_data(&blk) ⇒ Object



34
35
36
37
38
39
40
41
42
43
# File 'lib/kameleoon/data/manager/visitor.rb', line 34

def enumerate_sendable_data(&blk)
  blk.call(@device) unless @device.nil?
  blk.call(@browser) unless @browser.nil?
  @mutex.with_read_lock do
    @custom_data_map&.each { |_, cd| blk.call(cd) }
    @page_view_visits&.each { |_, pvv| blk.call(pvv.page_view) }
    @conversions&.each { |c| blk.call(c) }
    @variations&.each { |_, av| blk.call(av) }
  end
end

#page_view_visitsObject



62
63
64
# File 'lib/kameleoon/data/manager/visitor.rb', line 62

def page_view_visits
  DataMapStorage.new(@mutex, @page_view_visits)
end

#update_last_activity_timeObject



30
31
32
# File 'lib/kameleoon/data/manager/visitor.rb', line 30

def update_last_activity_time
  @last_activity_time = Time.new.to_i
end

#variationsObject



70
71
72
# File 'lib/kameleoon/data/manager/visitor.rb', line 70

def variations
  DataMapStorage.new(@mutex, @variations)
end