Class: Workarea::Visit
- Inherits:
-
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
#env ⇒ Object
Returns the value of attribute env.
5
6
7
|
# File 'lib/workarea/visit.rb', line 5
def env
@env
end
|
#override_segments ⇒ Object
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
31
32
33
|
# File 'lib/workarea/visit.rb', line 31
def admin?
(logged_in? && impersonating?) || metrics.admin?
end
|
#applied_segments ⇒ Object
72
73
74
|
# File 'lib/workarea/visit.rb', line 72
def applied_segments
admin? ? override_segments : segments
end
|
#browser ⇒ Object
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
|
#cookies ⇒ Object
14
15
16
|
# File 'lib/workarea/visit.rb', line 14
def cookies
request.cookie_jar
end
|
#current_email ⇒ Object
47
48
49
50
51
52
|
# File 'lib/workarea/visit.rb', line 47
def current_email
cookies.signed[:email].presence || (email_from_user_id if logged_in?)
end
|
#current_metrics_id ⇒ Object
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
|
#geolocation ⇒ Object
39
40
41
|
# File 'lib/workarea/visit.rb', line 39
def geolocation
@geolocation ||= Workarea::Geolocation.new(env, request.remote_ip)
end
|
#impersonating? ⇒ Boolean
27
28
29
|
# File 'lib/workarea/visit.rb', line 27
def impersonating?
session[:admin_id].present?
end
|
#location_names ⇒ Object
43
44
45
|
# File 'lib/workarea/visit.rb', line 43
def location_names
geolocation.names
end
|
#logged_in? ⇒ Boolean
23
24
25
|
# File 'lib/workarea/visit.rb', line 23
def logged_in?
session[:user_id].present?
end
|
#metrics ⇒ Object
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
|
#referrer ⇒ Object
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
|
#request ⇒ Object
35
36
37
|
# File 'lib/workarea/visit.rb', line 35
def request
@request ||= ActionDispatch::Request.new(env)
end
|
#segments ⇒ Object
64
65
66
|
# File 'lib/workarea/visit.rb', line 64
def segments
@segments ||= Segment.find_qualifying(self)
end
|
#session ⇒ Object
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
|
#sessions ⇒ Object
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
|