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.
- checksums.yaml +4 -4
- data/README.md +7 -6
- data/lib/device_detector/browser.rb +364 -0
- data/lib/device_detector/client.rb +8 -0
- data/lib/device_detector/device.rb +1124 -4
- data/lib/device_detector/os.rb +36 -11
- data/lib/device_detector/version.rb +1 -1
- data/lib/device_detector/version_extractor.rb +9 -0
- data/lib/device_detector.rb +57 -13
- data/regexes/bots.yml +551 -58
- data/regexes/client/browser_engine.yml +7 -1
- data/regexes/client/browsers.yml +594 -71
- data/regexes/client/feed_readers.yml +4 -10
- data/regexes/client/libraries.yml +47 -2
- data/regexes/client/mediaplayers.yml +25 -1
- data/regexes/client/mobile_apps.yml +447 -77
- data/regexes/client/pim.yml +49 -1
- data/regexes/device/cameras.yml +5 -5
- data/regexes/device/car_browsers.yml +16 -0
- data/regexes/device/consoles.yml +6 -0
- data/regexes/device/mobiles.yml +12905 -4561
- data/regexes/device/portable_media_player.yml +20 -3
- data/regexes/device/shell_tv.yml +117 -0
- data/regexes/device/televisions.yml +426 -35
- data/regexes/oss.yml +567 -139
- data/spec/device_detector/concrete_user_agent_spec.rb +30 -42
- data/spec/device_detector/detector_fixtures_spec.rb +9 -5
- data/spec/device_detector/device_spec.rb +26 -10
- data/spec/fixtures/client/browser.yml +1463 -391
- data/spec/fixtures/client/feed_reader.yml +0 -12
- data/spec/fixtures/client/library.yml +91 -37
- data/spec/fixtures/client/mediaplayer.yml +30 -0
- data/spec/fixtures/client/mobile_app.yml +498 -45
- data/spec/fixtures/client/pim.yml +60 -0
- data/spec/fixtures/detector/bots.yml +1189 -568
- data/spec/fixtures/detector/camera.yml +12 -26
- data/spec/fixtures/detector/car_browser.yml +151 -15
- data/spec/fixtures/detector/console.yml +70 -48
- data/spec/fixtures/detector/desktop.yml +2041 -916
- data/spec/fixtures/detector/feature_phone.yml +895 -189
- data/spec/fixtures/detector/feed_reader.yml +50 -77
- data/spec/fixtures/detector/mediaplayer.yml +79 -26
- data/spec/fixtures/detector/mobile_apps.yml +726 -72
- data/spec/fixtures/detector/peripheral.yml +271 -0
- data/spec/fixtures/detector/phablet.yml +3635 -1596
- data/spec/fixtures/detector/portable_media_player.yml +355 -46
- data/spec/fixtures/detector/smart_display.yml +183 -9
- data/spec/fixtures/detector/smart_speaker.yml +13 -8
- data/spec/fixtures/detector/smartphone-1.yml +4002 -4286
- data/spec/fixtures/detector/smartphone-10.yml +3771 -4763
- data/spec/fixtures/detector/smartphone-11.yml +3615 -4692
- data/spec/fixtures/detector/smartphone-12.yml +3856 -4764
- data/spec/fixtures/detector/smartphone-13.yml +4213 -4713
- data/spec/fixtures/detector/smartphone-14.yml +4039 -4497
- data/spec/fixtures/detector/smartphone-15.yml +5642 -2956
- data/spec/fixtures/detector/smartphone-16.yml +4739 -5082
- data/spec/fixtures/detector/smartphone-17.yml +4832 -4275
- data/spec/fixtures/detector/smartphone-18.yml +9806 -0
- data/spec/fixtures/detector/smartphone-19.yml +9965 -0
- data/spec/fixtures/detector/smartphone-2.yml +4842 -2589
- data/spec/fixtures/detector/smartphone-20.yml +9710 -0
- data/spec/fixtures/detector/smartphone-21.yml +8693 -0
- data/spec/fixtures/detector/smartphone-22.yml +10178 -0
- data/spec/fixtures/detector/smartphone-23.yml +9453 -0
- data/spec/fixtures/detector/smartphone-24.yml +9843 -0
- data/spec/fixtures/detector/smartphone-25.yml +9703 -0
- data/spec/fixtures/detector/smartphone-26.yml +10007 -0
- data/spec/fixtures/detector/smartphone-27.yml +4927 -0
- data/spec/fixtures/detector/smartphone-3.yml +4387 -4427
- data/spec/fixtures/detector/smartphone-4.yml +3597 -4582
- data/spec/fixtures/detector/smartphone-5.yml +4066 -5022
- data/spec/fixtures/detector/smartphone-6.yml +3455 -4621
- data/spec/fixtures/detector/smartphone-7.yml +3574 -4574
- data/spec/fixtures/detector/smartphone-8.yml +4617 -4704
- data/spec/fixtures/detector/smartphone-9.yml +4080 -5035
- data/spec/fixtures/detector/smartphone.yml +3244 -4234
- data/spec/fixtures/detector/tablet-1.yml +4652 -4492
- data/spec/fixtures/detector/tablet-2.yml +3515 -4434
- data/spec/fixtures/detector/tablet-3.yml +3418 -4351
- data/spec/fixtures/detector/tablet-4.yml +5149 -3200
- data/spec/fixtures/detector/tablet-5.yml +9273 -0
- data/spec/fixtures/detector/tablet-6.yml +4588 -0
- data/spec/fixtures/detector/tablet.yml +1621 -2613
- data/spec/fixtures/detector/tv-1.yml +2501 -0
- data/spec/fixtures/detector/tv.yml +7826 -3114
- data/spec/fixtures/detector/unknown.yml +370 -531
- data/spec/fixtures/detector/wearable.yml +863 -9
- data/spec/fixtures/parser/oss.yml +1350 -21
- data/spec/fixtures/parser/vendorfragments.yml +53 -53
- 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
|
-
|
|
6
|
+
alias_method :client, :subject
|
|
8
7
|
|
|
9
8
|
describe 'mobile iPhone 5S' do
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
65
|
+
value(client.device_type).must_equal 'desktop'
|
|
75
66
|
end
|
|
76
|
-
|
|
77
67
|
end
|
|
78
68
|
|
|
79
69
|
describe '64bit' do
|
|
80
|
-
|
|
81
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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,
|
|
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
|
-
|
|
54
|
-
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
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 '
|
|
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)
|
|
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 '
|
|
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)
|
|
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)
|
|
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)
|
|
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'
|