Module: Workarea::CurrentTracking

Extended by:
ActiveSupport::Concern
Included in:
ApplicationController, CurrentSegments
Defined in:
app/controllers/workarea/current_tracking.rb

Instance Method Summary collapse

Instance Method Details

#current_metricsObject



17
18
19
# File 'app/controllers/workarea/current_tracking.rb', line 17

def current_metrics
  current_visit.metrics
end

#current_referrerObject



21
22
23
# File 'app/controllers/workarea/current_tracking.rb', line 21

def current_referrer
  current_visit.referrer
end

#current_visitObject



13
14
15
# File 'app/controllers/workarea/current_tracking.rb', line 13

def current_visit
  request.env['workarea.visit']
end

#ensure_current_metricsObject

This method is mostly for tests, but could surface in an implementation. Since Rails doesn’t set and load a session until needed, an initial request won’t have a session ID for ‘current_visit` to check when loading metrics. This ensures there will be one.



45
46
47
48
49
50
51
# File 'app/controllers/workarea/current_tracking.rb', line 45

def ensure_current_metrics
  return if current_metrics_id.present? || http_caching?

  # This forces Rails to initialize the session, which provides an ID for metrics
  session.delete(:foo)
  self.current_metrics_id = session.id.cookie_value
end

#update_tracking!(email: current_user&.email) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'app/controllers/workarea/current_tracking.rb', line 25

def update_tracking!(email: current_user&.email)
  if email.blank?
    cookies.delete(:email)
  elsif email != cookies.signed[:email]
    unless impersonating?
      Metrics::User
        .find_or_initialize_by(id: email)
        .merge_views!(current_visit&.metrics)
    end

    cookies.permanent.signed[:email] = email
  end

  request.env['workarea.visit'] = Visit.new(request.env)
end