ahoy_matey 2.0.0 → 3.2.0

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.
Files changed (52) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +112 -37
  3. data/CONTRIBUTING.md +9 -7
  4. data/LICENSE.txt +1 -1
  5. data/README.md +377 -63
  6. data/app/controllers/ahoy/base_controller.rb +14 -10
  7. data/app/controllers/ahoy/events_controller.rb +1 -1
  8. data/app/controllers/ahoy/visits_controller.rb +1 -0
  9. data/app/jobs/ahoy/geocode_v2_job.rb +3 -4
  10. data/lib/ahoy.rb +57 -2
  11. data/lib/ahoy/base_store.rb +32 -3
  12. data/lib/ahoy/controller.rb +21 -8
  13. data/lib/ahoy/database_store.rb +33 -16
  14. data/lib/ahoy/engine.rb +3 -1
  15. data/lib/ahoy/helper.rb +40 -0
  16. data/lib/ahoy/model.rb +2 -2
  17. data/lib/ahoy/query_methods.rb +46 -1
  18. data/lib/ahoy/tracker.rb +59 -27
  19. data/lib/ahoy/utils.rb +7 -0
  20. data/lib/ahoy/version.rb +1 -1
  21. data/lib/ahoy/visit_properties.rb +73 -37
  22. data/lib/generators/ahoy/activerecord_generator.rb +17 -26
  23. data/lib/generators/ahoy/base_generator.rb +1 -1
  24. data/lib/generators/ahoy/install_generator.rb +1 -1
  25. data/lib/generators/ahoy/mongoid_generator.rb +1 -5
  26. data/lib/generators/ahoy/templates/active_record_event_model.rb.tt +10 -0
  27. data/lib/generators/ahoy/templates/{active_record_migration.rb → active_record_migration.rb.tt} +14 -7
  28. data/lib/generators/ahoy/templates/active_record_visit_model.rb.tt +6 -0
  29. data/lib/generators/ahoy/templates/{base_store_initializer.rb → base_store_initializer.rb.tt} +8 -0
  30. data/lib/generators/ahoy/templates/database_store_initializer.rb.tt +10 -0
  31. data/lib/generators/ahoy/templates/{mongoid_event_model.rb → mongoid_event_model.rb.tt} +1 -1
  32. data/lib/generators/ahoy/templates/{mongoid_visit_model.rb → mongoid_visit_model.rb.tt} +9 -7
  33. data/vendor/assets/javascripts/ahoy.js +539 -552
  34. metadata +27 -204
  35. data/.github/ISSUE_TEMPLATE.md +0 -7
  36. data/.gitignore +0 -17
  37. data/Gemfile +0 -6
  38. data/Rakefile +0 -9
  39. data/ahoy_matey.gemspec +0 -36
  40. data/docs/Ahoy-2-Upgrade.md +0 -147
  41. data/docs/Data-Store-Examples.md +0 -240
  42. data/lib/generators/ahoy/templates/active_record_event_model.rb +0 -10
  43. data/lib/generators/ahoy/templates/active_record_visit_model.rb +0 -6
  44. data/lib/generators/ahoy/templates/database_store_initializer.rb +0 -5
  45. data/test/query_methods/mongoid_test.rb +0 -23
  46. data/test/query_methods/mysql_json_test.rb +0 -18
  47. data/test/query_methods/mysql_text_test.rb +0 -19
  48. data/test/query_methods/postgresql_hstore_test.rb +0 -20
  49. data/test/query_methods/postgresql_json_test.rb +0 -18
  50. data/test/query_methods/postgresql_jsonb_test.rb +0 -19
  51. data/test/query_methods/postgresql_text_test.rb +0 -19
  52. data/test/test_helper.rb +0 -100
metadata CHANGED
@@ -1,113 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ahoy_matey
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-26 00:00:00.000000000 Z
11
+ date: 2021-03-02 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
44
30
  requirements:
45
31
  - - ">="
46
32
  - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !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
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0.3'
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0.3'
83
- - !ruby/object:Gem::Dependency
84
- name: user_agent_parser
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: request_store
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
33
+ version: 1.4.5
104
34
  type: :runtime
105
35
  prerelease: false
106
36
  version_requirements: !ruby/object:Gem::Requirement
107
37
  requirements:
108
38
  - - ">="
109
39
  - !ruby/object:Gem::Version
110
- version: '0'
40
+ version: 1.4.5
111
41
  - !ruby/object:Gem::Dependency
112
42
  name: safely_block
113
43
  requirement: !ruby/object:Gem::Requirement
@@ -123,135 +53,45 @@ dependencies:
123
53
  - !ruby/object:Gem::Version
124
54
  version: 0.2.1
125
55
  - !ruby/object:Gem::Dependency
126
- name: bundler
56
+ name: device_detector
127
57
  requirement: !ruby/object:Gem::Requirement
128
58
  requirements:
129
59
  - - ">="
130
60
  - !ruby/object:Gem::Version
131
61
  version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- - !ruby/object:Gem::Dependency
140
- name: rake
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: '0'
153
- - !ruby/object:Gem::Dependency
154
- name: minitest
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: '0'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: '0'
167
- - !ruby/object:Gem::Dependency
168
- name: activerecord
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- version: '0'
174
- type: :development
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - ">="
179
- - !ruby/object:Gem::Version
180
- version: '0'
181
- - !ruby/object:Gem::Dependency
182
- name: pg
183
- requirement: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - ">="
186
- - !ruby/object:Gem::Version
187
- version: '0'
188
- type: :development
189
- prerelease: false
190
- version_requirements: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - ">="
193
- - !ruby/object:Gem::Version
194
- version: '0'
195
- - !ruby/object:Gem::Dependency
196
- name: mysql2
197
- requirement: !ruby/object:Gem::Requirement
198
- requirements:
199
- - - ">="
200
- - !ruby/object:Gem::Version
201
- version: '0'
202
- type: :development
203
- prerelease: false
204
- version_requirements: !ruby/object:Gem::Requirement
205
- requirements:
206
- - - ">="
207
- - !ruby/object:Gem::Version
208
- version: '0'
209
- - !ruby/object:Gem::Dependency
210
- name: mongoid
211
- requirement: !ruby/object:Gem::Requirement
212
- requirements:
213
- - - ">="
214
- - !ruby/object:Gem::Version
215
- version: '0'
216
- type: :development
62
+ type: :runtime
217
63
  prerelease: false
218
64
  version_requirements: !ruby/object:Gem::Requirement
219
65
  requirements:
220
66
  - - ">="
221
67
  - !ruby/object:Gem::Version
222
68
  version: '0'
223
- description:
224
- email:
225
- - andrew@chartkick.com
69
+ description:
70
+ email: andrew@ankane.org
226
71
  executables: []
227
72
  extensions: []
228
73
  extra_rdoc_files: []
229
74
  files:
230
- - ".github/ISSUE_TEMPLATE.md"
231
- - ".gitignore"
232
75
  - CHANGELOG.md
233
76
  - CONTRIBUTING.md
234
- - Gemfile
235
77
  - LICENSE.txt
236
78
  - README.md
237
- - Rakefile
238
- - ahoy_matey.gemspec
239
79
  - app/controllers/ahoy/base_controller.rb
240
80
  - app/controllers/ahoy/events_controller.rb
241
81
  - app/controllers/ahoy/visits_controller.rb
242
82
  - app/jobs/ahoy/geocode_job.rb
243
83
  - app/jobs/ahoy/geocode_v2_job.rb
244
84
  - config/routes.rb
245
- - docs/Ahoy-2-Upgrade.md
246
- - docs/Data-Store-Examples.md
247
85
  - lib/ahoy.rb
248
86
  - lib/ahoy/base_store.rb
249
87
  - lib/ahoy/controller.rb
250
88
  - lib/ahoy/database_store.rb
251
89
  - lib/ahoy/engine.rb
90
+ - lib/ahoy/helper.rb
252
91
  - lib/ahoy/model.rb
253
92
  - lib/ahoy/query_methods.rb
254
93
  - lib/ahoy/tracker.rb
94
+ - lib/ahoy/utils.rb
255
95
  - lib/ahoy/version.rb
256
96
  - lib/ahoy/visit_properties.rb
257
97
  - lib/ahoy/warden.rb
@@ -260,27 +100,19 @@ files:
260
100
  - lib/generators/ahoy/base_generator.rb
261
101
  - lib/generators/ahoy/install_generator.rb
262
102
  - lib/generators/ahoy/mongoid_generator.rb
263
- - lib/generators/ahoy/templates/active_record_event_model.rb
264
- - lib/generators/ahoy/templates/active_record_migration.rb
265
- - lib/generators/ahoy/templates/active_record_visit_model.rb
266
- - lib/generators/ahoy/templates/base_store_initializer.rb
267
- - lib/generators/ahoy/templates/database_store_initializer.rb
268
- - lib/generators/ahoy/templates/mongoid_event_model.rb
269
- - lib/generators/ahoy/templates/mongoid_visit_model.rb
270
- - test/query_methods/mongoid_test.rb
271
- - test/query_methods/mysql_json_test.rb
272
- - test/query_methods/mysql_text_test.rb
273
- - test/query_methods/postgresql_hstore_test.rb
274
- - test/query_methods/postgresql_json_test.rb
275
- - test/query_methods/postgresql_jsonb_test.rb
276
- - test/query_methods/postgresql_text_test.rb
277
- - test/test_helper.rb
103
+ - lib/generators/ahoy/templates/active_record_event_model.rb.tt
104
+ - lib/generators/ahoy/templates/active_record_migration.rb.tt
105
+ - lib/generators/ahoy/templates/active_record_visit_model.rb.tt
106
+ - lib/generators/ahoy/templates/base_store_initializer.rb.tt
107
+ - lib/generators/ahoy/templates/database_store_initializer.rb.tt
108
+ - lib/generators/ahoy/templates/mongoid_event_model.rb.tt
109
+ - lib/generators/ahoy/templates/mongoid_visit_model.rb.tt
278
110
  - vendor/assets/javascripts/ahoy.js
279
111
  homepage: https://github.com/ankane/ahoy
280
112
  licenses:
281
113
  - MIT
282
114
  metadata: {}
283
- post_install_message:
115
+ post_install_message:
284
116
  rdoc_options: []
285
117
  require_paths:
286
118
  - lib
@@ -288,24 +120,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
288
120
  requirements:
289
121
  - - ">="
290
122
  - !ruby/object:Gem::Version
291
- version: '0'
123
+ version: '2.4'
292
124
  required_rubygems_version: !ruby/object:Gem::Requirement
293
125
  requirements:
294
126
  - - ">="
295
127
  - !ruby/object:Gem::Version
296
128
  version: '0'
297
129
  requirements: []
298
- rubyforge_project:
299
- rubygems_version: 2.6.13
300
- signing_key:
130
+ rubygems_version: 3.2.3
131
+ signing_key:
301
132
  specification_version: 4
302
- summary: Simple, powerful visit tracking for Rails
303
- test_files:
304
- - test/query_methods/mongoid_test.rb
305
- - test/query_methods/mysql_json_test.rb
306
- - test/query_methods/mysql_text_test.rb
307
- - test/query_methods/postgresql_hstore_test.rb
308
- - test/query_methods/postgresql_json_test.rb
309
- - test/query_methods/postgresql_jsonb_test.rb
310
- - test/query_methods/postgresql_text_test.rb
311
- - test/test_helper.rb
133
+ summary: Simple, powerful, first-party analytics for Rails
134
+ test_files: []
@@ -1,7 +0,0 @@
1
- Hi,
2
-
3
- Before creating an issue, please check out the Contributing Guide:
4
-
5
- https://github.com/ankane/ahoy/blob/master/CONTRIBUTING.md
6
-
7
- Thanks!
data/.gitignore DELETED
@@ -1,17 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
data/Gemfile DELETED
@@ -1,6 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in ahoy.gemspec
4
- gemspec
5
-
6
- gem "rails", "~> 5.1.0"
data/Rakefile DELETED
@@ -1,9 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
3
-
4
- task default: :test
5
- Rake::TestTask.new do |t|
6
- t.libs << "test"
7
- t.pattern = "test/**/*_test.rb"
8
- t.warning = false
9
- end
data/ahoy_matey.gemspec DELETED
@@ -1,36 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "ahoy/version"
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "ahoy_matey"
8
- spec.version = Ahoy::VERSION
9
- spec.authors = ["Andrew Kane"]
10
- spec.email = ["andrew@chartkick.com"]
11
- spec.summary = "Simple, powerful visit tracking for Rails"
12
- spec.homepage = "https://github.com/ankane/ahoy"
13
- spec.license = "MIT"
14
-
15
- spec.files = `git ls-files -z`.split("\x0")
16
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
- spec.require_paths = ["lib"]
19
-
20
- spec.add_dependency "railties", ">= 4.2"
21
- spec.add_dependency "addressable"
22
- spec.add_dependency "geocoder"
23
- spec.add_dependency "browser", "~> 2.0"
24
- spec.add_dependency "referer-parser", ">= 0.3"
25
- spec.add_dependency "user_agent_parser"
26
- spec.add_dependency "request_store"
27
- spec.add_dependency "safely_block", ">= 0.2.1"
28
-
29
- spec.add_development_dependency "bundler"
30
- spec.add_development_dependency "rake"
31
- spec.add_development_dependency "minitest"
32
- spec.add_development_dependency "activerecord"
33
- spec.add_development_dependency "pg"
34
- spec.add_development_dependency "mysql2"
35
- spec.add_development_dependency "mongoid"
36
- end
@@ -1,147 +0,0 @@
1
- # Ahoy 2 Upgrade
2
-
3
- Ahoy 2.0 brings a number of exciting changes:
4
-
5
- - jQuery is no longer required
6
- - Uses `navigator.sendBeacon` by default in supported browsers
7
- - Simpler interface for data stores
8
-
9
- ## How to Upgrade
10
-
11
- Update your Gemfile:
12
-
13
- ```ruby
14
- gem 'ahoy_matey', '~> 2'
15
- ```
16
-
17
- And run:
18
-
19
- ```sh
20
- bundle install
21
- ```
22
-
23
- Add to `config/initializers/ahoy.rb`:
24
-
25
- ```ruby
26
- Ahoy.api = true
27
- Ahoy.server_side_visits = false
28
- ```
29
-
30
- If you use `visitable`, add `class_name` to each instance:
31
-
32
- ```ruby
33
- visitable class_name: "Visit"
34
- ```
35
-
36
- Then follow the instructions for your data store.
37
-
38
- - [ActiveRecordTokenStore](#activerecordtokenstore)
39
- - [ActiveRecordStore](#activerecordstore)
40
- - [MongoidStore](#mongoidstore)
41
- - [Others](#others)
42
-
43
- ## Data Stores
44
-
45
- ### ActiveRecordTokenStore
46
-
47
- In `config/initializers/ahoy.rb`, replace `Ahoy::Store` with:
48
-
49
- ```ruby
50
- class Ahoy::Store < Ahoy::DatabaseStore
51
- def visit_model
52
- Visit
53
- end
54
- end
55
- ```
56
-
57
- ### ActiveRecordStore
58
-
59
- Add [uuidtools](https://github.com/sporkmonger/uuidtools) to your Gemfile.
60
-
61
- In `config/initializers/ahoy.rb`, replace `Ahoy::Store` with:
62
-
63
- ```ruby
64
- class Ahoy::Store < Ahoy::DatabaseStore
65
- def track_visit(data)
66
- data[:id] = ensure_uuid(data.delete(:visit_token))
67
- data[:visitor_id] = ensure_uuid(data.delete(:visitor_token))
68
- super(data)
69
- end
70
-
71
- def track_event(data)
72
- data[:id] = ensure_uuid(data.delete(:event_id))
73
- super(data)
74
- end
75
-
76
- def visit
77
- @visit ||= visit_model.find_by(id: ensure_uuid(ahoy.visit_token)) if ahoy.visit_token
78
- end
79
-
80
- def visit_model
81
- Visit
82
- end
83
-
84
- UUID_NAMESPACE = UUIDTools::UUID.parse("a82ae811-5011-45ab-a728-569df7499c5f")
85
-
86
- def ensure_uuid(id)
87
- UUIDTools::UUID.parse(id).to_s
88
- rescue
89
- UUIDTools::UUID.sha1_create(UUID_NAMESPACE, id).to_s
90
- end
91
- end
92
- ```
93
-
94
- ### MongoidStore
95
-
96
- In `config/initializers/ahoy.rb`, replace `Ahoy::Store` with:
97
-
98
- ```ruby
99
- class Ahoy::Store < Ahoy::DatabaseStore
100
- def track_visit(data)
101
- data[:_id] = binary_uuid(data.delete(:visit_token))
102
- data[:visitor_id] = binary_uuid(data.delete(:visitor_token))
103
- super(data)
104
- end
105
-
106
- def track_event(data)
107
- data[:_id] = binary_uuid(data.delete(:event_id))
108
- super(data)
109
- end
110
-
111
- def geocode(data)
112
- visit_model.where(id: binary_uuid(ahoy.visit_token)).find_one_and_update({"$set": data}, {upsert: true})
113
- end
114
-
115
- def visit
116
- @visit ||= visit_model.where(id: binary_uuid(ahoy.visit_token)).first if ahoy.visit_token
117
- end
118
-
119
- def visit_model
120
- Visit
121
- end
122
-
123
- def binary_uuid(token)
124
- token = token.delete("-")
125
- if defined?(::BSON)
126
- ::BSON::Binary.new(token, :uuid)
127
- elsif defined?(::Moped::BSON)
128
- ::Moped::BSON::Binary.new(:uuid, token)
129
- else
130
- token
131
- end
132
- end
133
- end
134
- ```
135
-
136
- ### Others
137
-
138
- Check out the [data store examples](Data-Store-Examples.md).
139
-
140
- ## Throttling
141
-
142
- Throttling was removed due to limited practical usefulness. See [instructions for adding it back](../README.md#throttling) if you need it.
143
-
144
- ## Options
145
-
146
- - The `mount` option was renamed to `api`
147
- - The `track_visits_immediately` option was renamed to `server_side_visits`