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.
- checksums.yaml +4 -4
- data/.travis.yml +11 -3
- data/CHANGELOG.md +10 -5
- data/README.md +4 -4
- data/Rakefile +24 -19
- data/device_detector.gemspec +1 -1
- data/lib/device_detector.rb +25 -3
- data/lib/device_detector/device.rb +1 -1
- data/lib/device_detector/model_extractor.rb +4 -0
- data/lib/device_detector/os.rb +8 -3
- data/lib/device_detector/parser.rb +1 -1
- data/lib/device_detector/version.rb +1 -1
- data/regexes/bots.yml +211 -27
- data/regexes/client/browsers.yml +192 -58
- data/regexes/client/feed_readers.yml +6 -0
- data/regexes/client/libraries.yml +4 -0
- data/regexes/client/mediaplayers.yml +8 -4
- data/regexes/client/mobile_apps.yml +39 -4
- data/regexes/client/pim.yml +4 -0
- data/regexes/device/mobiles.yml +1803 -242
- data/regexes/device/televisions.yml +53 -11
- data/regexes/oss.yml +180 -12
- data/regexes/vendorfragments.yml +1 -0
- data/spec/device_detector/concrete_user_agent_spec.rb +36 -0
- data/spec/device_detector/detector_fixtures_spec.rb +1 -1
- data/spec/fixtures/client/browser.yml +313 -2
- data/spec/fixtures/client/feed_reader.yml +8 -1
- data/spec/fixtures/client/library.yml +7 -1
- data/spec/fixtures/client/mediaplayer.yml +6 -1
- data/spec/fixtures/client/mobile_app.yml +6 -0
- data/spec/fixtures/client/pim.yml +6 -0
- data/spec/fixtures/detector/bots.yml +2307 -612
- data/spec/fixtures/detector/camera.yml +6 -0
- data/spec/fixtures/detector/car_browser.yml +1 -0
- data/spec/fixtures/detector/console.yml +14 -0
- data/spec/fixtures/detector/desktop.yml +308 -48
- data/spec/fixtures/detector/feature_phone.yml +63 -0
- data/spec/fixtures/detector/feed_reader.yml +50 -26
- data/spec/fixtures/detector/mediaplayer.yml +28 -6
- data/spec/fixtures/detector/mobile_apps.yml +117 -0
- data/spec/fixtures/detector/phablet.yml +1066 -183
- data/spec/fixtures/detector/portable_media_player.yml +8 -0
- data/spec/fixtures/detector/smart_display.yml +39 -0
- data/spec/fixtures/detector/smartphone-1.yml +9469 -0
- data/spec/fixtures/detector/smartphone-2.yml +9414 -0
- data/spec/fixtures/detector/smartphone-3.yml +9396 -0
- data/spec/fixtures/detector/smartphone-4.yml +5742 -0
- data/spec/fixtures/detector/smartphone.yml +3446 -23680
- data/spec/fixtures/detector/tablet-1.yml +9495 -0
- data/spec/fixtures/detector/tablet-2.yml +248 -0
- data/spec/fixtures/detector/tablet.yml +2786 -7961
- data/spec/fixtures/detector/tv.yml +1376 -210
- data/spec/fixtures/detector/unknown.yml +205 -509
- data/spec/fixtures/device/console.yml +6 -0
- data/spec/fixtures/parser/oss.yml +194 -1
- data/spec/fixtures/parser/vendorfragments.yml +6 -0
- metadata +16 -6
- 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: '(
|
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: '(
|
139
|
-
model: '$1'
|
168
|
+
- regex: 'SmartTV(2012|2013|2014|2015)'
|
169
|
+
model: 'Smart TV $1'
|
140
170
|
- regex: 'Maple_2011'
|
141
|
-
model: '
|
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|
|
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: '
|
240
|
-
model: '
|
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: '
|
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
|
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
|
|
data/regexes/vendorfragments.yml
CHANGED
@@ -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
|
|