device_detector 1.0.5 → 1.0.6
Sign up to get free protection for your applications and to get access to all the features.
- 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'
|