Class: Ahoy::Tracker

Inherits:
Object
  • Object
show all
Defined in:
lib/ahoy/tracker.rb

Constant Summary collapse

UUID_NAMESPACE =
"a82ae811-5011-45ab-a728-569df7499c5f"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(**options) ⇒ Tracker

Returns a new instance of Tracker.



9
10
11
12
13
14
15
16
# File 'lib/ahoy/tracker.rb', line 9

def initialize(**options)
  @store = Ahoy::Store.new(options.merge(ahoy: self))
  @controller = options[:controller]
  @request = options[:request] || @controller.try(:request)
  @visit_token = options[:visit_token]
  @user = options[:user]
  @options = options
end

Instance Attribute Details

#controllerObject (readonly)

Returns the value of attribute controller.



7
8
9
# File 'lib/ahoy/tracker.rb', line 7

def controller
  @controller
end

#requestObject (readonly)

Returns the value of attribute request.



7
8
9
# File 'lib/ahoy/tracker.rb', line 7

def request
  @request
end

Instance Method Details

#authenticate(user) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/ahoy/tracker.rb', line 84

def authenticate(user)
  if exclude?
    debug "Authentication excluded"
  else
    @store.user = user

    data = {
      visit_token: visit_token,
      user_id: user.try(:id)
    }
    @store.authenticate(data)
  end
  true
rescue => e
  report_exception(e)
end

#geocode(data) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/ahoy/tracker.rb', line 69

def geocode(data)
  if exclude?
    debug "Geocode excluded"
  else
    data = {
      visit_token: visit_token
      }.merge(data).select { |_, v| v }

    @store.geocode(data)
    true
  end
rescue => e
  report_exception(e)
end

#new_visit?Boolean

Returns:

  • (Boolean)


109
110
111
# File 'lib/ahoy/tracker.rb', line 109

def new_visit?
  Ahoy.cookies ? !existing_visit_token : visit.nil?
end

#new_visitor?Boolean

Returns:

  • (Boolean)


113
114
115
# File 'lib/ahoy/tracker.rb', line 113

def new_visitor?
  !existing_visitor_token
end

#resetObject



145
146
147
148
# File 'lib/ahoy/tracker.rb', line 145

def reset
  reset_visit
  delete_cookie("ahoy_visitor")
end

#reset_visitObject



150
151
152
153
154
# File 'lib/ahoy/tracker.rb', line 150

def reset_visit
  delete_cookie("ahoy_visit")
  delete_cookie("ahoy_events")
  delete_cookie("ahoy_track")
end


117
118
119
# File 'lib/ahoy/tracker.rb', line 117

def set_visit_cookie
  set_cookie("ahoy_visit", visit_token, Ahoy.visit_duration)
end


121
122
123
124
125
# File 'lib/ahoy/tracker.rb', line 121

def set_visitor_cookie
  if new_visitor?
    set_cookie("ahoy_visitor", visitor_token, Ahoy.visitor_duration)
  end
end

#track(name, properties = {}, options = {}) ⇒ Object

can’t use keyword arguments here



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/ahoy/tracker.rb', line 19

def track(name, properties = {}, options = {})
  if exclude?
    debug "Event excluded"
  elsif missing_params?
    debug "Missing required parameters"
  else
    data = {
      visit_token: visit_token,
      user_id: user.try(:id),
      name: name.to_s,
      properties: properties,
      time: trusted_time(options[:time]),
      event_id: options[:id] || generate_id
    }.select { |_, v| v }

    @store.track_event(data)
  end
  true
rescue => e
  report_exception(e)
end

#track_visit(defer: false, started_at: nil) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/ahoy/tracker.rb', line 41

def track_visit(defer: false, started_at: nil)
  if exclude?
    debug "Visit excluded"
  elsif missing_params?
    debug "Missing required parameters"
  else
    if defer
      set_cookie("ahoy_track", true, nil, false)
    else
      delete_cookie("ahoy_track")

      data = {
        visit_token: visit_token,
        visitor_token: visitor_token,
        user_id: user.try(:id),
        started_at: trusted_time(started_at),
      }.merge(visit_properties).select { |_, v| v }

      @store.track_visit(data)

      Ahoy::GeocodeV2Job.perform_later(visit_token, data[:ip]) if Ahoy.geocode && data[:ip]
    end
  end
  true
rescue => e
  report_exception(e)
end

#userObject



127
128
129
# File 'lib/ahoy/tracker.rb', line 127

def user
  @user ||= @store.user
end

#visitObject



101
102
103
# File 'lib/ahoy/tracker.rb', line 101

def visit
  @visit ||= @store.visit
end

#visit_or_createObject



105
106
107
# File 'lib/ahoy/tracker.rb', line 105

def visit_or_create
  @visit ||= @store.visit_or_create
end

#visit_propertiesObject



131
132
133
# File 'lib/ahoy/tracker.rb', line 131

def visit_properties
  @visit_properties ||= request ? Ahoy::VisitProperties.new(request, api: api?).generate : {}
end

#visit_tokenObject Also known as: visit_id



135
136
137
# File 'lib/ahoy/tracker.rb', line 135

def visit_token
  @visit_token ||= ensure_token(visit_token_helper)
end

#visitor_tokenObject Also known as: visitor_id



140
141
142
# File 'lib/ahoy/tracker.rb', line 140

def visitor_token
  @visitor_token ||= ensure_token(visitor_token_helper)
end