device_detector 0.8.2 → 0.9.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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +11 -3
  3. data/CHANGELOG.md +10 -5
  4. data/README.md +4 -4
  5. data/Rakefile +24 -19
  6. data/device_detector.gemspec +1 -1
  7. data/lib/device_detector.rb +25 -3
  8. data/lib/device_detector/device.rb +1 -1
  9. data/lib/device_detector/model_extractor.rb +4 -0
  10. data/lib/device_detector/os.rb +8 -3
  11. data/lib/device_detector/parser.rb +1 -1
  12. data/lib/device_detector/version.rb +1 -1
  13. data/regexes/bots.yml +211 -27
  14. data/regexes/client/browsers.yml +192 -58
  15. data/regexes/client/feed_readers.yml +6 -0
  16. data/regexes/client/libraries.yml +4 -0
  17. data/regexes/client/mediaplayers.yml +8 -4
  18. data/regexes/client/mobile_apps.yml +39 -4
  19. data/regexes/client/pim.yml +4 -0
  20. data/regexes/device/mobiles.yml +1803 -242
  21. data/regexes/device/televisions.yml +53 -11
  22. data/regexes/oss.yml +180 -12
  23. data/regexes/vendorfragments.yml +1 -0
  24. data/spec/device_detector/concrete_user_agent_spec.rb +36 -0
  25. data/spec/device_detector/detector_fixtures_spec.rb +1 -1
  26. data/spec/fixtures/client/browser.yml +313 -2
  27. data/spec/fixtures/client/feed_reader.yml +8 -1
  28. data/spec/fixtures/client/library.yml +7 -1
  29. data/spec/fixtures/client/mediaplayer.yml +6 -1
  30. data/spec/fixtures/client/mobile_app.yml +6 -0
  31. data/spec/fixtures/client/pim.yml +6 -0
  32. data/spec/fixtures/detector/bots.yml +2307 -612
  33. data/spec/fixtures/detector/camera.yml +6 -0
  34. data/spec/fixtures/detector/car_browser.yml +1 -0
  35. data/spec/fixtures/detector/console.yml +14 -0
  36. data/spec/fixtures/detector/desktop.yml +308 -48
  37. data/spec/fixtures/detector/feature_phone.yml +63 -0
  38. data/spec/fixtures/detector/feed_reader.yml +50 -26
  39. data/spec/fixtures/detector/mediaplayer.yml +28 -6
  40. data/spec/fixtures/detector/mobile_apps.yml +117 -0
  41. data/spec/fixtures/detector/phablet.yml +1066 -183
  42. data/spec/fixtures/detector/portable_media_player.yml +8 -0
  43. data/spec/fixtures/detector/smart_display.yml +39 -0
  44. data/spec/fixtures/detector/smartphone-1.yml +9469 -0
  45. data/spec/fixtures/detector/smartphone-2.yml +9414 -0
  46. data/spec/fixtures/detector/smartphone-3.yml +9396 -0
  47. data/spec/fixtures/detector/smartphone-4.yml +5742 -0
  48. data/spec/fixtures/detector/smartphone.yml +3446 -23680
  49. data/spec/fixtures/detector/tablet-1.yml +9495 -0
  50. data/spec/fixtures/detector/tablet-2.yml +248 -0
  51. data/spec/fixtures/detector/tablet.yml +2786 -7961
  52. data/spec/fixtures/detector/tv.yml +1376 -210
  53. data/spec/fixtures/detector/unknown.yml +205 -509
  54. data/spec/fixtures/device/console.yml +6 -0
  55. data/spec/fixtures/parser/oss.yml +194 -1
  56. data/spec/fixtures/parser/vendorfragments.yml +6 -0
  57. metadata +16 -6
  58. data/spec/fixtures/parser/bots.yml +0 -2055
@@ -8,12 +8,36 @@
8
8
  #
9
9
  ###############
10
10
 
11
+ # Airties
12
+ Airties:
13
+ regex: 'Airties'
14
+ device: 'tv'
15
+ models:
16
+ - regex: 'Airties; ?([^);/]+)'
17
+ model: '$1'
18
+
19
+ # Altech UEC
20
+ 'Altech UEC':
21
+ regex: 'Altech UEC'
22
+ device: 'tv'
23
+ models:
24
+ - regex: 'Altech UEC; ?([^);/]+)'
25
+ model: '$1'
26
+
11
27
  # BangOlufsen
12
28
  BangOlufsen:
13
29
  regex: 'Bangolufsen'
14
30
  device: 'tv'
15
31
  model: 'BeoVision'
16
32
 
33
+ # Changhong
34
+ Changhong:
35
+ regex: 'Changhong'
36
+ device: 'tv'
37
+ models:
38
+ - regex: 'Changhong; ?([^);/]+)'
39
+ model: '$1'
40
+
17
41
  # CreNova
18
42
  CreNova:
19
43
  regex: 'CreNova'
@@ -41,6 +65,8 @@ Humax:
41
65
  model: '$1'
42
66
  - regex: 'HMS1000S'
43
67
  model: 'HMS-1000S'
68
+ - regex: 'Humax; ([^);/]+)'
69
+ model: '$1'
44
70
 
45
71
  # IKEA
46
72
  Ikea:
@@ -63,6 +89,8 @@ Inverto:
63
89
  regex: 'Inverto'
64
90
  device: 'tv'
65
91
  models:
92
+ - regex: 'inverto; ([^);/]+)'
93
+ model: '$1'
66
94
  - regex: '(Volksbox Web Edition|Volksbox Essential|Volksbox II|Volksbox)'
67
95
  model: '$1'
68
96
 
@@ -124,27 +152,31 @@ PEAQ:
124
152
 
125
153
  # Philips
126
154
  Philips:
127
- regex: 'Philips'
155
+ regex: 'Philips|NETTV/'
128
156
  device: 'tv'
129
157
  models:
130
- - regex: '(NETTV/[0-9\.]{5})'
158
+ - regex: 'Philips[,;] ?((?! )[^),;/]+)'
131
159
  model: '$1'
160
+ - regex: 'NETTV/[0-9\.]{5}'
161
+ model: 'NetTV Series'
132
162
 
133
163
  # Samsung
134
164
  Samsung:
135
165
  regex: 'Samsung|Maple_2011'
136
166
  device: 'tv'
137
167
  models:
138
- - regex: '(SmartTV2013|SmartTV2012)'
139
- model: '$1'
168
+ - regex: 'SmartTV(2012|2013|2014|2015)'
169
+ model: 'Smart TV $1'
140
170
  - regex: 'Maple_2011'
141
- model: 'SmartTV2011'
171
+ model: 'Smart TV 2011'
142
172
 
143
173
  # Selevision
144
174
  Selevision:
145
175
  regex: 'Selevision'
146
176
  device: 'tv'
147
177
  models:
178
+ - regex: 'Selevision; (?:Selevision )?([^);/]+)'
179
+ model: '$1'
148
180
  - regex: '(EMC1000i)'
149
181
  model: '$1'
150
182
 
@@ -153,14 +185,26 @@ Sharp:
153
185
  regex: 'Sharp'
154
186
  device: 'tv'
155
187
  models:
188
+ - regex: 'Sharp[,;] ?((?! |HbbTV)[^),;/]+)'
189
+ model: '$1'
156
190
  - regex: '(LE[0-9]{3}[A-Z]{0,3})'
157
191
  model: '$1'
158
192
 
193
+ # Skyworth
194
+ Skyworth:
195
+ regex: 'Sky_worth'
196
+ device: 'tv'
197
+ models:
198
+ - regex: 'Sky_worth;([^);/]+)'
199
+ model: '$1'
200
+
159
201
  # Smart
160
202
  Smart:
161
- regex: 'Smart'
203
+ regex: 'Smart[^a-z]'
162
204
  device: 'tv'
163
205
  models:
206
+ - regex: 'Smart; ([^);/]+)'
207
+ model: '$1'
164
208
  - regex: '([A-Z]{2}[0-9]{2}|ZAPPIX)'
165
209
  model: '$1'
166
210
 
@@ -229,12 +273,10 @@ Vestel:
229
273
 
230
274
  # Videoweb
231
275
  Videoweb:
232
- regex: 'videoweb|compatible;'
276
+ regex: 'videoweb|tv2n'
233
277
  device: 'tv'
234
278
  models:
235
- - regex: '(videowebtv)'
236
- model: 'VideoWeb TV'
237
279
  - regex: '(tv2n)'
238
280
  model: '$1'
239
- - regex: 'ANTGalio/3.0'
240
- model: '600S'
281
+ - regex: '(videowebtv)'
282
+ model: 'VideoWeb TV'
data/regexes/oss.yml CHANGED
@@ -8,9 +8,9 @@
8
8
  ##########
9
9
  # Tizen
10
10
  ##########
11
- - regex: 'Tizen'
11
+ - regex: 'Tizen[ /]?(\d+[\.\d]+)?'
12
12
  name: 'Tizen'
13
- version: ''
13
+ version: '$1'
14
14
 
15
15
 
16
16
 
@@ -40,9 +40,9 @@
40
40
  name: 'Windows Phone'
41
41
  version: ''
42
42
 
43
- - regex: 'Windows CE'
43
+ - regex: 'Windows CE(?: (\d+[\.\d]+))?'
44
44
  name: 'Windows CE'
45
- version: ''
45
+ version: '$1'
46
46
 
47
47
 
48
48
  - regex: '(?:IEMobile|Windows Mobile)(?: (\d+[\.\d]+))?'
@@ -57,7 +57,7 @@
57
57
  - regex: 'Windows NT 6.3; ARM;'
58
58
  name: 'Windows RT'
59
59
  version: '8.1'
60
-
60
+
61
61
 
62
62
  ##########
63
63
  # Custom Android Roms
@@ -81,7 +81,7 @@
81
81
  ##########
82
82
  # Android
83
83
  ##########
84
- - regex: '(?:Android|Adr)[ /](?:[a-z]+ )?(\d+[\.\d]+)'
84
+ - regex: '(?:(?:Orca-)?Android|Adr)[ /](?:[a-z]+ )?(\d+[\.\d]+)'
85
85
  name: 'Android'
86
86
  version: '$1'
87
87
 
@@ -102,10 +102,30 @@
102
102
  name: 'AmigaOS'
103
103
  version: ''
104
104
 
105
+ ##########
106
+ # ThreadX
107
+ ##########
108
+ - regex: 'ThreadX(?:/(\d+[\.\d]*))?'
109
+ name: 'ThreadX'
110
+ version: '$1'
111
+
112
+ ##########
113
+ # MTK / Nucleus
114
+ ##########
115
+ - regex: 'Nucleus(?:(?: |/v?)(\d+[\.\d]*))?'
116
+ name: 'MTK / Nucleus'
117
+ version: '$1'
118
+ - regex: 'MTK(?:(?: |/v?)(\d+[\.\d]*))?'
119
+ name: 'MTK / Nucleus'
120
+ version: '$1'
105
121
 
106
122
  ##########
107
123
  # Linux
108
124
  ##########
125
+ - regex: 'Maemo'
126
+ name: 'Maemo'
127
+ version: '$1'
128
+
109
129
  - regex: 'Arch ?Linux(?:[ /\-](\d+[\.\d]+))?'
110
130
  name: 'Arch Linux'
111
131
  version: '$1'
@@ -225,7 +245,99 @@
225
245
  ##########
226
246
  # iOS
227
247
  ##########
228
- - regex: '(?:CPU OS|iPhone OS|iOS)[ _](\d+(?:[_\.]\d+)*)'
248
+ - regex: 'CFNetwork/758\.4\.3'
249
+ name: 'iOS'
250
+ version: '9.3.2'
251
+
252
+ - regex: 'CFNetwork/758\.3\.15'
253
+ name: 'iOS'
254
+ version: '9.3'
255
+
256
+ - regex: 'CFNetwork/758\.2\.[78]'
257
+ name: 'iOS'
258
+ version: '9.2'
259
+
260
+ - regex: 'CFNetwork/758\.1\.6'
261
+ name: 'iOS'
262
+ version: '9.1'
263
+
264
+ - regex: 'CFNetwork/758\.0\.2'
265
+ name: 'iOS'
266
+ version: '9.0'
267
+
268
+ - regex: 'CFNetwork/711\.5\.6'
269
+ name: 'iOS'
270
+ version: '8.4.1'
271
+
272
+ - regex: 'CFNetwork/711\.4\.6'
273
+ name: 'iOS'
274
+ version: '8.4'
275
+
276
+ - regex: 'CFNetwork/711\.3\.18'
277
+ name: 'iOS'
278
+ version: '8.3'
279
+
280
+ - regex: 'CFNetwork/711\.2\.23'
281
+ name: 'iOS'
282
+ version: '8.2'
283
+
284
+ - regex: 'CFNetwork/711\.1\.1[26]'
285
+ name: 'iOS'
286
+ version: '8.1'
287
+
288
+ - regex: 'CFNetwork/711\.0\.6'
289
+ name: 'iOS'
290
+ version: '8.0'
291
+
292
+ - regex: 'CFNetwork/672\.1'
293
+ name: 'iOS'
294
+ version: '7.1'
295
+
296
+ - regex: 'CFNetwork/672\.0'
297
+ name: 'iOS'
298
+ version: '7.0'
299
+
300
+ - regex: 'CFNetwork/609\.1'
301
+ name: 'iOS'
302
+ version: '6.1'
303
+
304
+ - regex: 'CFNetwork/60[29]'
305
+ name: 'iOS'
306
+ version: '6.0'
307
+
308
+ - regex: 'CFNetwork/548\.1'
309
+ name: 'iOS'
310
+ version: '5.1'
311
+
312
+ - regex: 'CFNetwork/548\.0'
313
+ name: 'iOS'
314
+ version: '5.0'
315
+
316
+ - regex: 'CFNetwork/485\.13'
317
+ name: 'iOS'
318
+ version: '4.3'
319
+
320
+ - regex: 'CFNetwork/485\.12'
321
+ name: 'iOS'
322
+ version: '4.2'
323
+
324
+ - regex: 'CFNetwork/485\.10'
325
+ name: 'iOS'
326
+ version: '4.1'
327
+
328
+ - regex: 'CFNetwork/485\.2'
329
+ name: 'iOS'
330
+ version: '4.0'
331
+
332
+ - regex: 'CFNetwork/467\.12'
333
+ name: 'iOS'
334
+ version: '3.2'
335
+
336
+ - regex: 'CFNetwork/459'
337
+ name: 'iOS'
338
+ version: '3.1'
339
+
340
+ - regex: '(?:CPU OS|iPh(?:one)?[ _]OS|iOS)[ _/](\d+(?:[_\.]\d+)*)'
229
341
  name: 'iOS'
230
342
  version: '$1'
231
343
 
@@ -238,6 +350,47 @@
238
350
  ##########
239
351
  # Mac
240
352
  ##########
353
+
354
+ - regex: 'CFNetwork/760'
355
+ name: 'Mac'
356
+ version: '10.11'
357
+
358
+ - regex: 'CFNetwork/720'
359
+ name: 'Mac'
360
+ version: '10.10'
361
+
362
+ - regex: 'CFNetwork/673'
363
+ name: 'Mac'
364
+ version: '10.9'
365
+
366
+ - regex: 'CFNetwork/596'
367
+ name: 'Mac'
368
+ version: '10.8'
369
+
370
+ - regex: 'CFNetwork/520'
371
+ name: 'Mac'
372
+ version: '10.7'
373
+
374
+ - regex: 'CFNetwork/454'
375
+ name: 'Mac'
376
+ version: '10.6'
377
+
378
+ - regex: 'CFNetwork/(?:438|422|339|330|221|220|217)'
379
+ name: 'Mac'
380
+ version: '10.5'
381
+
382
+ - regex: 'CFNetwork/12[89]'
383
+ name: 'Mac'
384
+ version: '10.4'
385
+
386
+ - regex: 'CFNetwork/1\.2'
387
+ name: 'Mac'
388
+ version: '10.3'
389
+
390
+ - regex: 'CFNetwork/1\.1'
391
+ name: 'Mac'
392
+ version: '10.2'
393
+
241
394
  - regex: 'Mac OS X(?: (?:Version )?(\d+(?:[_\.]\d+)+))?'
242
395
  name: 'Mac'
243
396
  version: '$1'
@@ -340,7 +493,7 @@
340
493
  version: ''
341
494
 
342
495
 
343
- - regex: 'Symbian OS|SymbOS'
496
+ - regex: 'Symbian(?: OS)?|SymbOS'
344
497
  name: 'Symbian OS'
345
498
  version: ''
346
499
 
@@ -418,8 +571,23 @@
418
571
  name: 'WebTV'
419
572
  version: '$1'
420
573
 
421
-
422
-
574
+
575
+ ##########
576
+ # Remix OS
577
+ ##########
578
+ - regex: 'RemixOS 5.1.1'
579
+ name: 'Remix OS'
580
+ version: '1'
581
+
582
+ - regex: 'RemixOS 6.0'
583
+ name: 'Remix OS'
584
+ version: '2'
585
+
586
+ - regex: 'RemixOS'
587
+ name: 'Remix OS'
588
+ version: ''
589
+
590
+
423
591
  ##########
424
592
  # Unix
425
593
  ##########
@@ -463,7 +631,7 @@
463
631
  version: '$1'
464
632
 
465
633
 
466
- - regex: 'IRIX(?:[/ ]?(\d+[\.\d]+))'
634
+ - regex: 'IRIX(?:;64)?(?:[/ ]?(\d+[\.\d]+))'
467
635
  name: 'IRIX'
468
636
  version: '$1'
469
637
 
@@ -519,7 +687,7 @@
519
687
  ###########
520
688
  # Linux (Generic)
521
689
  ###########
522
- - regex: 'Linux[^a-z]'
690
+ - regex: 'Linux(?:OS)?[^a-z]'
523
691
  name: 'GNU/Linux'
524
692
  version: ''
525
693
 
@@ -60,6 +60,7 @@ Compaq:
60
60
  - 'CPDTDF'
61
61
  - 'CPNTDF(JS?)'
62
62
  - 'CMNTDF(JS)?'
63
+ - 'CMDTDF(JS)?'
63
64
 
64
65
  HP:
65
66
  - 'HPCMHP'
@@ -96,5 +96,41 @@ describe DeviceDetector do
96
96
 
97
97
  end
98
98
 
99
+ describe 'recognize and ignore sprd- prefix' do
100
+
101
+ let(:user_agent) { 'sprd-Galaxy-S5/1.0 Linux/2.6.35.7 Android/4.4.4 Release/11.29.2014 Browser/AppleWebKit533.1 (KHTML, like Gecko) Mozilla/5.0 Mobile' }
102
+
103
+ it 'returns the correct client name' do
104
+ client.name.must_equal "Android Browser"
105
+ end
106
+
107
+ it 'recognizes the device name' do
108
+ client.device_name.must_equal "GALAXY S5"
109
+ end
110
+
111
+ it 'recognizes the device type' do
112
+ client.device_type.must_equal "smartphone"
113
+ end
114
+
115
+ end
116
+
117
+ describe 'remove TD suffix from model' do
118
+
119
+ let(:user_agent) { 'Lenovo-A398t+_TD/S100 Linux/3.4.5 Android/4.1.2 Release/09.10.2013 Browser/AppleWebKit534.30 Mobile Safari/534.30' }
120
+
121
+ it 'returns the correct client name' do
122
+ client.name.must_equal "Android Browser"
123
+ end
124
+
125
+ it 'recognizes the device name' do
126
+ client.device_name.must_equal "A398t+"
127
+ end
128
+
129
+ it 'recognizes the device type' do
130
+ client.device_type.must_equal "smartphone"
131
+ end
132
+
133
+ end
134
+
99
135
  end
100
136