device_detector 1.0.5 → 1.0.6

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 (90) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -6
  3. data/lib/device_detector/browser.rb +364 -0
  4. data/lib/device_detector/client.rb +8 -0
  5. data/lib/device_detector/device.rb +1124 -4
  6. data/lib/device_detector/os.rb +36 -11
  7. data/lib/device_detector/version.rb +1 -1
  8. data/lib/device_detector/version_extractor.rb +9 -0
  9. data/lib/device_detector.rb +57 -13
  10. data/regexes/bots.yml +551 -58
  11. data/regexes/client/browser_engine.yml +7 -1
  12. data/regexes/client/browsers.yml +594 -71
  13. data/regexes/client/feed_readers.yml +4 -10
  14. data/regexes/client/libraries.yml +47 -2
  15. data/regexes/client/mediaplayers.yml +25 -1
  16. data/regexes/client/mobile_apps.yml +447 -77
  17. data/regexes/client/pim.yml +49 -1
  18. data/regexes/device/cameras.yml +5 -5
  19. data/regexes/device/car_browsers.yml +16 -0
  20. data/regexes/device/consoles.yml +6 -0
  21. data/regexes/device/mobiles.yml +12905 -4561
  22. data/regexes/device/portable_media_player.yml +20 -3
  23. data/regexes/device/shell_tv.yml +117 -0
  24. data/regexes/device/televisions.yml +426 -35
  25. data/regexes/oss.yml +567 -139
  26. data/spec/device_detector/concrete_user_agent_spec.rb +30 -42
  27. data/spec/device_detector/detector_fixtures_spec.rb +9 -5
  28. data/spec/device_detector/device_spec.rb +26 -10
  29. data/spec/fixtures/client/browser.yml +1463 -391
  30. data/spec/fixtures/client/feed_reader.yml +0 -12
  31. data/spec/fixtures/client/library.yml +91 -37
  32. data/spec/fixtures/client/mediaplayer.yml +30 -0
  33. data/spec/fixtures/client/mobile_app.yml +498 -45
  34. data/spec/fixtures/client/pim.yml +60 -0
  35. data/spec/fixtures/detector/bots.yml +1189 -568
  36. data/spec/fixtures/detector/camera.yml +12 -26
  37. data/spec/fixtures/detector/car_browser.yml +151 -15
  38. data/spec/fixtures/detector/console.yml +70 -48
  39. data/spec/fixtures/detector/desktop.yml +2041 -916
  40. data/spec/fixtures/detector/feature_phone.yml +895 -189
  41. data/spec/fixtures/detector/feed_reader.yml +50 -77
  42. data/spec/fixtures/detector/mediaplayer.yml +79 -26
  43. data/spec/fixtures/detector/mobile_apps.yml +726 -72
  44. data/spec/fixtures/detector/peripheral.yml +271 -0
  45. data/spec/fixtures/detector/phablet.yml +3635 -1596
  46. data/spec/fixtures/detector/portable_media_player.yml +355 -46
  47. data/spec/fixtures/detector/smart_display.yml +183 -9
  48. data/spec/fixtures/detector/smart_speaker.yml +13 -8
  49. data/spec/fixtures/detector/smartphone-1.yml +4002 -4286
  50. data/spec/fixtures/detector/smartphone-10.yml +3771 -4763
  51. data/spec/fixtures/detector/smartphone-11.yml +3615 -4692
  52. data/spec/fixtures/detector/smartphone-12.yml +3856 -4764
  53. data/spec/fixtures/detector/smartphone-13.yml +4213 -4713
  54. data/spec/fixtures/detector/smartphone-14.yml +4039 -4497
  55. data/spec/fixtures/detector/smartphone-15.yml +5642 -2956
  56. data/spec/fixtures/detector/smartphone-16.yml +4739 -5082
  57. data/spec/fixtures/detector/smartphone-17.yml +4832 -4275
  58. data/spec/fixtures/detector/smartphone-18.yml +9806 -0
  59. data/spec/fixtures/detector/smartphone-19.yml +9965 -0
  60. data/spec/fixtures/detector/smartphone-2.yml +4842 -2589
  61. data/spec/fixtures/detector/smartphone-20.yml +9710 -0
  62. data/spec/fixtures/detector/smartphone-21.yml +8693 -0
  63. data/spec/fixtures/detector/smartphone-22.yml +10178 -0
  64. data/spec/fixtures/detector/smartphone-23.yml +9453 -0
  65. data/spec/fixtures/detector/smartphone-24.yml +9843 -0
  66. data/spec/fixtures/detector/smartphone-25.yml +9703 -0
  67. data/spec/fixtures/detector/smartphone-26.yml +10007 -0
  68. data/spec/fixtures/detector/smartphone-27.yml +4927 -0
  69. data/spec/fixtures/detector/smartphone-3.yml +4387 -4427
  70. data/spec/fixtures/detector/smartphone-4.yml +3597 -4582
  71. data/spec/fixtures/detector/smartphone-5.yml +4066 -5022
  72. data/spec/fixtures/detector/smartphone-6.yml +3455 -4621
  73. data/spec/fixtures/detector/smartphone-7.yml +3574 -4574
  74. data/spec/fixtures/detector/smartphone-8.yml +4617 -4704
  75. data/spec/fixtures/detector/smartphone-9.yml +4080 -5035
  76. data/spec/fixtures/detector/smartphone.yml +3244 -4234
  77. data/spec/fixtures/detector/tablet-1.yml +4652 -4492
  78. data/spec/fixtures/detector/tablet-2.yml +3515 -4434
  79. data/spec/fixtures/detector/tablet-3.yml +3418 -4351
  80. data/spec/fixtures/detector/tablet-4.yml +5149 -3200
  81. data/spec/fixtures/detector/tablet-5.yml +9273 -0
  82. data/spec/fixtures/detector/tablet-6.yml +4588 -0
  83. data/spec/fixtures/detector/tablet.yml +1621 -2613
  84. data/spec/fixtures/detector/tv-1.yml +2501 -0
  85. data/spec/fixtures/detector/tv.yml +7826 -3114
  86. data/spec/fixtures/detector/unknown.yml +370 -531
  87. data/spec/fixtures/detector/wearable.yml +863 -9
  88. data/spec/fixtures/parser/oss.yml +1350 -21
  89. data/spec/fixtures/parser/vendorfragments.yml +53 -53
  90. metadata +35 -5
@@ -1,66 +1,57 @@
1
1
  require_relative '../spec_helper'
2
2
 
3
3
  describe DeviceDetector do
4
-
5
4
  subject { DeviceDetector.new(user_agent) }
6
5
 
7
- alias :client :subject
6
+ alias_method :client, :subject
8
7
 
9
8
  describe 'mobile iPhone 5S' do
10
-
11
- let(:user_agent) { 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B440 [FBDV/iPhone6,1]' }
9
+ let(:user_agent) do
10
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B440 [FBDV/iPhone6,1]'
11
+ end
12
12
 
13
13
  describe '#device_name' do
14
-
15
14
  it 'returns device name' do
16
15
  value(client.device_name).must_equal 'iPhone 5S'
17
16
  end
18
-
19
17
  end
20
18
 
21
19
  describe '#device_type' do
22
-
23
20
  it 'returns the device type' do
24
21
  value(client.device_type).must_equal 'smartphone'
25
22
  end
26
-
27
23
  end
28
-
29
24
  end
30
25
 
31
26
  describe 'Ubuntu 10' do
32
-
33
- let(:user_agent) { 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Ubuntu/10.10 Chromium/10.0.648.133 Chrome/10.0.648.133 Safari/534.16' }
27
+ let(:user_agent) do
28
+ 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Ubuntu/10.10 Chromium/10.0.648.133 Chrome/10.0.648.133 Safari/534.16'
29
+ end
34
30
 
35
31
  describe '#os_name' do
36
-
37
32
  it 'returns the OS name' do
38
33
  value(client.os_name).must_equal 'Ubuntu'
39
34
  end
40
-
41
35
  end
42
-
43
36
  end
44
37
 
45
38
  describe 'Mac OS X' do
46
-
47
- let(:user_agent) { 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36' }
39
+ let(:user_agent) do
40
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36'
41
+ end
48
42
 
49
43
  describe '#full_version' do
50
-
51
44
  it 'returns the correct OS version' do
52
45
  value(client.os_full_version).must_equal '10.10.1'
53
46
  end
54
-
55
47
  end
56
-
57
48
  end
58
49
 
59
50
  describe 'Chrome on Windows' do
60
-
61
51
  describe '32bit' do
62
-
63
- let(:user_agent) { 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.103 Safari/537.36' }
52
+ let(:user_agent) do
53
+ 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.103 Safari/537.36'
54
+ end
64
55
 
65
56
  it 'returns the correct client name' do
66
57
  value(client.name).must_equal 'Chrome'
@@ -71,14 +62,14 @@ describe DeviceDetector do
71
62
  end
72
63
 
73
64
  it 'recognizes the device type' do
74
- value(client.device_type).must_equal "desktop"
65
+ value(client.device_type).must_equal 'desktop'
75
66
  end
76
-
77
67
  end
78
68
 
79
69
  describe '64bit' do
80
-
81
- let(:user_agent) { 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36' }
70
+ let(:user_agent) do
71
+ 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'
72
+ end
82
73
 
83
74
  it 'returns the correct client name' do
84
75
  value(client.name).must_equal 'Chrome'
@@ -89,47 +80,44 @@ describe DeviceDetector do
89
80
  end
90
81
 
91
82
  it 'recognizes the device type' do
92
- value(client.device_type).must_equal "desktop"
83
+ value(client.device_type).must_equal 'desktop'
93
84
  end
94
-
95
85
  end
96
-
97
86
  end
98
87
 
99
88
  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' }
89
+ let(:user_agent) do
90
+ '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'
91
+ end
102
92
 
103
93
  it 'returns the correct client name' do
104
- value(client.name).must_equal "Android Browser"
94
+ value(client.name).must_equal 'Android Browser'
105
95
  end
106
96
 
107
97
  it 'recognizes the device name' do
108
- value(client.device_name).must_equal "GALAXY S5"
98
+ value(client.device_name).must_equal 'Galaxy S5'
109
99
  end
110
100
 
111
101
  it 'recognizes the device type' do
112
- value(client.device_type).must_equal "smartphone"
102
+ value(client.device_type).must_equal 'smartphone'
113
103
  end
114
-
115
104
  end
116
105
 
117
106
  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' }
107
+ let(:user_agent) do
108
+ 'Lenovo-A398t+_TD/S100 Linux/3.4.5 Android/4.1.2 Release/09.10.2013 Browser/AppleWebKit534.30 Mobile Safari/534.30'
109
+ end
120
110
 
121
111
  it 'returns the correct client name' do
122
- value(client.name).must_equal "Android Browser"
112
+ value(client.name).must_equal 'Android Browser'
123
113
  end
124
114
 
125
115
  it 'recognizes the device name' do
126
- value(client.device_name).must_equal "A398t+"
116
+ value(client.device_name).must_equal 'A398t+'
127
117
  end
128
118
 
129
119
  it 'recognizes the device type' do
130
- value(client.device_type).must_equal "smartphone"
120
+ value(client.device_type).must_equal 'smartphone'
131
121
  end
132
-
133
122
  end
134
-
135
123
  end
@@ -27,10 +27,12 @@ describe DeviceDetector do
27
27
  describe user_agent do
28
28
  it 'should be detected' do
29
29
  if detector.bot?
30
- assert_equal str_or_nil(f['bot']['name']), detector.bot_name, 'failed bot name detection'
30
+ assert_equal str_or_nil(f['bot']['name']), detector.bot_name,
31
+ 'failed bot name detection'
31
32
  else
32
33
  if f['client']
33
- assert_equal str_or_nil(f['client']['name']), detector.name, 'failed client name detection'
34
+ assert_equal str_or_nil(f['client']['name']), detector.name,
35
+ 'failed client name detection'
34
36
  end
35
37
 
36
38
  os_family = str_or_nil(f['os_family'])
@@ -49,9 +51,11 @@ describe DeviceDetector do
49
51
  end
50
52
 
51
53
  short_name = str_or_nil(f['os']['short_name'])
52
- if short_name.nil?
53
- assert_nil os.short_name, 'failed os short name detection'
54
- else
54
+ if short_name.nil? && f['os']['name']
55
+ short_name = DeviceDetector::OS::OPERATING_SYSTEMS[f['os']['name']]
56
+ end
57
+
58
+ unless short_name.nil?
55
59
  assert_equal short_name, os.short_name, 'failed os short name detection'
56
60
  end
57
61
 
@@ -9,7 +9,9 @@ describe DeviceDetector::Device do
9
9
 
10
10
  describe '#name' do
11
11
  describe 'when models are nested' do
12
- let(:user_agent) { 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B466 [FBDV/iPhone7,2]' }
12
+ let(:user_agent) do
13
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B466 [FBDV/iPhone7,2]'
14
+ end
13
15
 
14
16
  it 'finds an Apple iPhone 6' do
15
17
  value(device.name).must_equal 'iPhone 6'
@@ -35,7 +37,9 @@ describe DeviceDetector::Device do
35
37
 
36
38
  describe '#type' do
37
39
  describe 'when models are nested' do
38
- let(:user_agent) { 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B466 [FBDV/iPhone7,2]' }
40
+ let(:user_agent) do
41
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B466 [FBDV/iPhone7,2]'
42
+ end
39
43
 
40
44
  it 'finds device of Apple iPhone 6' do
41
45
  value(device.type).must_equal 'smartphone'
@@ -59,7 +63,9 @@ describe DeviceDetector::Device do
59
63
  end
60
64
 
61
65
  describe 'device not specified in nested block' do
62
- let(:user_agent) { 'Mozilla/5.0 (Linux; Android 4.4.2; es-us; SAMSUNG SM-G900F Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko)' }
66
+ let(:user_agent) do
67
+ 'Mozilla/5.0 (Linux; Android 4.4.2; es-us; SAMSUNG SM-G900F Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko)'
68
+ end
63
69
 
64
70
  it 'falls back to top-level device' do
65
71
  value(device.type).must_equal 'smartphone'
@@ -69,27 +75,33 @@ describe DeviceDetector::Device do
69
75
 
70
76
  describe 'concrete device types' do
71
77
  describe 'mobiles' do
72
- let(:user_agent) { 'Mozilla/5.0 (Linux; Android 4.4.2; es-us; SAMSUNG SM-G900F Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko)' }
78
+ let(:user_agent) do
79
+ 'Mozilla/5.0 (Linux; Android 4.4.2; es-us; SAMSUNG SM-G900F Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko)'
80
+ end
73
81
 
74
82
  it 'identifies the device' do
75
- value(device.name).must_equal 'GALAXY S5'
83
+ value(device.name).must_equal 'Galaxy S5'
76
84
  value(device.type).must_equal 'smartphone'
77
85
  value(device.brand).must_equal 'Samsung'
78
86
  end
79
87
  end
80
88
 
81
89
  describe 'cameras' do
82
- let(:user_agent) { 'Mozilla/5.0 (Linux; U; Android 4.0; xx-xx; EK-GC100 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' }
90
+ let(:user_agent) do
91
+ 'Mozilla/5.0 (Linux; U; Android 4.0; xx-xx; EK-GC100 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30'
92
+ end
83
93
 
84
94
  it 'identifies the device' do
85
- value(device.name).must_equal 'GALAXY Camera'
95
+ value(device.name).must_equal 'Galaxy Camera'
86
96
  value(device.type).must_equal 'camera'
87
97
  value(device.brand).must_equal 'Samsung'
88
98
  end
89
99
  end
90
100
 
91
101
  describe 'car browsers' do
92
- let(:user_agent) { 'Mozilla/5.0 (X11; Linux) AppleWebKit/534.34 (KHTML, like Gecko) QtCarBrowser Safari/534.34' }
102
+ let(:user_agent) do
103
+ 'Mozilla/5.0 (X11; Linux) AppleWebKit/534.34 (KHTML, like Gecko) QtCarBrowser Safari/534.34'
104
+ end
93
105
 
94
106
  it 'identifies the device' do
95
107
  value(device.name).must_equal 'Model S'
@@ -109,7 +121,9 @@ describe DeviceDetector::Device do
109
121
  end
110
122
 
111
123
  describe 'portable media players' do
112
- let(:user_agent) { 'Mozilla/5.0 (iPod touch; CPU iPhone OS 7_0_6 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B651 Safari/9537.53' }
124
+ let(:user_agent) do
125
+ 'Mozilla/5.0 (iPod touch; CPU iPhone OS 7_0_6 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B651 Safari/9537.53'
126
+ end
113
127
 
114
128
  it 'identifies the device' do
115
129
  value(device.name).must_equal 'iPod Touch'
@@ -119,7 +133,9 @@ describe DeviceDetector::Device do
119
133
  end
120
134
 
121
135
  describe 'televisions' do
122
- let(:user_agent) { 'Mozilla/5.0 (Unknown; Linux armv7l) AppleWebKit/537.1+ (KHTML, like Gecko) Safari/537.1+ HbbTV/1.1.1 ( ;LGE ;NetCast 4.0 ;03.10.81 ;1.0M ;)' }
136
+ let(:user_agent) do
137
+ 'Mozilla/5.0 (Unknown; Linux armv7l) AppleWebKit/537.1+ (KHTML, like Gecko) Safari/537.1+ HbbTV/1.1.1 ( ;LGE ;NetCast 4.0 ;03.10.81 ;1.0M ;)'
138
+ end
123
139
 
124
140
  it 'identifies the device' do
125
141
  value(device.name).must_equal 'NetCast 4.0'