ahoy_matey 2.0.0 → 3.2.0

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