device_detector 1.0.0 → 1.0.1

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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +5 -4
  3. data/CHANGELOG.md +4 -4
  4. data/README.md +6 -8
  5. data/lib/device_detector.rb +2 -2
  6. data/lib/device_detector/version.rb +1 -1
  7. data/regexes/bots.yml +461 -10
  8. data/regexes/client/browser_engine.yml +4 -1
  9. data/regexes/client/browsers.yml +167 -17
  10. data/regexes/client/feed_readers.yml +30 -0
  11. data/regexes/client/libraries.yml +38 -0
  12. data/regexes/client/mediaplayers.yml +4 -0
  13. data/regexes/client/mobile_apps.yml +82 -1
  14. data/regexes/client/pim.yml +4 -0
  15. data/regexes/device/mobiles.yml +1761 -138
  16. data/regexes/device/portable_media_player.yml +2 -4
  17. data/regexes/device/televisions.yml +16 -2
  18. data/regexes/oss.yml +25 -4
  19. data/spec/device_detector/detector_fixtures_spec.rb +51 -11
  20. data/spec/device_detector_spec.rb +20 -0
  21. data/spec/fixtures/client/browser.yml +446 -11
  22. data/spec/fixtures/client/feed_reader.yml +25 -1
  23. data/spec/fixtures/client/library.yml +55 -1
  24. data/spec/fixtures/client/mediaplayer.yml +6 -0
  25. data/spec/fixtures/client/mobile_app.yml +81 -1
  26. data/spec/fixtures/client/pim.yml +7 -1
  27. data/spec/fixtures/detector/bots.yml +668 -108
  28. data/spec/fixtures/detector/camera.yml +14 -8
  29. data/spec/fixtures/detector/car_browser.yml +4 -3
  30. data/spec/fixtures/detector/console.yml +38 -24
  31. data/spec/fixtures/detector/desktop.yml +981 -687
  32. data/spec/fixtures/detector/feature_phone.yml +82 -41
  33. data/spec/fixtures/detector/feed_reader.yml +37 -0
  34. data/spec/fixtures/detector/mobile_apps.yml +257 -0
  35. data/spec/fixtures/detector/phablet.yml +569 -163
  36. data/spec/fixtures/detector/portable_media_player.yml +24 -16
  37. data/spec/fixtures/detector/smart_display.yml +8 -5
  38. data/spec/fixtures/detector/smartphone-1.yml +4698 -4235
  39. data/spec/fixtures/detector/smartphone-2.yml +4804 -4256
  40. data/spec/fixtures/detector/smartphone-3.yml +5060 -4603
  41. data/spec/fixtures/detector/smartphone-4.yml +6803 -2637
  42. data/spec/fixtures/detector/smartphone-5.yml +7044 -0
  43. data/spec/fixtures/detector/smartphone.yml +4380 -3904
  44. data/spec/fixtures/detector/tablet-1.yml +4530 -4036
  45. data/spec/fixtures/detector/tablet-2.yml +4875 -25
  46. data/spec/fixtures/detector/tablet.yml +3266 -2764
  47. data/spec/fixtures/detector/tv.yml +563 -206
  48. data/spec/fixtures/detector/unknown.yml +1033 -863
  49. data/spec/fixtures/parser/oss.yml +114 -2
  50. data/spec/fixtures/parser/vendorfragments.yml +2 -2
  51. metadata +5 -3
@@ -27,4 +27,7 @@
27
27
  name: 'Gecko'
28
28
 
29
29
  - regex: 'KHTML'
30
- name: 'KHTML'
30
+ name: 'KHTML'
31
+
32
+ - regex: 'NetSurf'
33
+ name: 'NetSurf'
@@ -12,6 +12,20 @@
12
12
  engine:
13
13
  default: 'Edge'
14
14
 
15
+ # Microsoft Edge for iOS
16
+ - regex: 'EdgiOS[ /](\d+[\.\d]+)'
17
+ name: 'Microsoft Edge'
18
+ version: '$1'
19
+ engine:
20
+ default: 'WebKit'
21
+
22
+ # Microsoft Edge for Android
23
+ - regex: 'EdgA[ /](\d+[\.\d]+)'
24
+ name: 'Microsoft Edge'
25
+ version: '$1'
26
+ engine:
27
+ default: 'Blink'
28
+
15
29
  # 360 Browser
16
30
  - regex: 'QIHU 360[ES]E'
17
31
  name: '360 Browser'
@@ -45,6 +59,25 @@
45
59
  engine:
46
60
  default: 'Gecko'
47
61
 
62
+ # Waterfox
63
+ - regex: 'Waterfox(?:/(\d+[\.\d]+))?'
64
+ name: 'Waterfox'
65
+ version: '$1'
66
+ engine:
67
+ default: 'Gecko'
68
+
69
+ #AlohaBrowser
70
+ - regex: 'AlohaBrowser(?:/(\d+[\.\d]+))?'
71
+ name: 'Aloha Browser'
72
+ version: '$1'
73
+
74
+ #Epic
75
+ - regex: 'Epic(?:/(\d+[\.\d]+))?'
76
+ name: 'Epic'
77
+ version: '$1'
78
+ engine:
79
+ default: 'Gecko'
80
+
48
81
  #Fennec (Firefox for mobile)
49
82
  - regex: 'Fennec(?:/(\d+[\.\d]+))?'
50
83
  name: 'Fennec'
@@ -103,6 +136,11 @@
103
136
  engine:
104
137
  default: 'Blink'
105
138
 
139
+ #Iridium
140
+ - regex: 'Iridium(?:/(\d+[\.\d]+))?'
141
+ name: 'Iridium'
142
+ version: '$1'
143
+
106
144
  #Iceweasel
107
145
  - regex: 'Iceweasel(?:/(\d+[\.\d]+))?'
108
146
  name: 'Iceweasel'
@@ -167,6 +205,18 @@
167
205
  engine:
168
206
  default: 'Gecko'
169
207
 
208
+ #Firefox Focus / Firefox Klar
209
+ - regex: '(?:Focus|Klar)(?:/(\d+[\.\d]+))?'
210
+ name: 'Firefox Focus'
211
+ version: '$1'
212
+
213
+ #Cyberfox
214
+ - regex: 'Cyberfox(?:/(\d+[\.\d]+))?'
215
+ name: 'Cyberfox'
216
+ version: '$1'
217
+ engine:
218
+ default: 'Gecko'
219
+
170
220
  #Swiftfox
171
221
  - regex: 'Firefox/(\d+[\.\d]+).*\(Swiftfox\)'
172
222
  name: 'Swiftfox'
@@ -174,6 +224,13 @@
174
224
  engine:
175
225
  default: 'Gecko'
176
226
 
227
+ #Firefox Mobile
228
+ - regex: '(Mobile|Tablet).*Firefox(?:/(\d+[\.\d]+))?'
229
+ name: 'Firefox Mobile'
230
+ version: '$2'
231
+ engine:
232
+ default: 'Gecko'
233
+
177
234
  #Firefox
178
235
  - regex: 'Firefox(?:/(\d+[\.\d]+))?'
179
236
  name: 'Firefox'
@@ -186,7 +243,7 @@
186
243
  engine:
187
244
  default: 'Gecko'
188
245
  - regex: 'FxiOS/(\d+[\.\d]+)'
189
- name: 'Firefox'
246
+ name: 'Firefox Mobile'
190
247
  version: 'iOS $1'
191
248
  engine:
192
249
  default: 'WebKit'
@@ -230,6 +287,21 @@
230
287
  engine:
231
288
  default: '' # Mosaic in the first versions, then Gecko
232
289
 
290
+ #Polarity
291
+ - regex: '(?:Polarity)(?:[/ ](\d+[\.\d]+))?'
292
+ name: 'Polarity'
293
+ version: '$1'
294
+
295
+ #QupZilla
296
+ - regex: '(?:QupZilla)(?:[/ ](\d+[\.\d]+))?'
297
+ name: 'QupZilla'
298
+ version: '$1'
299
+
300
+ #Dooble
301
+ - regex: '(?:Dooble)(?:[/ ](\d+[\.\d]+))?'
302
+ name: 'Dooble'
303
+ version: '$1'
304
+
233
305
  #Opera
234
306
  - regex: '(?:Opera Tablet.*Version|Opera/.+Opera Mobi.+Version|Mobile.+OPR)/(\d+[\.\d]+)'
235
307
  name: 'Opera Mobile'
@@ -238,7 +310,19 @@
238
310
  default: 'Presto'
239
311
  versions:
240
312
  15: 'Blink'
241
- - regex: 'Opera Mini/(?:att/)?(\d+[\.\d]+)'
313
+ - regex: 'Opera/(\d+[\.\d]+).+Opera Mobi'
314
+ name: 'Opera Mobile'
315
+ version: '$1'
316
+ engine:
317
+ default: 'Presto'
318
+ versions:
319
+ 15: 'Blink'
320
+ - regex: 'Opera ?Mini/(?:att/)?(\d+[\.\d]+)'
321
+ name: 'Opera Mini'
322
+ version: '$1'
323
+ engine:
324
+ default: 'Presto'
325
+ - regex: 'Opera ?Mini.+Version/(\d+[\.\d]+)'
242
326
  name: 'Opera Mini'
243
327
  version: '$1'
244
328
  engine:
@@ -257,13 +341,13 @@
257
341
  default: 'Presto'
258
342
  versions:
259
343
  15: 'Blink'
260
- - regex: '(?:Opera|OPR)[/ ]?(?:9.80.*Version/)?(\d+[\.\d]+)'
344
+ - regex: '(?:Opera[/ ]?|OPR[/ ])(?:9.80.*Version/)?(\d+[\.\d]+)'
261
345
  name: 'Opera'
262
346
  version: '$1'
263
347
  engine:
264
348
  default: ''
265
349
  versions:
266
- 3.5: 'Elektra'
350
+ '3.5': 'Elektra'
267
351
  7: 'Presto'
268
352
  15: 'Blink'
269
353
 
@@ -385,15 +469,15 @@
385
469
  versions:
386
470
  28: 'Blink'
387
471
 
388
- #Epiphany
472
+ #GNOME Web
389
473
  - regex: 'Epiphany(?:/(\d+[\.\d]+))?'
390
- name: 'Epiphany'
474
+ name: 'GNOME Web'
391
475
  version: '$1'
392
476
  engine:
393
477
  default: 'Gecko'
394
478
  versions:
395
- 2.9.16: '' # multi engine
396
- 2.28: 'WebKit'
479
+ '2.9.16': '' # multi engine
480
+ '2.28': 'WebKit'
397
481
 
398
482
  # Liebao
399
483
  - regex: 'LBBrowser(?:[ /](\d+[\.\d]+))?'
@@ -433,6 +517,32 @@
433
517
  name: 'Samsung Browser'
434
518
  version: '$1'
435
519
 
520
+ #Streamy
521
+ #This browser is built on top of Chromium.
522
+ #It should be checked first.
523
+ - regex: 'Streamy(?:/(\d+[\.\d]+))?'
524
+ name: 'Streamy'
525
+ version: '$1'
526
+ engine:
527
+ default: 'WebKit'
528
+
529
+ #Isivioo
530
+ #Andorid version of the browser is built on top of Chrome Mobile.
531
+ #It should be checked first.
532
+ - regex: 'isivioo'
533
+ name: 'Isivioo'
534
+ version: ''
535
+ engine:
536
+ default: 'WebKit'
537
+
538
+ #UC Browser
539
+ - regex: 'UC[ ]?Browser(?:[ /]?(\d+[\.\d]+))?'
540
+ name: 'UC Browser'
541
+ version: '$1'
542
+ - regex: 'UCWEB(?:[ /]?(\d+[\.\d]+))?'
543
+ name: 'UC Browser'
544
+ version: '$1'
545
+
436
546
  #Chrome
437
547
  - regex: 'CrMo(?:/(\d+[\.\d]+))?'
438
548
  name: 'Chrome Mobile'
@@ -473,14 +583,6 @@
473
583
  versions:
474
584
  28: 'Blink'
475
585
 
476
- #UC Browser
477
- - regex: 'UC[ ]?Browser(?:[ /]?(\d+[\.\d]+))?'
478
- name: 'UC Browser'
479
- version: '$1'
480
- - regex: 'UCWEB(?:[ /]?(\d+[\.\d]+))?'
481
- name: 'UC Browser'
482
- version: '$1'
483
-
484
586
  #Tizen Browser
485
587
  - regex: '(?:Tizen|SLP) Browser(?:/(\d+[\.\d]+))?'
486
588
  name: 'Tizen Browser'
@@ -560,6 +662,13 @@
560
662
  engine:
561
663
  default: 'Gecko'
562
664
 
665
+ #B-Line
666
+ - regex: 'bline(?:/(\d+[\.\d]+))?'
667
+ name: 'B-Line'
668
+ version: '$1'
669
+ engine:
670
+ default: 'WebKit'
671
+
563
672
  #BrowseX
564
673
  - regex: 'BrowseX \((\d+[\.\d]+)'
565
674
  name: 'BrowseX'
@@ -575,6 +684,13 @@
575
684
  name: 'Cheshire'
576
685
  version: '$1'
577
686
 
687
+ #dbrowser
688
+ - regex: 'dbrowser'
689
+ name: 'dbrowser'
690
+ version: ''
691
+ engine:
692
+ default: 'WebKit'
693
+
578
694
  #Dillo
579
695
  - regex: 'Dillo(?:/(\d+[\.\d]+))?'
580
696
  name: 'Dillo'
@@ -639,6 +755,13 @@
639
755
  name: 'IBrowse'
640
756
  version: '$1'
641
757
 
758
+ #iCabMobile
759
+ - regex: 'iCabMobile(?:[ /](\d+[\.\d]+))?'
760
+ name: 'iCab Mobile'
761
+ version: '$1'
762
+ engine:
763
+ default: 'WebKit'
764
+
642
765
  #iCab
643
766
  - regex: 'iCab(?:[ /](\d+[\.\d]+))?'
644
767
  name: 'iCab'
@@ -905,6 +1028,11 @@
905
1028
  name: 'BlackBerry Browser'
906
1029
  version: ''
907
1030
 
1031
+ #BriskBard
1032
+ - regex: 'BriskBard(?:/(\d+[\.\d]+))?'
1033
+ name: 'BriskBard'
1034
+ version: '$1'
1035
+
908
1036
  #Android Browser
909
1037
  - regex: 'Android'
910
1038
  name: 'Android Browser'
@@ -912,13 +1040,23 @@
912
1040
  engine:
913
1041
  default: 'WebKit'
914
1042
 
1043
+ #Coast
1044
+ - regex: 'Coast(?:/(\d+[\.\d]+))?'
1045
+ name: 'Coast'
1046
+ version: '$1'
1047
+
1048
+ #Qutebrowser
1049
+ - regex: 'qutebrowser(?:/(\d+[\.\d]+))?'
1050
+ name: 'Qutebrowser'
1051
+ version: '$1'
1052
+
915
1053
  #Safari
916
1054
  - regex: '(?:(?:iPod|iPad|iPhone).+Version|MobileSafari)/(\d+[\.\d]+)'
917
1055
  name: 'Mobile Safari'
918
1056
  version: '$1'
919
1057
  engine:
920
1058
  default: 'WebKit'
921
- - regex: 'Version/(\d+[\.\d]+).*Mobile.*Safari/'
1059
+ - regex: '(?:Version/(\d+[\.\d]+).*)?Mobile.*Safari/'
922
1060
  name: 'Mobile Safari'
923
1061
  version: '$1'
924
1062
  engine:
@@ -933,3 +1071,15 @@
933
1071
  version: '$1'
934
1072
  engine:
935
1073
  default: 'WebKit'
1074
+
1075
+ #Dorado
1076
+ - regex: 'Dorado WAP-Browser[/ ](\d+[\.\d]+)'
1077
+ name: 'Dorado'
1078
+ version: '$1'
1079
+
1080
+ #NetSurf
1081
+ - regex: 'NetSurf(?:/(\d+[\.\d]+))?'
1082
+ name: 'NetSurf'
1083
+ version: '$1'
1084
+ engine:
1085
+ default: 'NetSurf'
@@ -17,6 +17,18 @@
17
17
  url: 'https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/pubsub.1.html'
18
18
  type: 'Feed Reader'
19
19
 
20
+ - regex: 'BashPodder'
21
+ name: 'BashPodder'
22
+ version: ''
23
+ url: 'http://lincgeek.org/bashpodder/'
24
+ type: 'Feed Reader'
25
+
26
+ - regex: 'Downcast/([\d\.]+)'
27
+ name: 'Downcast'
28
+ version: '$1'
29
+ url: 'http://downcastapp.com/'
30
+ type: 'Feed Reader App'
31
+
20
32
  - regex: 'FeedDemon(?:/(\d+[\.\d]+))?'
21
33
  name: 'FeedDemon'
22
34
  version: '$1'
@@ -29,6 +41,18 @@
29
41
  url: 'http://www.chebinliu.com/projects/iphone/feeddler-rss-reader/'
30
42
  type: 'Feed Reader App'
31
43
 
44
+ - regex: 'gPodder/([\d\.]+)'
45
+ name: 'gPodder'
46
+ version: '$1'
47
+ url: 'http://gpodder.org/'
48
+ type: 'Feed Reader App'
49
+
50
+ - regex: 'Instacast/(\d+) CFNetwork/([\d\.]+)'
51
+ name: 'Instacast'
52
+ version: '$1'
53
+ url: 'http://vemedio.com/products/instacast-mac'
54
+ type: 'Feed Reader App'
55
+
32
56
  - regex: 'JetBrains Omea Reader(?:[/ ](\d+[\.\d]+))?'
33
57
  name: 'JetBrains Omea Reader'
34
58
  version: '$1'
@@ -65,6 +89,12 @@
65
89
  url: 'http://www.newsbeuter.org/'
66
90
  type: 'Feed Reader'
67
91
 
92
+ - regex: 'PritTorrent/([\d\.]+)'
93
+ name: 'PritTorrent'
94
+ version: '$1'
95
+ url: 'http://bitlove.org'
96
+ type: 'Feed Reader'
97
+
68
98
  - regex: 'Pulp(?:[/ ](\d+[\.\d]+))?'
69
99
  name: 'Pulp'
70
100
  version: '$1'
@@ -31,4 +31,42 @@
31
31
 
32
32
  - regex: '(?:perlclient|libwww-perl)(?:/?(\d+[\.\d]+))?'
33
33
  name: 'Perl'
34
+ version: '$1'
35
+
36
+ - regex: 'okhttp/([\d\.]+)'
37
+ name: 'OkHttp'
38
+ version: '$1'
39
+
40
+ - regex: 'HTTP_Request2(?:/(\d+[\.\d]+))?'
41
+ name: 'HTTP_Request2'
42
+ version: '$1'
43
+
44
+ - regex: 'HTTP_Request2(?:/(\d+[\.\d]+))?'
45
+ name: 'HTTP_Request2'
46
+ version: '$1'
47
+ url: 'http://pear.php.net/package/http_request2'
48
+
49
+ - regex: 'Mechanize(?:/(\d+[\.\d]+))?'
50
+ name: 'Mechanize'
51
+ version: '$1'
52
+ url: 'http://github.com/sparklemotion/mechanize/'
53
+
54
+ - regex: 'aiohttp(?:/(\d+[\.\d]+))?'
55
+ name: 'aiohttp'
56
+ version: '$1'
57
+
58
+ - regex: 'Google-HTTP-Java-Client(?:/(\d+[\.\d\w-]+))?'
59
+ name: 'Google HTTP Java Client'
60
+ version: '$1'
61
+
62
+ - regex: 'WWW-Mechanize(?:/(\d+[\.\d]+))?'
63
+ name: 'WWW-Mechanize'
64
+ version: '$1'
65
+
66
+ - regex: 'Faraday(?: v(\d+[\.\d]+))?'
67
+ name: 'Faraday'
68
+ version: '$1'
69
+
70
+ - regex: '(?:Go-http-client|Go )/?(?:(\d+[\.\d]+))?(?: package http)?'
71
+ name: 'Go-http-client'
34
72
  version: '$1'
@@ -24,6 +24,10 @@
24
24
  - regex: 'FlyCast(?:/([\d\.]+))?'
25
25
  name: 'FlyCast'
26
26
  version: '$1'
27
+
28
+ - regex: 'foobar2000(?:/([\d\.]+))?'
29
+ name: 'Foobar2000'
30
+ version: '$1'
27
31
 
28
32
  - regex: 'MediaMonkey(?:[ /](\d+[\.\d]+))?'
29
33
  name: 'MediaMonkey'
@@ -10,6 +10,20 @@
10
10
  name: 'AndroidDownloadManager'
11
11
  version: '$1'
12
12
 
13
+ # Apple News
14
+ - regex: '(?:Apple)?News(?:[ /][\d\.]+)? Version(?:[ /]([\d\.]+))?'
15
+ name: 'Apple News'
16
+ version: '$1'
17
+
18
+ - regex: 'bPod'
19
+ name: 'bPod'
20
+ version: ''
21
+
22
+ # Facebook Messenger
23
+ - regex: '(?:MessengerForiOS|MESSENGER).(?:FBAV)(?:[ /]([\d\.]+))?'
24
+ name: 'Facebook Messenger'
25
+ version: '$1'
26
+
13
27
  # Facebook
14
28
  - regex: '(?:FBAV|com.facebook.katana)(?:[ /]([\d\.]+))?'
15
29
  name: 'Facebook'
@@ -45,6 +59,11 @@
45
59
  name: 'Pinterest'
46
60
  version: '$1'
47
61
 
62
+ # Podcatcher Deluxe
63
+ - regex: 'Podcatcher Deluxe'
64
+ name: 'Podcatcher Deluxe'
65
+ version: ''
66
+
48
67
  # YouTube
49
68
  - regex: 'com.google.android.youtube(?:/([\d\.]+))?'
50
69
  name: 'YouTube'
@@ -63,4 +82,66 @@
63
82
  # Line
64
83
  - regex: 'Line(?:[ /]([\d\.]+))'
65
84
  name: 'Line'
66
- version: '$1'
85
+ version: '$1'
86
+
87
+ # Instacast
88
+ - regex: 'Instacast(?:HD)?/(\d\.[\d\.abc]+) CFNetwork/([\d\.]+) Darwin/([\d\.]+)'
89
+ name: 'Instacast'
90
+ version: '$1'
91
+ -
92
+ regex: 'Podcasts/([\d\.]+)'
93
+ name: 'Podcasts'
94
+ version: '$1'
95
+ -
96
+ regex: 'Pocket Casts(?:, (?:Android|iOS) v([\d\.]+))?'
97
+ name: 'Pocket Casts'
98
+ version: '$1'
99
+ -
100
+ regex: 'Podcat/([\d\.]+)'
101
+ name: 'Podcat'
102
+ version: '$1'
103
+
104
+ -
105
+ regex: 'BeyondPod'
106
+ name: 'BeyondPod'
107
+ version:
108
+ -
109
+ regex: 'AntennaPod/?([\d\.]+)?'
110
+ name: 'AntennaPod'
111
+ version: '$1'
112
+ -
113
+ regex: 'Overcast/([\d\.]+)'
114
+ name: 'Overcast'
115
+ version: '$1'
116
+ -
117
+ regex: 'Player FM'
118
+ name: 'Player FM'
119
+ version: ''
120
+ -
121
+ regex: 'Podkicker(?: Pro)?/([\d\.]+)'
122
+ name: 'Podkicker'
123
+ version: '$1'
124
+ -
125
+ regex: 'Castro/(\d+)'
126
+ name: 'Castro'
127
+ version: '$1'
128
+ -
129
+ regex: 'Castro 2 ([\d\.]+)/[\d]+ Like iTunes'
130
+ name: 'Castro 2'
131
+ version: '$1'
132
+ -
133
+ regex: 'Castro 2'
134
+ name: 'Castro 2'
135
+ version: ''
136
+ -
137
+ regex: 'DoggCatcher'
138
+ name: 'DoggCatcher'
139
+ version:
140
+ -
141
+ regex: 'Podcat/([\d]+) CFNetwork/([\d\.]+) Darwin/([\d\.]+)'
142
+ name: 'Podcat'
143
+ version: '$1'
144
+ -
145
+ regex: 'i[cC]atcher[^\d]+([\d\.]+)'
146
+ name: 'iCatcher'
147
+ version: '$1'