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.



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

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



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

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

Instance Method Details

#applied_segmentsObject



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

def applied_segments
  admin? ? override_segments : segments
end

#browserObject



77
78
79
# File 'lib/workarea/visit.rb', line 77

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

#cookiesObject



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

def cookies
  request.cookie_jar
end

#current_emailObject



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

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



81
82
83
84
# File 'lib/workarea/visit.rb', line 81

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



86
87
88
89
# File 'lib/workarea/visit.rb', line 86

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

#geolocationObject



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

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

#location_namesObject



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

def location_names
  geolocation.names
end

#logged_in?Boolean

Returns:

  • (Boolean)


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

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

#metricsObject



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

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

#referrerObject



69
70
71
72
73
74
75
# File 'lib/workarea/visit.rb', line 69

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

#requestObject



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

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

#segmentsObject



57
58
59
# File 'lib/workarea/visit.rb', line 57

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

#sessionObject



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

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



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

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