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.
- 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
|
|