Class: Workarea::Visit

Inherits:
Object
  • Object
show all
Defined in:
lib/workarea/visit.rb

Defined Under Namespace

Classes: UnsupportedSessionAccess

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(env) ⇒ Visit

Returns a new instance of Visit.



10
11
12
# File 'lib/workarea/visit.rb', line 10

def initialize(env)
  @env = env
end

Instance Attribute Details

#envObject (readonly)

Returns the value of attribute env.



5
6
7
# File 'lib/workarea/visit.rb', line 5

def env
  @env
end

#override_segmentsObject



68
69
70
# File 'lib/workarea/visit.rb', line 68

def override_segments
  @override_segments ||= Segment.in(id: session[:segment_ids]).to_a
end

Instance Method Details

#admin?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/workarea/visit.rb', line 31

def admin?
  (logged_in? && impersonating?) || metrics.admin?
end

#applied_segmentsObject



72
73
74
# File 'lib/workarea/visit.rb', line 72

def applied_segments
  admin? ? override_segments : segments
end

#browserObject



84
85
86
# File 'lib/workarea/visit.rb', line 84

def browser
  @browser ||= Browser.new(env['HTTP_USER_AGENT'], accept_language: env['HTTP_ACCEPT_LANGUAGE'])
end

#cookiesObject



14
15
16
# File 'lib/workarea/visit.rb', line 14

def cookies
  request.cookie_jar
end

#current_emailObject



47
48
49
50
51
52
# File 'lib/workarea/visit.rb', line 47

def current_email
  # For performance, prefer to use the cookie. The fallback to looking it up
  # by user is a failsafe against a blank email cookie (e.g. from a raised
  # error or poor application coding).
  cookies.signed[:email].presence || (email_from_user_id if logged_in?)
end

#current_metrics_idObject



88
89
90
91
# File 'lib/workarea/visit.rb', line 88

def current_metrics_id
  return @current_metrics_id if defined?(@current_metrics_id)
  @current_metrics_id = current_email.presence || session['session_id']
end

#current_metrics_id=(id) ⇒ Object



93
94
95
96
# File 'lib/workarea/visit.rb', line 93

def current_metrics_id=(id)
  @current_metrics_id = id
  @metrics = nil
end

#geolocationObject



39
40
41
# File 'lib/workarea/visit.rb', line 39

def geolocation
  @geolocation ||= Workarea::Geolocation.new(env, request.remote_ip)
end

#impersonating?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/workarea/visit.rb', line 27

def impersonating?
  session[:admin_id].present?
end

#location_namesObject



43
44
45
# File 'lib/workarea/visit.rb', line 43

def location_names
  geolocation.names
end

#logged_in?Boolean

Returns:

  • (Boolean)


23
24
25
# File 'lib/workarea/visit.rb', line 23

def logged_in?
  session[:user_id].present?
end

#metricsObject



54
55
56
57
# File 'lib/workarea/visit.rb', line 54

def metrics
  return blank_metrics if current_metrics_id.blank?
  @metrics ||= Metrics::User.find_or_initialize_by(id: current_metrics_id)
end

#referrerObject



76
77
78
79
80
81
82
# File 'lib/workarea/visit.rb', line 76

def referrer
  @referrer ||= begin
    value = cookies['workarea_referrer'].presence || request.referrer
    attributes = Workarea.referrer_parser.parse(value) rescue {}
    TrafficReferrer.new(attributes)
  end
end

#requestObject



35
36
37
# File 'lib/workarea/visit.rb', line 35

def request
  @request ||= ActionDispatch::Request.new(env)
end

#segmentsObject



64
65
66
# File 'lib/workarea/visit.rb', line 64

def segments
  @segments ||= Segment.find_qualifying(self)
end

#sessionObject



18
19
20
21
# File 'lib/workarea/visit.rb', line 18

def session
  raise UnsupportedSessionAccess unless Configuration::Session.cookie_store?
  @session ||= (cookies.signed_or_encrypted[Configuration::Session.key] || {}).with_indifferent_access
end

#sessionsObject

A value of 0 here means it’s the first request we’ve seen



60
61
62
# File 'lib/workarea/visit.rb', line 60

def sessions
  @sessions ||= cookies[:sessions].to_i
end