ahoy_matey 2.2.1 → 3.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []