ahoy_matey 2.2.1 → 3.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,9 +18,3 @@ end
18
18
 
19
19
  # set to true for JavaScript tracking
20
20
  Ahoy.api = false
21
-
22
- # better user agent parsing
23
- Ahoy.user_agent_parser = :device_detector
24
-
25
- # better bot detection
26
- Ahoy.bot_detection_version = 2
@@ -3,9 +3,3 @@ end
3
3
 
4
4
  # set to true for JavaScript tracking
5
5
  Ahoy.api = false
6
-
7
- # better user agent parsing
8
- Ahoy.user_agent_parser = :device_detector
9
-
10
- # better bot detection
11
- Ahoy.bot_detection_version = 2
@@ -3,7 +3,7 @@ class Ahoy::Event
3
3
 
4
4
  # associations
5
5
  belongs_to :visit, index: true
6
- belongs_to :user, index: true<%= rails5? ? ", optional: true" : nil %>
6
+ belongs_to :user, index: true, optional: true
7
7
 
8
8
  # fields
9
9
  field :name, type: String
@@ -3,7 +3,7 @@ class Ahoy::Visit
3
3
 
4
4
  # associations
5
5
  has_many :events, class_name: "Ahoy::Event"
6
- belongs_to :user, index: true<%= rails5? ? ", optional: true" : nil %>
6
+ belongs_to :user, index: true, optional: true
7
7
 
8
8
  # required
9
9
  field :visit_token, type: String
@@ -2,112 +2,17 @@
2
2
  * Ahoy.js
3
3
  * Simple, powerful JavaScript analytics
4
4
  * https://github.com/ankane/ahoy.js
5
- * v0.3.4
5
+ * v0.3.6
6
6
  * MIT License
7
7
  */
8
8
 
9
9
  (function (global, factory) {
10
10
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
11
11
  typeof define === 'function' && define.amd ? define(factory) :
12
- (global.ahoy = factory());
12
+ (global = global || self, global.ahoy = factory());
13
13
  }(this, (function () { 'use strict';
14
14
 
15
- function isUndefined(value) {
16
- return value === undefined;
17
- }
18
-
19
- function isNull(value) {
20
- return value === null;
21
- }
22
-
23
- function isObject(value) {
24
- return value === Object(value);
25
- }
26
-
27
- function isArray(value) {
28
- return Array.isArray(value);
29
- }
30
-
31
- function isDate(value) {
32
- return value instanceof Date;
33
- }
34
-
35
- function isBlob(value) {
36
- return (
37
- value &&
38
- typeof value.size === 'number' &&
39
- typeof value.type === 'string' &&
40
- typeof value.slice === 'function'
41
- );
42
- }
43
-
44
- function isFile(value) {
45
- return (
46
- isBlob(value) &&
47
- (typeof value.lastModifiedDate === 'object' ||
48
- typeof value.lastModified === 'number') &&
49
- typeof value.name === 'string'
50
- );
51
- }
52
-
53
- function isFormData(value) {
54
- return value instanceof FormData;
55
- }
56
-
57
- function objectToFormData(obj, cfg, fd, pre) {
58
- if (isFormData(cfg)) {
59
- pre = fd;
60
- fd = cfg;
61
- cfg = null;
62
- }
63
-
64
- cfg = cfg || {};
65
- cfg.indices = isUndefined(cfg.indices) ? false : cfg.indices;
66
- cfg.nulls = isUndefined(cfg.nulls) ? true : cfg.nulls;
67
- fd = fd || new FormData();
68
-
69
- if (isUndefined(obj)) {
70
- return fd;
71
- } else if (isNull(obj)) {
72
- if (cfg.nulls) {
73
- fd.append(pre, '');
74
- }
75
- } else if (isArray(obj)) {
76
- if (!obj.length) {
77
- var key = pre + '[]';
78
-
79
- fd.append(key, '');
80
- } else {
81
- obj.forEach(function(value, index) {
82
- var key = pre + '[' + (cfg.indices ? index : '') + ']';
83
-
84
- objectToFormData(value, cfg, fd, key);
85
- });
86
- }
87
- } else if (isDate(obj)) {
88
- fd.append(pre, obj.toISOString());
89
- } else if (isObject(obj) && !isFile(obj) && !isBlob(obj)) {
90
- Object.keys(obj).forEach(function(prop) {
91
- var value = obj[prop];
92
-
93
- if (isArray(value)) {
94
- while (prop.length > 2 && prop.lastIndexOf('[]') === prop.length - 2) {
95
- prop = prop.substring(0, prop.length - 2);
96
- }
97
- }
98
-
99
- var key = pre ? pre + '[' + prop + ']' : prop;
100
-
101
- objectToFormData(value, cfg, fd, key);
102
- });
103
- } else {
104
- fd.append(pre, obj);
105
- }
106
-
107
- return fd;
108
- }
109
-
110
- var objectToFormdata = objectToFormData;
15
+ var n=function(n){return void 0===n},e=function(n){return Array.isArray(n)},t=function(n){return n&&"number"==typeof n.size&&"string"==typeof n.type&&"function"==typeof n.slice},s=function(o,i,r,f){return (i=i||{}).indices=!n(i.indices)&&i.indices,i.nullsAsUndefineds=!n(i.nullsAsUndefineds)&&i.nullsAsUndefineds,i.booleansAsIntegers=!n(i.booleansAsIntegers)&&i.booleansAsIntegers,r=r||new FormData,n(o)?r:(null===o?i.nullsAsUndefineds||r.append(f,""):"boolean"!=typeof o?e(o)?o.length&&o.forEach(function(n,e){s(n,i,r,f+"["+(i.indices?e:"")+"]");}):o instanceof Date?r.append(f,o.toISOString()):o!==Object(o)||function(n){return t(n)&&"string"==typeof n.name&&("object"==typeof n.lastModifiedDate||"number"==typeof n.lastModified)}(o)||t(o)?r.append(f,o):Object.keys(o).forEach(function(n){var t=o[n];if(e(t)){ for(;n.length>2&&n.lastIndexOf("[]")===n.length-2;){ n=n.substring(0,n.length-2); } }s(t,i,r,f?f+"["+n+"]":n);}):r.append(f,i.booleansAsIntegers?o?1:0:o),r)};
111
16
 
112
17
  // https://www.quirksmode.org/js/cookies.html
113
18
 
@@ -155,7 +60,9 @@
155
60
  cookieDomain: null,
156
61
  headers: {},
157
62
  visitParams: {},
158
- withCredentials: false
63
+ withCredentials: false,
64
+ visitDuration: 4 * 60, // default 4 hours
65
+ visitorDuration: 2 * 365 * 24 * 60 // default 2 years
159
66
  };
160
67
 
161
68
  var ahoy = window.ahoy || window.Ahoy || {};
@@ -173,8 +80,6 @@
173
80
 
174
81
  var $ = window.jQuery || window.Zepto || window.$;
175
82
  var visitId, visitorId, track;
176
- var visitTtl = 4 * 60; // 4 hours
177
- var visitorTtl = 2 * 365 * 24 * 60; // 2 years
178
83
  var isReady = false;
179
84
  var queue = [];
180
85
  var canStringify = typeof(JSON) !== "undefined" && typeof(JSON.stringify) !== "undefined";
@@ -224,13 +129,13 @@
224
129
  isReady = true;
225
130
  }
226
131
 
227
- function ready(callback) {
132
+ ahoy.ready = function (callback) {
228
133
  if (isReady) {
229
134
  callback();
230
135
  } else {
231
136
  queue.push(callback);
232
137
  }
233
- }
138
+ };
234
139
 
235
140
  function matchesSelector(element, selector) {
236
141
  var matches = element.matches ||
@@ -258,7 +163,11 @@
258
163
 
259
164
  // http://beeker.io/jquery-document-ready-equivalent-vanilla-javascript
260
165
  function documentReady(callback) {
261
- document.readyState === "interactive" || document.readyState === "complete" ? callback() : document.addEventListener("DOMContentLoaded", callback);
166
+ if (document.readyState === "interactive" || document.readyState === "complete") {
167
+ setTimeout(callback, 0);
168
+ } else {
169
+ document.addEventListener("DOMContentLoaded", callback);
170
+ }
262
171
  }
263
172
 
264
173
  // https://stackoverflow.com/a/2117523/1177228
@@ -294,7 +203,7 @@
294
203
 
295
204
  function sendRequest(url, data, success) {
296
205
  if (canStringify) {
297
- if ($) {
206
+ if ($ && $.ajax) {
298
207
  $.ajax({
299
208
  type: "POST",
300
209
  url: url,
@@ -343,7 +252,7 @@
343
252
  }
344
253
 
345
254
  function trackEvent(event) {
346
- ready( function () {
255
+ ahoy.ready( function () {
347
256
  sendRequest(eventsUrl(), eventData(event), function() {
348
257
  // remove from queue
349
258
  for (var i = 0; i < eventQueue.length; i++) {
@@ -358,7 +267,7 @@
358
267
  }
359
268
 
360
269
  function trackEventNow(event) {
361
- ready( function () {
270
+ ahoy.ready( function () {
362
271
  var data = eventData(event);
363
272
  var param = csrfParam();
364
273
  var token = csrfToken();
@@ -366,7 +275,7 @@
366
275
  // stringify so we keep the type
367
276
  data.events_json = JSON.stringify(data.events);
368
277
  delete data.events;
369
- window.navigator.sendBeacon(eventsUrl(), objectToFormdata(data));
278
+ window.navigator.sendBeacon(eventsUrl(), s(data));
370
279
  });
371
280
  }
372
281
 
@@ -427,7 +336,7 @@
427
336
  } else {
428
337
  if (!visitId) {
429
338
  visitId = generateId();
430
- setCookie("ahoy_visit", visitId, visitTtl);
339
+ setCookie("ahoy_visit", visitId, config.visitDuration);
431
340
  }
432
341
 
433
342
  // make sure cookies are enabled
@@ -436,7 +345,7 @@
436
345
 
437
346
  if (!visitorId) {
438
347
  visitorId = generateId();
439
- setCookie("ahoy_visitor", visitorId, visitorTtl);
348
+ setCookie("ahoy_visitor", visitorId, config.visitorDuration);
440
349
  }
441
350
 
442
351
  var data = {
@@ -509,12 +418,12 @@
509
418
  js: true
510
419
  };
511
420
 
512
- ready( function () {
421
+ ahoy.ready( function () {
513
422
  if (config.cookies && !ahoy.getVisitId()) {
514
423
  createVisit();
515
424
  }
516
425
 
517
- ready( function () {
426
+ ahoy.ready( function () {
518
427
  log(event);
519
428
 
520
429
  event.visit_token = ahoy.getVisitId();
metadata CHANGED
@@ -1,43 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ahoy_matey
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1
4
+ version: 3.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-27 00:00:00.000000000 Z
11
+ date: 2020-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: railties
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '4.2'
19
+ version: '5'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '4.2'
27
- - !ruby/object:Gem::Dependency
28
- name: addressable
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
26
+ version: '5'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: geocoder
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -53,35 +39,21 @@ dependencies:
53
39
  - !ruby/object:Gem::Version
54
40
  version: 1.4.5
55
41
  - !ruby/object:Gem::Dependency
56
- name: browser
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '2.0'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '2.0'
69
- - !ruby/object:Gem::Dependency
70
- name: referer-parser
42
+ name: safely_block
71
43
  requirement: !ruby/object:Gem::Requirement
72
44
  requirements:
73
45
  - - ">="
74
46
  - !ruby/object:Gem::Version
75
- version: '0.3'
47
+ version: 0.2.1
76
48
  type: :runtime
77
49
  prerelease: false
78
50
  version_requirements: !ruby/object:Gem::Requirement
79
51
  requirements:
80
52
  - - ">="
81
53
  - !ruby/object:Gem::Version
82
- version: '0.3'
54
+ version: 0.2.1
83
55
  - !ruby/object:Gem::Dependency
84
- name: user_agent_parser
56
+ name: device_detector
85
57
  requirement: !ruby/object:Gem::Requirement
86
58
  requirements:
87
59
  - - ">="
@@ -95,13 +67,13 @@ dependencies:
95
67
  - !ruby/object:Gem::Version
96
68
  version: '0'
97
69
  - !ruby/object:Gem::Dependency
98
- name: request_store
70
+ name: bundler
99
71
  requirement: !ruby/object:Gem::Requirement
100
72
  requirements:
101
73
  - - ">="
102
74
  - !ruby/object:Gem::Version
103
75
  version: '0'
104
- type: :runtime
76
+ type: :development
105
77
  prerelease: false
106
78
  version_requirements: !ruby/object:Gem::Requirement
107
79
  requirements:
@@ -109,27 +81,13 @@ dependencies:
109
81
  - !ruby/object:Gem::Version
110
82
  version: '0'
111
83
  - !ruby/object:Gem::Dependency
112
- name: safely_block
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: 0.2.1
118
- type: :runtime
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: 0.2.1
125
- - !ruby/object:Gem::Dependency
126
- name: device_detector
84
+ name: rake
127
85
  requirement: !ruby/object:Gem::Requirement
128
86
  requirements:
129
87
  - - ">="
130
88
  - !ruby/object:Gem::Version
131
89
  version: '0'
132
- type: :runtime
90
+ type: :development
133
91
  prerelease: false
134
92
  version_requirements: !ruby/object:Gem::Requirement
135
93
  requirements:
@@ -137,7 +95,7 @@ dependencies:
137
95
  - !ruby/object:Gem::Version
138
96
  version: '0'
139
97
  - !ruby/object:Gem::Dependency
140
- name: bundler
98
+ name: minitest
141
99
  requirement: !ruby/object:Gem::Requirement
142
100
  requirements:
143
101
  - - ">="
@@ -151,7 +109,7 @@ dependencies:
151
109
  - !ruby/object:Gem::Version
152
110
  version: '0'
153
111
  - !ruby/object:Gem::Dependency
154
- name: rake
112
+ name: combustion
155
113
  requirement: !ruby/object:Gem::Requirement
156
114
  requirements:
157
115
  - - ">="
@@ -165,7 +123,7 @@ dependencies:
165
123
  - !ruby/object:Gem::Version
166
124
  version: '0'
167
125
  - !ruby/object:Gem::Dependency
168
- name: minitest
126
+ name: rails
169
127
  requirement: !ruby/object:Gem::Requirement
170
128
  requirements:
171
129
  - - ">="
@@ -179,7 +137,7 @@ dependencies:
179
137
  - !ruby/object:Gem::Version
180
138
  version: '0'
181
139
  - !ruby/object:Gem::Dependency
182
- name: activerecord
140
+ name: sqlite3
183
141
  requirement: !ruby/object:Gem::Requirement
184
142
  requirements:
185
143
  - - ">="
@@ -288,15 +246,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
288
246
  requirements:
289
247
  - - ">="
290
248
  - !ruby/object:Gem::Version
291
- version: '2.2'
249
+ version: '2.4'
292
250
  required_rubygems_version: !ruby/object:Gem::Requirement
293
251
  requirements:
294
252
  - - ">="
295
253
  - !ruby/object:Gem::Version
296
254
  version: '0'
297
255
  requirements: []
298
- rubygems_version: 3.0.3
256
+ rubygems_version: 3.1.2
299
257
  signing_key:
300
258
  specification_version: 4
301
- summary: Simple, powerful analytics for Rails
259
+ summary: Simple, powerful, first-party analytics for Rails
302
260
  test_files: []