device_detector 0.8.2 → 0.9.0

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