browser 2.1.0 → 2.2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +6 -0
- data/lib/browser.rb +4 -47
- data/lib/browser/device.rb +19 -0
- data/lib/browser/meta.rb +14 -0
- data/lib/browser/middleware.rb +1 -0
- data/lib/browser/platform.rb +18 -4
- data/lib/browser/platform/mac.rb +1 -1
- data/lib/browser/qq.rb +22 -0
- data/lib/browser/version.rb +1 -1
- data/test/ua.yml +2 -0
- data/test/unit/platform_test.rb +19 -0
- data/test/unit/qq_test.rb +20 -0
- data/test/unit/weibo_test.rb +4 -0
- data/test/unit/windows_test.rb +9 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc44c2633f9e5ef71751d4dcc64143b13b69e21a
|
4
|
+
data.tar.gz: 825edef676789f295746227c52962c6af234295c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5086cdd5c553f0daaa49eb8e7aa70050fcb57dc7ed27406658278bf7b845658495c7ebe685e155ea15e1a1aa9baf9edb430a404d6c6119e395521c56d5aef7a2
|
7
|
+
data.tar.gz: 98a3c39a62ad4b09630944d0927fec468478361516187fbb8cd1f75d377f62bf65313de5f8679e5f2f1d7bd8ed0a2ae672778f17ec49b21a2c1f1f23e0fb28af
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## v2.2.0
|
4
|
+
|
5
|
+
- `Browser::Platform#windows?` can now compare versions.
|
6
|
+
- `Browser::Platform#mac?` can now compare versions.
|
7
|
+
- Detect QQ Browser.
|
8
|
+
- Fix issue with Mac user agents that didn't include the version.
|
9
|
+
|
3
10
|
## v2.1.0
|
4
11
|
|
5
12
|
- Add PrivacyAwareBot, ltx71, Squider and Traackr to bots.
|
data/README.md
CHANGED
@@ -121,6 +121,12 @@ browser.platform.windows_x64_inclusive?
|
|
121
121
|
browser.platform.windows_xp?
|
122
122
|
```
|
123
123
|
|
124
|
+
### What's being detected?
|
125
|
+
|
126
|
+
- For a list of platform detections, check [lib/browser/platform.rb](https://github.com/fnando/browser/blob/master/lib/browser/platform.rb)
|
127
|
+
- For a list of device detections, check [lib/browser/device.rb](https://github.com/fnando/browser/blob/master/lib/browser/device.rb)
|
128
|
+
- For a list of bot detections, check [bots.yml](https://github.com/fnando/browser/blob/master/bots.yml)
|
129
|
+
|
124
130
|
### What defines a modern browser?
|
125
131
|
|
126
132
|
The current rules that define a modern browser are pretty loose:
|
data/lib/browser.rb
CHANGED
@@ -3,6 +3,7 @@ require "set"
|
|
3
3
|
require "yaml"
|
4
4
|
require "pathname"
|
5
5
|
|
6
|
+
require "browser/version"
|
6
7
|
require "browser/detect_version"
|
7
8
|
require "browser/accept_language"
|
8
9
|
require "browser/base"
|
@@ -19,60 +20,15 @@ require "browser/uc_browser"
|
|
19
20
|
require "browser/nokia"
|
20
21
|
require "browser/micro_messenger"
|
21
22
|
require "browser/weibo"
|
23
|
+
require "browser/qq"
|
22
24
|
|
23
25
|
require "browser/bot"
|
24
26
|
require "browser/middleware"
|
25
|
-
require "browser/middleware/context"
|
26
27
|
require "browser/rails" if defined?(::Rails)
|
27
28
|
|
28
29
|
require "browser/platform"
|
29
|
-
require "browser/platform/base"
|
30
|
-
require "browser/platform/ios"
|
31
|
-
require "browser/platform/linux"
|
32
|
-
require "browser/platform/windows"
|
33
|
-
require "browser/platform/mac"
|
34
|
-
require "browser/platform/windows_phone"
|
35
|
-
require "browser/platform/windows_mobile"
|
36
|
-
require "browser/platform/firefox_os"
|
37
|
-
require "browser/platform/blackberry"
|
38
|
-
require "browser/platform/android"
|
39
|
-
require "browser/platform/other"
|
40
|
-
require "browser/platform/chrome_os"
|
41
|
-
require "browser/platform/adobe_air"
|
42
|
-
|
43
30
|
require "browser/device"
|
44
|
-
require "browser/
|
45
|
-
require "browser/device/unknown"
|
46
|
-
require "browser/device/ipad"
|
47
|
-
require "browser/device/ipod_touch"
|
48
|
-
require "browser/device/iphone"
|
49
|
-
require "browser/device/playstation3"
|
50
|
-
require "browser/device/playstation4"
|
51
|
-
require "browser/device/psp"
|
52
|
-
require "browser/device/psvita"
|
53
|
-
require "browser/device/kindle"
|
54
|
-
require "browser/device/kindle_fire"
|
55
|
-
require "browser/device/wii"
|
56
|
-
require "browser/device/wiiu"
|
57
|
-
require "browser/device/blackberry_playbook"
|
58
|
-
require "browser/device/surface"
|
59
|
-
require "browser/device/tv"
|
60
|
-
require "browser/device/xbox_one"
|
61
|
-
require "browser/device/xbox_360"
|
62
|
-
|
63
|
-
require "browser/meta/base"
|
64
|
-
require "browser/meta/generic_browser"
|
65
|
-
require "browser/meta/id"
|
66
|
-
require "browser/meta/ie"
|
67
|
-
require "browser/meta/ios"
|
68
|
-
require "browser/meta/mobile"
|
69
|
-
require "browser/meta/modern"
|
70
|
-
require "browser/meta/platform"
|
71
|
-
require "browser/meta/proxy"
|
72
|
-
require "browser/meta/safari"
|
73
|
-
require "browser/meta/webkit"
|
74
|
-
require "browser/meta/tablet"
|
75
|
-
require "browser/meta/device"
|
31
|
+
require "browser/meta"
|
76
32
|
|
77
33
|
module Browser
|
78
34
|
EMPTY_STRING = "".freeze
|
@@ -94,6 +50,7 @@ module Browser
|
|
94
50
|
InternetExplorer,
|
95
51
|
Firefox,
|
96
52
|
Weibo, # must be placed before Chrome and Safari
|
53
|
+
QQ, # must be placed before Chrome and Safari
|
97
54
|
Chrome,
|
98
55
|
Safari,
|
99
56
|
MicroMessenger,
|
data/lib/browser/device.rb
CHANGED
@@ -1,4 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
require "browser/device/base"
|
3
|
+
require "browser/device/unknown"
|
4
|
+
require "browser/device/ipad"
|
5
|
+
require "browser/device/ipod_touch"
|
6
|
+
require "browser/device/iphone"
|
7
|
+
require "browser/device/playstation3"
|
8
|
+
require "browser/device/playstation4"
|
9
|
+
require "browser/device/psp"
|
10
|
+
require "browser/device/psvita"
|
11
|
+
require "browser/device/kindle"
|
12
|
+
require "browser/device/kindle_fire"
|
13
|
+
require "browser/device/wii"
|
14
|
+
require "browser/device/wiiu"
|
15
|
+
require "browser/device/blackberry_playbook"
|
16
|
+
require "browser/device/surface"
|
17
|
+
require "browser/device/tv"
|
18
|
+
require "browser/device/xbox_one"
|
19
|
+
require "browser/device/xbox_360"
|
20
|
+
|
2
21
|
module Browser
|
3
22
|
class Device
|
4
23
|
attr_reader :ua
|
data/lib/browser/meta.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "browser/meta/base"
|
3
|
+
require "browser/meta/generic_browser"
|
4
|
+
require "browser/meta/id"
|
5
|
+
require "browser/meta/ie"
|
6
|
+
require "browser/meta/ios"
|
7
|
+
require "browser/meta/mobile"
|
8
|
+
require "browser/meta/modern"
|
9
|
+
require "browser/meta/platform"
|
10
|
+
require "browser/meta/proxy"
|
11
|
+
require "browser/meta/safari"
|
12
|
+
require "browser/meta/webkit"
|
13
|
+
require "browser/meta/tablet"
|
14
|
+
require "browser/meta/device"
|
data/lib/browser/middleware.rb
CHANGED
data/lib/browser/platform.rb
CHANGED
@@ -1,4 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
require "browser/platform/base"
|
3
|
+
require "browser/platform/ios"
|
4
|
+
require "browser/platform/linux"
|
5
|
+
require "browser/platform/windows"
|
6
|
+
require "browser/platform/mac"
|
7
|
+
require "browser/platform/windows_phone"
|
8
|
+
require "browser/platform/windows_mobile"
|
9
|
+
require "browser/platform/firefox_os"
|
10
|
+
require "browser/platform/blackberry"
|
11
|
+
require "browser/platform/android"
|
12
|
+
require "browser/platform/other"
|
13
|
+
require "browser/platform/chrome_os"
|
14
|
+
require "browser/platform/adobe_air"
|
15
|
+
|
2
16
|
module Browser
|
3
17
|
class Platform
|
4
18
|
include DetectVersion
|
@@ -54,12 +68,12 @@ module Browser
|
|
54
68
|
id == :linux
|
55
69
|
end
|
56
70
|
|
57
|
-
def mac?
|
58
|
-
id == :mac
|
71
|
+
def mac?(expected_version = nil)
|
72
|
+
id == :mac && detect_version?(version, expected_version)
|
59
73
|
end
|
60
74
|
|
61
|
-
def windows?
|
62
|
-
id == :windows
|
75
|
+
def windows?(expected_version = nil)
|
76
|
+
id == :windows && detect_version?(version, expected_version)
|
63
77
|
end
|
64
78
|
|
65
79
|
def firefox_os?
|
data/lib/browser/platform/mac.rb
CHANGED
data/lib/browser/qq.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Browser
|
3
|
+
class QQ < Base
|
4
|
+
def id
|
5
|
+
:qq
|
6
|
+
end
|
7
|
+
|
8
|
+
def name
|
9
|
+
"QQ Browser"
|
10
|
+
end
|
11
|
+
|
12
|
+
def full_version
|
13
|
+
ua[%r[(?:Mobile MQQBrowser)/([\d.]+)]i, 1] ||
|
14
|
+
ua[%r[(?:QQ)/([\d.]+)]i, 1] ||
|
15
|
+
"0.0"
|
16
|
+
end
|
17
|
+
|
18
|
+
def match?
|
19
|
+
ua =~ /QQ/i
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/browser/version.rb
CHANGED
data/test/ua.yml
CHANGED
@@ -122,3 +122,5 @@ YANDEX_BROWSER: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537
|
|
122
122
|
MICRO_MESSENGER: 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13E238 MicroMessenger/6.3.15 NetType/3G+ Language/zh_CN'
|
123
123
|
WEIBO_IOS: 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12H143 Weibo (iPhone7,2__weibo__5.7.1__iphone__os8.4)'
|
124
124
|
WEIBO_ANDROID: 'Mozilla/5.0 (Linux; Android 5.0.2; vivo X5M Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36 Weibo (vivo-vivo X5M__weibo__5.7.1__android__android5.0.2)'
|
125
|
+
QQ_BROWSER_IOS: 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13E238 QQ/6.3.3.432 V1_IPH_SQ_6.3.3_1_APP_A Pixel/640 Core/UIWebView NetType/WIFI Mem/47'
|
126
|
+
QQ_BROWSER_ANDROID: 'Mozilla/5.0 (Linux; Android 5.1.1; SM-N9108V Build/LMY47X) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile MQQBrowser/6.2 TBS/036222 Safari/537.36 V1_AND_SQ_6.2.0_320_YYB_D QQ/6.2.0.2655 NetType/WIFI WebP/0.3.0 Pixel/1440'
|
data/test/unit/platform_test.rb
CHANGED
@@ -22,12 +22,25 @@ class PlatformTest < Minitest::Test
|
|
22
22
|
assert_equal :other, platform.id
|
23
23
|
end
|
24
24
|
|
25
|
+
test "implements to_s" do
|
26
|
+
platform = Browser::Platform.new(Browser["IOS9"])
|
27
|
+
assert_equal "ios", platform.to_s
|
28
|
+
end
|
29
|
+
|
30
|
+
test "implements ==" do
|
31
|
+
platform = Browser::Platform.new(Browser["IOS9"])
|
32
|
+
|
33
|
+
assert platform == :ios
|
34
|
+
refute platform == :android
|
35
|
+
end
|
36
|
+
|
25
37
|
test "detect other" do
|
26
38
|
platform = Browser::Platform.new("Other")
|
27
39
|
|
28
40
|
assert_equal "Other", platform.name
|
29
41
|
assert_equal :other, platform.id
|
30
42
|
assert_equal "0", platform.version
|
43
|
+
assert platform.other?
|
31
44
|
end
|
32
45
|
|
33
46
|
test "detect ios (iPhone)" do
|
@@ -73,6 +86,12 @@ class PlatformTest < Minitest::Test
|
|
73
86
|
assert_equal :mac, platform.id
|
74
87
|
assert platform.mac?
|
75
88
|
assert_equal "10.6.4", platform.version
|
89
|
+
assert platform.mac?(["=10.6.4"])
|
90
|
+
end
|
91
|
+
|
92
|
+
test "return stub version for Mac user agent without version" do
|
93
|
+
platform = Browser::Platform.new("Macintosh")
|
94
|
+
assert_equal "0", platform.version
|
76
95
|
end
|
77
96
|
|
78
97
|
test "detect firefox os" do
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "test_helper"
|
3
|
+
|
4
|
+
class QQTest < Minitest::Test
|
5
|
+
test "detects QQ browser for iOS" do
|
6
|
+
browser = Browser.new(Browser["QQ_BROWSER_IOS"])
|
7
|
+
|
8
|
+
assert_equal "6.3.3.432", browser.full_version
|
9
|
+
assert_equal "QQ Browser", browser.name
|
10
|
+
assert_equal :qq, browser.id
|
11
|
+
end
|
12
|
+
|
13
|
+
test "detects QQ browser for Android" do
|
14
|
+
browser = Browser.new(Browser["QQ_BROWSER_ANDROID"])
|
15
|
+
|
16
|
+
assert_equal "6.2", browser.full_version
|
17
|
+
assert_equal "QQ Browser", browser.name
|
18
|
+
assert_equal :qq, browser.id
|
19
|
+
end
|
20
|
+
end
|
data/test/unit/weibo_test.rb
CHANGED
@@ -4,6 +4,8 @@ require "test_helper"
|
|
4
4
|
class MicroMessengerTest < Minitest::Test
|
5
5
|
test "detects weibo iOS" do
|
6
6
|
browser = Browser.new(Browser["WEIBO_IOS"])
|
7
|
+
|
8
|
+
assert_equal :weibo, browser.id
|
7
9
|
assert browser.weibo?
|
8
10
|
assert_equal "Weibo", browser.name
|
9
11
|
assert_equal "5.7.1", browser.full_version
|
@@ -11,6 +13,8 @@ class MicroMessengerTest < Minitest::Test
|
|
11
13
|
|
12
14
|
test "detects weibo Android" do
|
13
15
|
browser = Browser.new(Browser["WEIBO_ANDROID"])
|
16
|
+
|
17
|
+
assert_equal :weibo, browser.id
|
14
18
|
assert browser.weibo?
|
15
19
|
assert_equal "Weibo", browser.name
|
16
20
|
assert_equal "5.7.1", browser.full_version
|
data/test/unit/windows_test.rb
CHANGED
@@ -23,6 +23,7 @@ class WindowsTest < Minitest::Test
|
|
23
23
|
|
24
24
|
assert browser.platform.windows?
|
25
25
|
assert_equal browser.platform.version, "5.0"
|
26
|
+
assert browser.platform.windows?(["=5.0"])
|
26
27
|
end
|
27
28
|
|
28
29
|
test "detects windows_2000_sp1" do
|
@@ -30,6 +31,7 @@ class WindowsTest < Minitest::Test
|
|
30
31
|
|
31
32
|
assert browser.platform.windows?
|
32
33
|
assert_equal browser.platform.version, "5.01"
|
34
|
+
assert browser.platform.windows?(["=5.01"])
|
33
35
|
end
|
34
36
|
|
35
37
|
test "detects windows_xp" do
|
@@ -38,6 +40,7 @@ class WindowsTest < Minitest::Test
|
|
38
40
|
assert browser.platform.windows?
|
39
41
|
assert browser.platform.windows_xp?
|
40
42
|
assert_equal browser.platform.version, "5.1"
|
43
|
+
assert browser.platform.windows?(["=5.1"])
|
41
44
|
end
|
42
45
|
|
43
46
|
test "detects windows_xp (64-bit)" do
|
@@ -47,6 +50,7 @@ class WindowsTest < Minitest::Test
|
|
47
50
|
assert browser.platform.windows_xp?
|
48
51
|
assert browser.platform.windows_x64?
|
49
52
|
assert_equal browser.platform.version, "5.2"
|
53
|
+
assert browser.platform.windows?(["=5.2"])
|
50
54
|
end
|
51
55
|
|
52
56
|
test "detects windows_vista" do
|
@@ -55,6 +59,7 @@ class WindowsTest < Minitest::Test
|
|
55
59
|
assert browser.platform.windows?
|
56
60
|
assert browser.platform.windows_vista?
|
57
61
|
assert_equal browser.platform.version, "6.0"
|
62
|
+
assert browser.platform.windows?(["=6.0"])
|
58
63
|
end
|
59
64
|
|
60
65
|
test "detects windows7" do
|
@@ -63,6 +68,7 @@ class WindowsTest < Minitest::Test
|
|
63
68
|
assert browser.platform.windows?
|
64
69
|
assert browser.platform.windows7?
|
65
70
|
assert_equal browser.platform.version, "6.1"
|
71
|
+
assert browser.platform.windows?(["=6.1"])
|
66
72
|
end
|
67
73
|
|
68
74
|
test "detects windows8" do
|
@@ -72,6 +78,7 @@ class WindowsTest < Minitest::Test
|
|
72
78
|
assert browser.platform.windows8?
|
73
79
|
refute browser.platform.windows8_1?
|
74
80
|
assert_equal browser.platform.version, "6.2"
|
81
|
+
assert browser.platform.windows?(["=6.2"])
|
75
82
|
end
|
76
83
|
|
77
84
|
test "detects windows8.1" do
|
@@ -81,6 +88,7 @@ class WindowsTest < Minitest::Test
|
|
81
88
|
assert browser.platform.windows8?
|
82
89
|
assert browser.platform.windows8_1?
|
83
90
|
assert_equal browser.platform.version, "6.3"
|
91
|
+
assert browser.platform.windows?(["=6.3"])
|
84
92
|
end
|
85
93
|
|
86
94
|
test "detects windows10" do
|
@@ -89,6 +97,7 @@ class WindowsTest < Minitest::Test
|
|
89
97
|
assert browser.platform.windows?
|
90
98
|
assert browser.platform.windows10?
|
91
99
|
assert_equal browser.platform.version, "10.0"
|
100
|
+
assert browser.platform.windows?(["=10.0"])
|
92
101
|
end
|
93
102
|
|
94
103
|
test "returns name" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: browser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nando Vieira
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -191,6 +191,7 @@ files:
|
|
191
191
|
- lib/browser/firefox.rb
|
192
192
|
- lib/browser/generic.rb
|
193
193
|
- lib/browser/internet_explorer.rb
|
194
|
+
- lib/browser/meta.rb
|
194
195
|
- lib/browser/meta/base.rb
|
195
196
|
- lib/browser/meta/device.rb
|
196
197
|
- lib/browser/meta/generic_browser.rb
|
@@ -226,6 +227,7 @@ files:
|
|
226
227
|
- lib/browser/platform/windows.rb
|
227
228
|
- lib/browser/platform/windows_mobile.rb
|
228
229
|
- lib/browser/platform/windows_phone.rb
|
230
|
+
- lib/browser/qq.rb
|
229
231
|
- lib/browser/rails.rb
|
230
232
|
- lib/browser/safari.rb
|
231
233
|
- lib/browser/testing.rb
|
@@ -261,6 +263,7 @@ files:
|
|
261
263
|
- test/unit/opera_test.rb
|
262
264
|
- test/unit/platform_test.rb
|
263
265
|
- test/unit/proxy_test.rb
|
266
|
+
- test/unit/qq_test.rb
|
264
267
|
- test/unit/safari_test.rb
|
265
268
|
- test/unit/uc_browser_test.rb
|
266
269
|
- test/unit/weibo_test.rb
|
@@ -319,6 +322,7 @@ test_files:
|
|
319
322
|
- test/unit/opera_test.rb
|
320
323
|
- test/unit/platform_test.rb
|
321
324
|
- test/unit/proxy_test.rb
|
325
|
+
- test/unit/qq_test.rb
|
322
326
|
- test/unit/safari_test.rb
|
323
327
|
- test/unit/uc_browser_test.rb
|
324
328
|
- test/unit/weibo_test.rb
|