ahoy_matey 1.6.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +7 -0
  3. data/CHANGELOG.md +22 -0
  4. data/CONTRIBUTING.md +40 -0
  5. data/LICENSE.txt +1 -1
  6. data/README.md +210 -489
  7. data/Rakefile +1 -0
  8. data/ahoy_matey.gemspec +6 -8
  9. data/app/controllers/ahoy/base_controller.rb +2 -6
  10. data/app/controllers/ahoy/events_controller.rb +7 -1
  11. data/app/controllers/ahoy/visits_controller.rb +7 -1
  12. data/app/jobs/ahoy/geocode_job.rb +10 -0
  13. data/app/jobs/ahoy/geocode_v2_job.rb +29 -0
  14. data/config/routes.rb +1 -1
  15. data/docs/Ahoy-2-Upgrade.md +147 -0
  16. data/docs/Data-Store-Examples.md +240 -0
  17. data/lib/ahoy.rb +30 -88
  18. data/lib/ahoy/base_store.rb +72 -0
  19. data/lib/ahoy/controller.rb +4 -10
  20. data/lib/ahoy/database_store.rb +72 -0
  21. data/lib/ahoy/engine.rb +5 -7
  22. data/lib/ahoy/model.rb +4 -26
  23. data/lib/ahoy/{properties.rb → query_methods.rb} +18 -4
  24. data/lib/ahoy/tracker.rb +60 -38
  25. data/lib/ahoy/version.rb +1 -1
  26. data/lib/ahoy/visit_properties.rb +65 -39
  27. data/lib/generators/ahoy/activerecord_generator.rb +58 -0
  28. data/lib/generators/ahoy/base_generator.rb +13 -0
  29. data/lib/generators/ahoy/install_generator.rb +44 -0
  30. data/lib/generators/ahoy/mongoid_generator.rb +20 -0
  31. data/lib/generators/ahoy/templates/active_record_event_model.rb +10 -0
  32. data/lib/generators/ahoy/{stores/templates/active_record_visits_migration.rb → templates/active_record_migration.rb} +19 -21
  33. data/lib/generators/ahoy/templates/active_record_visit_model.rb +6 -0
  34. data/lib/generators/ahoy/templates/base_store_initializer.rb +17 -0
  35. data/lib/generators/ahoy/templates/database_store_initializer.rb +5 -0
  36. data/lib/generators/ahoy/{stores/templates → templates}/mongoid_event_model.rb +4 -2
  37. data/lib/generators/ahoy/{stores/templates → templates}/mongoid_visit_model.rb +7 -3
  38. data/test/query_methods/mongoid_test.rb +23 -0
  39. data/test/{properties → query_methods}/mysql_json_test.rb +1 -1
  40. data/test/{properties → query_methods}/mysql_text_test.rb +1 -1
  41. data/test/{properties → query_methods}/postgresql_hstore_test.rb +1 -1
  42. data/test/{properties → query_methods}/postgresql_json_test.rb +1 -1
  43. data/test/{properties → query_methods}/postgresql_jsonb_test.rb +1 -1
  44. data/test/{properties → query_methods}/postgresql_text_test.rb +1 -1
  45. data/test/test_helper.rb +4 -3
  46. data/vendor/assets/javascripts/ahoy.js +551 -325
  47. metadata +67 -112
  48. data/lib/ahoy/deckhands/location_deckhand.rb +0 -49
  49. data/lib/ahoy/deckhands/request_deckhand.rb +0 -52
  50. data/lib/ahoy/deckhands/technology_deckhand.rb +0 -47
  51. data/lib/ahoy/deckhands/traffic_source_deckhand.rb +0 -22
  52. data/lib/ahoy/deckhands/utm_parameter_deckhand.rb +0 -23
  53. data/lib/ahoy/geocode_job.rb +0 -13
  54. data/lib/ahoy/logger_silencer.rb +0 -75
  55. data/lib/ahoy/stores/active_record_store.rb +0 -61
  56. data/lib/ahoy/stores/active_record_token_store.rb +0 -114
  57. data/lib/ahoy/stores/base_store.rb +0 -88
  58. data/lib/ahoy/stores/bunny_store.rb +0 -33
  59. data/lib/ahoy/stores/fluentd_store.rb +0 -17
  60. data/lib/ahoy/stores/kafka_store.rb +0 -42
  61. data/lib/ahoy/stores/kinesis_firehose_store.rb +0 -42
  62. data/lib/ahoy/stores/log_store.rb +0 -53
  63. data/lib/ahoy/stores/mongoid_store.rb +0 -63
  64. data/lib/ahoy/stores/nats_store.rb +0 -34
  65. data/lib/ahoy/stores/nsq_store.rb +0 -36
  66. data/lib/ahoy/subscribers/active_record.rb +0 -19
  67. data/lib/ahoy/throttle.rb +0 -17
  68. data/lib/generators/ahoy/stores/active_record_events_generator.rb +0 -59
  69. data/lib/generators/ahoy/stores/active_record_generator.rb +0 -16
  70. data/lib/generators/ahoy/stores/active_record_visits_generator.rb +0 -49
  71. data/lib/generators/ahoy/stores/bunny_generator.rb +0 -15
  72. data/lib/generators/ahoy/stores/custom_generator.rb +0 -15
  73. data/lib/generators/ahoy/stores/fluentd_generator.rb +0 -15
  74. data/lib/generators/ahoy/stores/kafka_generator.rb +0 -15
  75. data/lib/generators/ahoy/stores/kinesis_firehose_generator.rb +0 -15
  76. data/lib/generators/ahoy/stores/log_generator.rb +0 -15
  77. data/lib/generators/ahoy/stores/mongoid_events_generator.rb +0 -19
  78. data/lib/generators/ahoy/stores/mongoid_generator.rb +0 -14
  79. data/lib/generators/ahoy/stores/mongoid_visits_generator.rb +0 -27
  80. data/lib/generators/ahoy/stores/nats_generator.rb +0 -15
  81. data/lib/generators/ahoy/stores/nsq_generator.rb +0 -15
  82. data/lib/generators/ahoy/stores/templates/active_record_event_model.rb +0 -12
  83. data/lib/generators/ahoy/stores/templates/active_record_events_migration.rb +0 -20
  84. data/lib/generators/ahoy/stores/templates/active_record_initializer.rb +0 -3
  85. data/lib/generators/ahoy/stores/templates/active_record_visit_model.rb +0 -4
  86. data/lib/generators/ahoy/stores/templates/bunny_initializer.rb +0 -9
  87. data/lib/generators/ahoy/stores/templates/custom_initializer.rb +0 -10
  88. data/lib/generators/ahoy/stores/templates/fluentd_initializer.rb +0 -3
  89. data/lib/generators/ahoy/stores/templates/kafka_initializer.rb +0 -9
  90. data/lib/generators/ahoy/stores/templates/kinesis_firehose_initializer.rb +0 -17
  91. data/lib/generators/ahoy/stores/templates/log_initializer.rb +0 -3
  92. data/lib/generators/ahoy/stores/templates/mongoid_initializer.rb +0 -3
  93. data/lib/generators/ahoy/stores/templates/nats_initializer.rb +0 -9
  94. data/lib/generators/ahoy/stores/templates/nsq_initializer.rb +0 -9
  95. data/test/visit_properties_test.rb +0 -44
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ahoy_matey
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-02 00:00:00.000000000 Z
11
+ date: 2018-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '4.2'
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: '0'
26
+ version: '4.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: addressable
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: browser
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '2.0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '2.0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: geocoder
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -67,35 +53,35 @@ dependencies:
67
53
  - !ruby/object:Gem::Version
68
54
  version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
- name: referer-parser
56
+ name: browser
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
- - - ">="
59
+ - - "~>"
74
60
  - !ruby/object:Gem::Version
75
- version: 0.3.0
61
+ version: '2.0'
76
62
  type: :runtime
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
- - - ">="
66
+ - - "~>"
81
67
  - !ruby/object:Gem::Version
82
- version: 0.3.0
68
+ version: '2.0'
83
69
  - !ruby/object:Gem::Dependency
84
- name: user_agent_parser
70
+ name: referer-parser
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - ">="
88
74
  - !ruby/object:Gem::Version
89
- version: '0'
75
+ version: '0.3'
90
76
  type: :runtime
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
80
  - - ">="
95
81
  - !ruby/object:Gem::Version
96
- version: '0'
82
+ version: '0.3'
97
83
  - !ruby/object:Gem::Dependency
98
- name: request_store
84
+ name: user_agent_parser
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - ">="
@@ -109,7 +95,7 @@ dependencies:
109
95
  - !ruby/object:Gem::Version
110
96
  version: '0'
111
97
  - !ruby/object:Gem::Dependency
112
- name: uuidtools
98
+ name: request_store
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
101
  - - ">="
@@ -128,44 +114,44 @@ dependencies:
128
114
  requirements:
129
115
  - - ">="
130
116
  - !ruby/object:Gem::Version
131
- version: 0.1.1
117
+ version: 0.2.1
132
118
  type: :runtime
133
119
  prerelease: false
134
120
  version_requirements: !ruby/object:Gem::Requirement
135
121
  requirements:
136
122
  - - ">="
137
123
  - !ruby/object:Gem::Version
138
- version: 0.1.1
124
+ version: 0.2.1
139
125
  - !ruby/object:Gem::Dependency
140
- name: rack-attack
126
+ name: bundler
141
127
  requirement: !ruby/object:Gem::Requirement
142
128
  requirements:
143
- - - "<"
129
+ - - ">="
144
130
  - !ruby/object:Gem::Version
145
- version: '6'
146
- type: :runtime
131
+ version: '0'
132
+ type: :development
147
133
  prerelease: false
148
134
  version_requirements: !ruby/object:Gem::Requirement
149
135
  requirements:
150
- - - "<"
136
+ - - ">="
151
137
  - !ruby/object:Gem::Version
152
- version: '6'
138
+ version: '0'
153
139
  - !ruby/object:Gem::Dependency
154
- name: bundler
140
+ name: rake
155
141
  requirement: !ruby/object:Gem::Requirement
156
142
  requirements:
157
- - - "~>"
143
+ - - ">="
158
144
  - !ruby/object:Gem::Version
159
- version: '1.5'
145
+ version: '0'
160
146
  type: :development
161
147
  prerelease: false
162
148
  version_requirements: !ruby/object:Gem::Requirement
163
149
  requirements:
164
- - - "~>"
150
+ - - ">="
165
151
  - !ruby/object:Gem::Version
166
- version: '1.5'
152
+ version: '0'
167
153
  - !ruby/object:Gem::Dependency
168
- name: rake
154
+ name: minitest
169
155
  requirement: !ruby/object:Gem::Requirement
170
156
  requirements:
171
157
  - - ">="
@@ -179,7 +165,7 @@ dependencies:
179
165
  - !ruby/object:Gem::Version
180
166
  version: '0'
181
167
  - !ruby/object:Gem::Dependency
182
- name: minitest
168
+ name: activerecord
183
169
  requirement: !ruby/object:Gem::Requirement
184
170
  requirements:
185
171
  - - ">="
@@ -193,7 +179,7 @@ dependencies:
193
179
  - !ruby/object:Gem::Version
194
180
  version: '0'
195
181
  - !ruby/object:Gem::Dependency
196
- name: activerecord
182
+ name: pg
197
183
  requirement: !ruby/object:Gem::Requirement
198
184
  requirements:
199
185
  - - ">="
@@ -207,7 +193,7 @@ dependencies:
207
193
  - !ruby/object:Gem::Version
208
194
  version: '0'
209
195
  - !ruby/object:Gem::Dependency
210
- name: pg
196
+ name: mysql2
211
197
  requirement: !ruby/object:Gem::Requirement
212
198
  requirements:
213
199
  - - ">="
@@ -221,7 +207,7 @@ dependencies:
221
207
  - !ruby/object:Gem::Version
222
208
  version: '0'
223
209
  - !ruby/object:Gem::Dependency
224
- name: mysql2
210
+ name: mongoid
225
211
  requirement: !ruby/object:Gem::Requirement
226
212
  requirements:
227
213
  - - ">="
@@ -234,15 +220,17 @@ dependencies:
234
220
  - - ">="
235
221
  - !ruby/object:Gem::Version
236
222
  version: '0'
237
- description: Simple, powerful visit tracking for Rails
223
+ description:
238
224
  email:
239
225
  - andrew@chartkick.com
240
226
  executables: []
241
227
  extensions: []
242
228
  extra_rdoc_files: []
243
229
  files:
230
+ - ".github/ISSUE_TEMPLATE.md"
244
231
  - ".gitignore"
245
232
  - CHANGELOG.md
233
+ - CONTRIBUTING.md
246
234
  - Gemfile
247
235
  - LICENSE.txt
248
236
  - README.md
@@ -251,75 +239,42 @@ files:
251
239
  - app/controllers/ahoy/base_controller.rb
252
240
  - app/controllers/ahoy/events_controller.rb
253
241
  - app/controllers/ahoy/visits_controller.rb
242
+ - app/jobs/ahoy/geocode_job.rb
243
+ - app/jobs/ahoy/geocode_v2_job.rb
254
244
  - config/routes.rb
245
+ - docs/Ahoy-2-Upgrade.md
246
+ - docs/Data-Store-Examples.md
255
247
  - lib/ahoy.rb
248
+ - lib/ahoy/base_store.rb
256
249
  - lib/ahoy/controller.rb
257
- - lib/ahoy/deckhands/location_deckhand.rb
258
- - lib/ahoy/deckhands/request_deckhand.rb
259
- - lib/ahoy/deckhands/technology_deckhand.rb
260
- - lib/ahoy/deckhands/traffic_source_deckhand.rb
261
- - lib/ahoy/deckhands/utm_parameter_deckhand.rb
250
+ - lib/ahoy/database_store.rb
262
251
  - lib/ahoy/engine.rb
263
- - lib/ahoy/geocode_job.rb
264
- - lib/ahoy/logger_silencer.rb
265
252
  - lib/ahoy/model.rb
266
- - lib/ahoy/properties.rb
267
- - lib/ahoy/stores/active_record_store.rb
268
- - lib/ahoy/stores/active_record_token_store.rb
269
- - lib/ahoy/stores/base_store.rb
270
- - lib/ahoy/stores/bunny_store.rb
271
- - lib/ahoy/stores/fluentd_store.rb
272
- - lib/ahoy/stores/kafka_store.rb
273
- - lib/ahoy/stores/kinesis_firehose_store.rb
274
- - lib/ahoy/stores/log_store.rb
275
- - lib/ahoy/stores/mongoid_store.rb
276
- - lib/ahoy/stores/nats_store.rb
277
- - lib/ahoy/stores/nsq_store.rb
278
- - lib/ahoy/subscribers/active_record.rb
279
- - lib/ahoy/throttle.rb
253
+ - lib/ahoy/query_methods.rb
280
254
  - lib/ahoy/tracker.rb
281
255
  - lib/ahoy/version.rb
282
256
  - lib/ahoy/visit_properties.rb
283
257
  - lib/ahoy/warden.rb
284
258
  - lib/ahoy_matey.rb
285
- - lib/generators/ahoy/stores/active_record_events_generator.rb
286
- - lib/generators/ahoy/stores/active_record_generator.rb
287
- - lib/generators/ahoy/stores/active_record_visits_generator.rb
288
- - lib/generators/ahoy/stores/bunny_generator.rb
289
- - lib/generators/ahoy/stores/custom_generator.rb
290
- - lib/generators/ahoy/stores/fluentd_generator.rb
291
- - lib/generators/ahoy/stores/kafka_generator.rb
292
- - lib/generators/ahoy/stores/kinesis_firehose_generator.rb
293
- - lib/generators/ahoy/stores/log_generator.rb
294
- - lib/generators/ahoy/stores/mongoid_events_generator.rb
295
- - lib/generators/ahoy/stores/mongoid_generator.rb
296
- - lib/generators/ahoy/stores/mongoid_visits_generator.rb
297
- - lib/generators/ahoy/stores/nats_generator.rb
298
- - lib/generators/ahoy/stores/nsq_generator.rb
299
- - lib/generators/ahoy/stores/templates/active_record_event_model.rb
300
- - lib/generators/ahoy/stores/templates/active_record_events_migration.rb
301
- - lib/generators/ahoy/stores/templates/active_record_initializer.rb
302
- - lib/generators/ahoy/stores/templates/active_record_visit_model.rb
303
- - lib/generators/ahoy/stores/templates/active_record_visits_migration.rb
304
- - lib/generators/ahoy/stores/templates/bunny_initializer.rb
305
- - lib/generators/ahoy/stores/templates/custom_initializer.rb
306
- - lib/generators/ahoy/stores/templates/fluentd_initializer.rb
307
- - lib/generators/ahoy/stores/templates/kafka_initializer.rb
308
- - lib/generators/ahoy/stores/templates/kinesis_firehose_initializer.rb
309
- - lib/generators/ahoy/stores/templates/log_initializer.rb
310
- - lib/generators/ahoy/stores/templates/mongoid_event_model.rb
311
- - lib/generators/ahoy/stores/templates/mongoid_initializer.rb
312
- - lib/generators/ahoy/stores/templates/mongoid_visit_model.rb
313
- - lib/generators/ahoy/stores/templates/nats_initializer.rb
314
- - lib/generators/ahoy/stores/templates/nsq_initializer.rb
315
- - test/properties/mysql_json_test.rb
316
- - test/properties/mysql_text_test.rb
317
- - test/properties/postgresql_hstore_test.rb
318
- - test/properties/postgresql_json_test.rb
319
- - test/properties/postgresql_jsonb_test.rb
320
- - test/properties/postgresql_text_test.rb
259
+ - lib/generators/ahoy/activerecord_generator.rb
260
+ - lib/generators/ahoy/base_generator.rb
261
+ - lib/generators/ahoy/install_generator.rb
262
+ - 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
321
277
  - test/test_helper.rb
322
- - test/visit_properties_test.rb
323
278
  - vendor/assets/javascripts/ahoy.js
324
279
  homepage: https://github.com/ankane/ahoy
325
280
  licenses:
@@ -346,11 +301,11 @@ signing_key:
346
301
  specification_version: 4
347
302
  summary: Simple, powerful visit tracking for Rails
348
303
  test_files:
349
- - test/properties/mysql_json_test.rb
350
- - test/properties/mysql_text_test.rb
351
- - test/properties/postgresql_hstore_test.rb
352
- - test/properties/postgresql_json_test.rb
353
- - test/properties/postgresql_jsonb_test.rb
354
- - test/properties/postgresql_text_test.rb
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
355
311
  - test/test_helper.rb
356
- - test/visit_properties_test.rb
@@ -1,49 +0,0 @@
1
- module Ahoy
2
- module Deckhands
3
- class LocationDeckhand
4
- def initialize(ip)
5
- @ip = ip
6
- end
7
-
8
- def country
9
- location.try(:country).presence
10
- end
11
-
12
- def region
13
- location.try(:state).presence
14
- end
15
-
16
- def postal_code
17
- location.try(:postal_code).presence
18
- end
19
-
20
- def city
21
- location.try(:city).presence
22
- end
23
-
24
- def latitude
25
- location.try(:latitude).presence
26
- end
27
-
28
- def longitude
29
- location.try(:longitude).presence
30
- end
31
-
32
- protected
33
-
34
- def location
35
- unless @checked
36
- @location =
37
- begin
38
- Geocoder.search(@ip).first
39
- rescue => e
40
- $stderr.puts e.message
41
- nil
42
- end
43
- @checked = true
44
- end
45
- @location
46
- end
47
- end
48
- end
49
- end
@@ -1,52 +0,0 @@
1
- module Ahoy
2
- module Deckhands
3
- class RequestDeckhand
4
- attr_reader :request
5
-
6
- def initialize(request, options = {})
7
- @request = request
8
- @options = options
9
- end
10
-
11
- def ip
12
- request.remote_ip
13
- end
14
-
15
- def user_agent
16
- request.user_agent
17
- end
18
-
19
- def referrer
20
- @options[:api] ? params["referrer"] : request.referer
21
- end
22
-
23
- def landing_page
24
- @options[:api] ? params["landing_page"] : request.original_url
25
- end
26
-
27
- def platform
28
- params["platform"]
29
- end
30
-
31
- def app_version
32
- params["app_version"]
33
- end
34
-
35
- def os_version
36
- params["os_version"]
37
- end
38
-
39
- def screen_height
40
- params["screen_height"]
41
- end
42
-
43
- def screen_width
44
- params["screen_width"]
45
- end
46
-
47
- def params
48
- @params ||= request.params
49
- end
50
- end
51
- end
52
- end
@@ -1,47 +0,0 @@
1
- module Ahoy
2
- module Deckhands
3
- class TechnologyDeckhand
4
- def initialize(user_agent)
5
- @user_agent = user_agent
6
- end
7
-
8
- def browser
9
- agent.name
10
- end
11
-
12
- def os
13
- agent.os.name
14
- end
15
-
16
- def device_type
17
- @device_type ||= begin
18
- browser = Browser.new(@user_agent)
19
- if browser.bot?
20
- "Bot"
21
- elsif browser.device.tv?
22
- "TV"
23
- elsif browser.device.console?
24
- "Console"
25
- elsif browser.device.tablet?
26
- "Tablet"
27
- elsif browser.device.mobile?
28
- "Mobile"
29
- else
30
- "Desktop"
31
- end
32
- end
33
- end
34
-
35
- protected
36
-
37
- def agent
38
- @agent ||= self.class.user_agent_parser.parse(@user_agent)
39
- end
40
-
41
- # performance
42
- def self.user_agent_parser
43
- @user_agent_parser ||= UserAgentParser::Parser.new
44
- end
45
- end
46
- end
47
- end