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
@@ -12,6 +12,11 @@
12
12
  engine:
13
13
  default: 'Edge'
14
14
 
15
+ # 360 Browser
16
+ - regex: 'QIHU 360[ES]E'
17
+ name: '360 Browser'
18
+ version: ''
19
+
15
20
  # 360 Phone Browser
16
21
  - regex: '360 Aphone Browser(?: \((\d+[\.\d]+)(?:beta)?\))?'
17
22
  name: '360 Phone Browser'
@@ -53,6 +58,17 @@
53
58
  version: '$1'
54
59
  engine:
55
60
  default: 'Gecko'
61
+ - regex: 'Maemo Browser(?: (\d+[\.\d]+))?'
62
+ name: 'MicroB'
63
+ version: '$1'
64
+ engine:
65
+ default: 'Gecko'
66
+
67
+ #Deepnet Explorer
68
+ - regex: 'Deepnet Explorer (\d+[\.\d]+)?'
69
+ name: 'Deepnet Explorer'
70
+ version: '$1'
71
+
56
72
 
57
73
  #Avant Browser
58
74
  - regex: 'Avant Browser'
@@ -70,11 +86,23 @@
70
86
  versions:
71
87
  28: 'Blink'
72
88
 
89
+ #Atomic Web Browser
90
+ - regex: 'AtomicBrowser(?:/(\d+[\.\d]+))?'
91
+ name: 'Atomic Web Browser'
92
+ version: '$1'
93
+
73
94
  #Bunjalloo
74
95
  - regex: 'Bunjalloo(?:/(\d+[\.\d]+))?'
75
96
  name: 'Bunjalloo'
76
97
  version: '$1'
77
98
 
99
+ #Brave
100
+ - regex: 'Brave(?:/(\d+[\.\d]+))?'
101
+ name: 'Brave'
102
+ version: '$1'
103
+ engine:
104
+ default: 'Blink'
105
+
78
106
  #Iceweasel
79
107
  - regex: 'Iceweasel(?:/(\d+[\.\d]+))?'
80
108
  name: 'Iceweasel'
@@ -120,6 +148,11 @@
120
148
  versions:
121
149
  3: 'WebKit'
122
150
 
151
+ #Jig Browser
152
+ - regex: 'jig browser(?: web;|9i?)?(?:[/ ](\d+[\.\d]+))?'
153
+ name: 'Jig Browser'
154
+ version: '$1'
155
+
123
156
  #Kapiko
124
157
  - regex: 'Kapiko(?:/(\d+[\.\d]+))?'
125
158
  name: 'Kapiko'
@@ -127,6 +160,13 @@
127
160
  engine:
128
161
  default: 'Gecko'
129
162
 
163
+ #Kylo
164
+ - regex: 'Kylo(?:/(\d+[\.\d]+))?'
165
+ name: 'Kylo'
166
+ version: '$1'
167
+ engine:
168
+ default: 'Gecko'
169
+
130
170
  #Swiftfox
131
171
  - regex: 'Firefox/(\d+[\.\d]+).*\(Swiftfox\)'
132
172
  name: 'Swiftfox'
@@ -151,6 +191,11 @@
151
191
  engine:
152
192
  default: 'WebKit'
153
193
 
194
+ #ANT Fresco
195
+ - regex: 'ANTFresco(?:[/ ](\d+[\.\d]+))?'
196
+ name: 'ANT Fresco'
197
+ version: '$1'
198
+
154
199
  #ANTGalio
155
200
  - regex: 'ANTGalio(?:/(\d+[\.\d]+))?'
156
201
  name: 'ANTGalio'
@@ -173,8 +218,13 @@
173
218
  name: 'Fireweb Navigator'
174
219
  version: '$1'
175
220
 
221
+ #Fireweb
222
+ - regex: 'Fireweb(?:/(\d+[\.\d]+))?'
223
+ name: 'Fireweb'
224
+ version: '$1'
225
+
176
226
  #Netscape
177
- - regex: '(?:Navigator|Netscape6)(?:/(\d+[\.\d]+))?'
227
+ - regex: '(?:Navigator|Netscape6?)(?:/(\d+[\.\d]+))?'
178
228
  name: 'Netscape'
179
229
  version: '$1'
180
230
  engine:
@@ -207,12 +257,14 @@
207
257
  default: 'Presto'
208
258
  versions:
209
259
  15: 'Blink'
210
- - regex: '(?:Opera|OPR)[/ ](?:9.80.*Version/)?(\d+[\.\d]+)'
260
+ - regex: '(?:Opera|OPR)[/ ]?(?:9.80.*Version/)?(\d+[\.\d]+)'
211
261
  name: 'Opera'
212
262
  version: '$1'
213
263
  engine:
214
- default: 'Presto'
264
+ default: ''
215
265
  versions:
266
+ 3.5: 'Elektra'
267
+ 7: 'Presto'
216
268
  15: 'Blink'
217
269
 
218
270
  #Rekonq
@@ -285,6 +337,13 @@
285
337
  engine:
286
338
  default: 'Blink'
287
339
 
340
+ #TweakStyle
341
+ - regex: 'TweakStyle(?:/(\d+[\.\d]+))?'
342
+ name: 'TweakStyle'
343
+ version: '$1'
344
+ engine:
345
+ default: 'Blink'
346
+
288
347
  #Midori
289
348
  - regex: 'Midori(?:/(\d+[\.\d]+))?'
290
349
  name: 'Midori'
@@ -298,7 +357,7 @@
298
357
  version: '$1'
299
358
 
300
359
  #Maxthon
301
- - regex: 'Maxthon[ /](\d+[\.\d]+)'
360
+ - regex: '(?:Maxthon|MxBrowser)[ /](\d+[\.\d]+)'
302
361
  name: 'Maxthon'
303
362
  version: '$1'
304
363
  engine:
@@ -347,10 +406,33 @@
347
406
  version: '$1'
348
407
 
349
408
  # QQ Browser
350
- - regex: 'QQBrowser/([\.\d]+)'
409
+ - regex: 'M?QQBrowser(?:/(?:Mini)?([\.\d]+))?'
351
410
  name: 'QQ Browser'
352
411
  version: '$1'
353
412
 
413
+ # MIUI Browser
414
+ - regex: 'MIUIBrowser(?:/(\d+[\.\d]+))?'
415
+ name: 'MIUI Browser'
416
+ version: '$1'
417
+
418
+ # Coc Coc
419
+ # This browser (http://coccoc.vn/) is built on top of Chromium with
420
+ # additional features for Vietnamese users. Its regex has to be placed
421
+ # before generic Chrome regex, or Chrome regex will match first and
422
+ # the browser is mistaken as "Chrome".
423
+ - regex: 'coc_coc_browser(?:/(\d+[\.\d]+))?'
424
+ name: 'Coc Coc'
425
+ version: '$1'
426
+ engine:
427
+ default: 'WebKit'
428
+ versions:
429
+ 28: 'Blink'
430
+
431
+ #Samsung Browser
432
+ - regex: 'Samsung ?Browser(?:[/ ](\d+[\.\d]+))?'
433
+ name: 'Samsung Browser'
434
+ version: '$1'
435
+
354
436
  #Chrome
355
437
  - regex: 'CrMo(?:/(\d+[\.\d]+))?'
356
438
  name: 'Chrome Mobile'
@@ -364,7 +446,7 @@
364
446
  version: '$1'
365
447
  engine:
366
448
  default: 'WebKit'
367
- - regex: 'Chrome(?:/(\d+[\.\d]+))?.*Mobile'
449
+ - regex: 'Chrome(?:/(\d+[\.\d]+))? Mobile'
368
450
  name: 'Chrome Mobile'
369
451
  version: '$1'
370
452
  engine:
@@ -422,6 +504,11 @@
422
504
  name: 'Palm WebPro'
423
505
  version: '$1'
424
506
 
507
+ #Palmscape
508
+ - regex: 'Palmscape(?:[ /](\d+[\.\d]+))?'
509
+ name: 'Palmscape'
510
+ version: '$1'
511
+
425
512
  #Jasmine
426
513
  - regex: 'Jasmine(?:[ /](\d+[\.\d]+))?'
427
514
  name: 'Jasmine'
@@ -433,7 +520,7 @@
433
520
  version: '$1'
434
521
  engine:
435
522
  default: 'Text-based'
436
-
523
+
437
524
  #NCSA Mosaic
438
525
  - regex: 'NCSA_Mosaic(?:/(\d+[\.\d]+))?'
439
526
  name: 'NCSA Mosaic'
@@ -443,7 +530,7 @@
443
530
  - regex: 'ABrowse(?: (\d+[\.\d]+))?'
444
531
  name: 'ABrowse'
445
532
  version: '$1'
446
-
533
+
447
534
  #Amaya
448
535
  - regex: 'amaya(?:/(\d+[\.\d]+))?'
449
536
  name: 'Amaya'
@@ -453,31 +540,26 @@
453
540
  - regex: 'AmigaVoyager(?:/(\d+[\.\d]+))?'
454
541
  name: 'Amiga Voyager'
455
542
  version: '$1'
456
-
543
+
457
544
  #Amiga Aweb
458
545
  - regex: 'Amiga-Aweb(?:/(\d+[\.\d]+))?'
459
546
  name: 'Amiga Aweb'
460
547
  version: '$1'
461
-
548
+
462
549
  #Arora
463
550
  - regex: 'Arora(?:/(\d+[\.\d]+))?'
464
551
  name: 'Arora'
465
552
  version: '$1'
466
553
  engine:
467
554
  default: 'WebKit'
468
-
555
+
469
556
  #Beonex
470
557
  - regex: 'Beonex(?:/(\d+[\.\d]+))?'
471
558
  name: 'Beonex'
472
559
  version: '$1'
473
560
  engine:
474
561
  default: 'Gecko'
475
-
476
- #BlackBerry Browser
477
- - regex: 'BlackBerry|PlayBook|BB10'
478
- name: 'BlackBerry Browser'
479
- version: ''
480
-
562
+
481
563
  #BrowseX
482
564
  - regex: 'BrowseX \((\d+[\.\d]+)'
483
565
  name: 'BrowseX'
@@ -492,7 +574,7 @@
492
574
  - regex: 'Cheshire(?:/(\d+[\.\d]+))?'
493
575
  name: 'Cheshire'
494
576
  version: '$1'
495
-
577
+
496
578
  #Dillo
497
579
  - regex: 'Dillo(?:/(\d+[\.\d]+))?'
498
580
  name: 'Dillo'
@@ -506,52 +588,57 @@
506
588
  version: '$1'
507
589
  engine:
508
590
  default: 'WebKit'
509
-
591
+
510
592
  #Elinks
511
593
  - regex: 'Elinks(?:/(\d+[\.\d]+))?'
512
594
  name: 'Elinks'
513
595
  version: '$1'
514
596
  engine:
515
597
  default: 'Text-based'
516
-
598
+
599
+ #Element Browser
600
+ - regex: 'Element Browser(?:[ /](\d+[\.\d]+))?'
601
+ name: 'Element Browser'
602
+ version: '$1'
603
+
517
604
  #Firebird
518
- - regex: 'Firebird(?:/(\d+[\.\d]+))?'
605
+ - regex: 'Firebird(?! Build)(?:/(\d+[\.\d]+))?'
519
606
  name: 'Firebird'
520
607
  version: '$1'
521
608
  engine:
522
609
  default: 'Gecko'
523
-
610
+
524
611
  #Fluid
525
612
  - regex: 'Fluid(?:/(\d+[\.\d]+))?'
526
613
  name: 'Fluid'
527
614
  version: '$1'
528
615
  engine:
529
616
  default: 'WebKit'
530
-
617
+
531
618
  #Galeon
532
619
  - regex: 'Galeon(?:/(\d+[\.\d]+))?'
533
620
  name: 'Galeon'
534
621
  version: '$1'
535
622
  engine:
536
623
  default: 'Gecko'
537
-
624
+
538
625
  #Google Earth
539
626
  - regex: 'Google Earth(?:/(\d+[\.\d]+))?'
540
627
  name: 'Google Earth'
541
628
  version: '$1'
542
629
  engine:
543
630
  default: 'WebKit'
544
-
631
+
545
632
  #HotJava
546
633
  - regex: 'HotJava(?:/(\d+[\.\d]+))?'
547
634
  name: 'HotJava'
548
635
  version: '$1'
549
-
636
+
550
637
  #IBrowse
551
638
  - regex: 'IBrowse(?:[ /](\d+[\.\d]+))?'
552
639
  name: 'IBrowse'
553
640
  version: '$1'
554
-
641
+
555
642
  #iCab
556
643
  - regex: 'iCab(?:[ /](\d+[\.\d]+))?'
557
644
  name: 'iCab'
@@ -623,19 +710,19 @@
623
710
  version: '$1'
624
711
  engine:
625
712
  default: '' # multi engine
626
-
713
+
627
714
  #Kindle Browser
628
715
  - regex: 'Kindle/(\d+[\.\d]+)'
629
716
  name: 'Kindle Browser'
630
717
  version: '$1'
631
-
718
+
632
719
  #K-meleon
633
720
  - regex: 'K-meleon(?:/(\d+[\.\d]+))?'
634
721
  name: 'K-meleon'
635
722
  version: '$1'
636
723
  engine:
637
724
  default: 'Gecko'
638
-
725
+
639
726
  #Links
640
727
  - regex: 'Links(?: \((\d+[\.\d]+))?'
641
728
  name: 'Links'
@@ -643,23 +730,36 @@
643
730
  engine:
644
731
  default: 'Text-based'
645
732
 
733
+ # LG Browser
734
+ - regex: 'LG Browser(?:/(\d+[\.\d]+))'
735
+ name: 'LG Browser'
736
+ version: '$1'
737
+
738
+ # LuaKit
739
+ - regex: 'LuaKit(?:/(\d+[\.\d]+))?'
740
+ name: 'LuaKit'
741
+ version: '$1'
742
+
646
743
  #Openwave Mobile Browser
647
744
  - regex: 'UP.Browser(?:/(\d+[\.\d]+))?'
648
745
  name: 'Openwave Mobile Browser'
649
746
  version: '$1'
650
-
747
+ - regex: 'Openwave(?:/(\d+[\.\d]+))?'
748
+ name: 'Openwave Mobile Browser'
749
+ version: '$1'
750
+
651
751
  #OmniWeb
652
752
  - regex: 'OmniWeb(?:/[v]?(\d+[\.\d]+))?'
653
753
  name: 'OmniWeb'
654
754
  version: '$1'
655
755
  engine:
656
756
  default: 'WebKit'
657
-
757
+
658
758
  #Phoenix
659
759
  - regex: 'Phoenix(?:/(\d+[\.\d]+))?'
660
760
  name: 'Phoenix'
661
761
  version: '$1'
662
-
762
+
663
763
  #Mobile Silk
664
764
  - regex: 'Silk(?:/(\d+[\.\d]+))?'
665
765
  name: 'Mobile Silk'
@@ -667,28 +767,6 @@
667
767
  engine:
668
768
  default: 'Blink'
669
769
 
670
- # MIUI Browser
671
- - regex: 'MIUIBrowser(?:/(\d+[\.\d]+))?'
672
- name: 'MIUI Browser'
673
- version: '$1'
674
-
675
- #Nokia Browser
676
- - regex: '(?:NokiaBrowser|BrowserNG)(?:/(\d+[\.\d]+))?'
677
- name: 'Nokia Browser'
678
- version: '$1'
679
- - regex: 'Series60/5\.0'
680
- name: 'Nokia Browser'
681
- version: '7.0'
682
- - regex: 'Series60/(\d+[\.\d]+)'
683
- name: 'Nokia OSS Browser'
684
- version: '$1'
685
- - regex: 'S40OviBrowser/(\d+[\.\d]+)'
686
- name: 'Nokia Ovi Browser'
687
- version: '$1'
688
- - regex: '^Nokia|Nokia[EN]?\d+'
689
- name: 'Nokia Browser'
690
- version: ''
691
-
692
770
  #NetFront
693
771
  - regex: 'NetFrontLifeBrowser(?:/(\d+[\.\d]+))?'
694
772
  name: 'NetFront Life'
@@ -727,11 +805,23 @@
727
805
  name: 'Off By One'
728
806
  version: ''
729
807
 
808
+ #ONE Browser
809
+ - regex: 'OneBrowser(?:[ /](\d+[\.\d]+))?'
810
+ name: 'ONE Browser'
811
+ version: '$1'
812
+ engine:
813
+ default: 'WebKit'
814
+
730
815
  #Oregano
731
816
  - regex: 'Oregano(?:[ /](\d+[\.\d]+))?'
732
817
  name: 'Oregano'
733
818
  version: '$1'
734
819
 
820
+ #Otter Browser
821
+ - regex: 'Otter(?:[ /](\d+[\.\d]+))?'
822
+ name: 'Otter Browser'
823
+ version: '$1'
824
+
735
825
  #Polaris
736
826
  - regex: '(?:Polaris|Embider)(?:[/ ](\d+[\.\d]+))?'
737
827
  name: 'Polaris'
@@ -742,6 +832,13 @@
742
832
  name: 'SEMC-Browser'
743
833
  version: '$1'
744
834
 
835
+ #Seraphic Sraf
836
+ - regex: 'Sraf(?:[/ ](\d+[\.\d]+))?'
837
+ name: 'Seraphic Sraf'
838
+ version: '$1'
839
+ engine:
840
+ default: 'Blink'
841
+
745
842
  #Shiira
746
843
  - regex: 'Shiira(?:[/ ](\d+[\.\d]+))?'
747
844
  name: 'Shiira'
@@ -749,6 +846,11 @@
749
846
  engine:
750
847
  default: 'WebKit'
751
848
 
849
+ #Skyfire
850
+ - regex: 'Skyfire(?:[/ ](\d+[\.\d]+))?'
851
+ name: 'Skyfire'
852
+ version: '$1'
853
+
752
854
  #Snowshoe
753
855
  - regex: 'Snowshoe(?:/(\d+[\.\d]+))?'
754
856
  name: 'Snowshoe'
@@ -761,7 +863,17 @@
761
863
  name: 'Sunrise'
762
864
  version: '$1'
763
865
 
764
- # WeTab Browser
866
+ #SuperBird
867
+ - regex: 'SuperBird(?:/(\d+[\.\d]+))?'
868
+ name: 'SuperBird'
869
+ version: '$1'
870
+
871
+ #Vision Mobile Browser
872
+ - regex: 'Vision-Browser(?:/(\d+[\.\d]+))'
873
+ name: 'Vision Mobile Browser'
874
+ version: '$1'
875
+
876
+ #WeTab Browser
765
877
  - regex: 'WeTab-Browser'
766
878
  name: 'WeTab Browser'
767
879
  version: ''
@@ -771,15 +883,37 @@
771
883
  name: 'Xiino'
772
884
  version: '$1'
773
885
 
886
+ #Nokia Browser
887
+ - regex: '(?:NokiaBrowser|BrowserNG)(?:/(\d+[\.\d]+))?'
888
+ name: 'Nokia Browser'
889
+ version: '$1'
890
+ - regex: 'Series60/5\.0'
891
+ name: 'Nokia Browser'
892
+ version: '7.0'
893
+ - regex: 'Series60/(\d+[\.\d]+)'
894
+ name: 'Nokia OSS Browser'
895
+ version: '$1'
896
+ - regex: 'S40OviBrowser/(\d+[\.\d]+)'
897
+ name: 'Nokia Ovi Browser'
898
+ version: '$1'
899
+ - regex: '^Nokia|Nokia[EN]?\d+'
900
+ name: 'Nokia Browser'
901
+ version: ''
902
+
903
+ #BlackBerry Browser
904
+ - regex: 'BlackBerry|PlayBook|BB10'
905
+ name: 'BlackBerry Browser'
906
+ version: ''
907
+
774
908
  #Android Browser
775
909
  - regex: 'Android'
776
910
  name: 'Android Browser'
777
911
  version: ''
778
912
  engine:
779
913
  default: 'WebKit'
780
-
914
+
781
915
  #Safari
782
- - regex: '(?:iPod|iPad|iPhone).+Version/(\d+[\.\d]+)'
916
+ - regex: '(?:(?:iPod|iPad|iPhone).+Version|MobileSafari)/(\d+[\.\d]+)'
783
917
  name: 'Mobile Safari'
784
918
  version: '$1'
785
919
  engine: