browser 2.7.1 → 3.0.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/.rubocop.yml +1 -1
- data/CHANGELOG.md +11 -0
- data/README.md +33 -13
- data/Rakefile +8 -1
- data/bot_exceptions.yml +1 -0
- data/bots.yml +3 -1
- data/browser.gemspec +1 -1
- data/lib/browser.rb +2 -2
- data/lib/browser/aliases.rb +1 -1
- data/lib/browser/base.rb +2 -2
- data/lib/browser/bot.rb +34 -26
- data/lib/browser/bot/empty_user_agent_matcher.rb +11 -0
- data/lib/browser/bot/keyword_matcher.rb +11 -0
- data/lib/browser/bot/known_bots_matcher.rb +11 -0
- data/lib/browser/browser.rb +40 -37
- data/lib/browser/chrome.rb +1 -1
- data/lib/browser/device.rb +25 -22
- data/lib/browser/meta.rb +13 -13
- data/lib/browser/middleware.rb +1 -1
- data/lib/browser/middleware/context/additions.rb +1 -1
- data/lib/browser/platform.rb +16 -13
- data/lib/browser/qq.rb +1 -1
- data/lib/browser/rails.rb +3 -3
- data/lib/browser/sputnik.rb +1 -4
- data/lib/browser/version.rb +1 -1
- data/test/browser_test.rb +0 -4
- data/test/ua.yml +3 -2
- data/test/ua_bots.yml +2 -0
- data/test/ua_search_engines.yml +1 -0
- data/test/unit/accept_language_test.rb +6 -0
- data/test/unit/blackberry_test.rb +0 -6
- data/test/unit/bots_test.rb +26 -39
- data/test/unit/chrome_test.rb +8 -3
- data/test/unit/edge_test.rb +0 -4
- data/test/unit/firefox_test.rb +0 -3
- data/test/unit/internet_explorer_test.rb +0 -12
- data/test/unit/ios_test.rb +0 -5
- data/test/unit/kindle_test.rb +0 -2
- data/test/unit/meta_test.rb +0 -1
- data/test/unit/opera_test.rb +0 -2
- data/test/unit/sputnik_test.rb +1 -0
- metadata +9 -6
data/lib/browser/chrome.rb
CHANGED
data/lib/browser/device.rb
CHANGED
@@ -1,25 +1,25 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
3
|
+
require_relative "device/base"
|
4
|
+
require_relative "device/android"
|
5
|
+
require_relative "device/unknown"
|
6
|
+
require_relative "device/ipad"
|
7
|
+
require_relative "device/ipod_touch"
|
8
|
+
require_relative "device/iphone"
|
9
|
+
require_relative "device/playstation3"
|
10
|
+
require_relative "device/playstation4"
|
11
|
+
require_relative "device/psp"
|
12
|
+
require_relative "device/psvita"
|
13
|
+
require_relative "device/kindle"
|
14
|
+
require_relative "device/kindle_fire"
|
15
|
+
require_relative "device/wii"
|
16
|
+
require_relative "device/wiiu"
|
17
|
+
require_relative "device/blackberry_playbook"
|
18
|
+
require_relative "device/surface"
|
19
|
+
require_relative "device/switch"
|
20
|
+
require_relative "device/tv"
|
21
|
+
require_relative "device/xbox_one"
|
22
|
+
require_relative "device/xbox_360"
|
23
23
|
|
24
24
|
module Browser
|
25
25
|
class Device
|
@@ -192,17 +192,20 @@ module Browser
|
|
192
192
|
end
|
193
193
|
|
194
194
|
# Regex taken from http://detectmobilebrowsers.com
|
195
|
-
# rubocop:disable
|
195
|
+
# rubocop:disable Layout/LineLength
|
196
196
|
private def detect_mobile?
|
197
197
|
psp? ||
|
198
198
|
/zunewp7/i.match(ua) ||
|
199
199
|
%r{(android|bb\d+|meego).+mobile|avantgo|bada/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino}i.match(ua) ||
|
200
200
|
%r{1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-}i.match(ua[0..3])
|
201
201
|
end
|
202
|
-
# rubocop:enable
|
202
|
+
# rubocop:enable Layout/LineLength
|
203
203
|
|
204
204
|
private def platform
|
205
205
|
@platform ||= Platform.new(ua)
|
206
206
|
end
|
207
|
+
|
208
|
+
private :subject
|
209
|
+
private :ua
|
207
210
|
end
|
208
211
|
end
|
data/lib/browser/meta.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
3
|
+
require_relative "meta/base"
|
4
|
+
require_relative "meta/generic_browser"
|
5
|
+
require_relative "meta/id"
|
6
|
+
require_relative "meta/ie"
|
7
|
+
require_relative "meta/ios"
|
8
|
+
require_relative "meta/mobile"
|
9
|
+
require_relative "meta/modern"
|
10
|
+
require_relative "meta/platform"
|
11
|
+
require_relative "meta/proxy"
|
12
|
+
require_relative "meta/safari"
|
13
|
+
require_relative "meta/webkit"
|
14
|
+
require_relative "meta/tablet"
|
15
|
+
require_relative "meta/device"
|
data/lib/browser/middleware.rb
CHANGED
data/lib/browser/platform.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
3
|
+
require_relative "platform/base"
|
4
|
+
require_relative "platform/ios"
|
5
|
+
require_relative "platform/linux"
|
6
|
+
require_relative "platform/windows"
|
7
|
+
require_relative "platform/mac"
|
8
|
+
require_relative "platform/windows_phone"
|
9
|
+
require_relative "platform/windows_mobile"
|
10
|
+
require_relative "platform/firefox_os"
|
11
|
+
require_relative "platform/blackberry"
|
12
|
+
require_relative "platform/android"
|
13
|
+
require_relative "platform/other"
|
14
|
+
require_relative "platform/chrome_os"
|
15
|
+
require_relative "platform/adobe_air"
|
16
16
|
|
17
17
|
module Browser
|
18
18
|
class Platform
|
@@ -179,5 +179,8 @@ module Browser
|
|
179
179
|
def windows_touchscreen_desktop?
|
180
180
|
windows? && ua =~ /Touch/
|
181
181
|
end
|
182
|
+
|
183
|
+
private :subject
|
184
|
+
private :ua
|
182
185
|
end
|
183
186
|
end
|
data/lib/browser/qq.rb
CHANGED
data/lib/browser/rails.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "rails/railtie"
|
4
|
-
|
5
|
-
|
4
|
+
require_relative "action_controller"
|
5
|
+
require_relative "middleware/context/additions"
|
6
6
|
|
7
7
|
module Browser
|
8
8
|
class Railtie < Rails::Railtie
|
@@ -12,7 +12,7 @@ module Browser
|
|
12
12
|
ActiveSupport.on_load(:action_controller) do
|
13
13
|
::ActionController::Base.include(Browser::ActionController)
|
14
14
|
|
15
|
-
::ActionController::Metal.include(Browser::ActionController) if defined?(::ActionController::Metal) # rubocop:disable
|
15
|
+
::ActionController::Metal.include(Browser::ActionController) if defined?(::ActionController::Metal) # rubocop:disable Layout/LineLength
|
16
16
|
|
17
17
|
Browser::Middleware::Context.include(
|
18
18
|
Browser::Middleware::Context::Additions
|
data/lib/browser/sputnik.rb
CHANGED
@@ -11,10 +11,7 @@ module Browser
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def full_version
|
14
|
-
|
15
|
-
ua[%r{SputnikBrowser/([\d.]+)}, 1] ||
|
16
|
-
ua[%r{Chrome/([\d.]+)}, 1] ||
|
17
|
-
"0.0"
|
14
|
+
ua[%r{SputnikBrowser/([\d.]+)}, 1] || "0.0"
|
18
15
|
end
|
19
16
|
|
20
17
|
def match?
|
data/lib/browser/version.rb
CHANGED
data/test/browser_test.rb
CHANGED
@@ -39,7 +39,6 @@ class BrowserTest < Minitest::Test
|
|
39
39
|
assert browser.platform.android?
|
40
40
|
assert browser.safari?
|
41
41
|
assert browser.webkit?
|
42
|
-
assert browser.modern?
|
43
42
|
assert_equal "3.1.2", browser.full_version
|
44
43
|
assert_equal "3", browser.version
|
45
44
|
end
|
@@ -51,7 +50,6 @@ class BrowserTest < Minitest::Test
|
|
51
50
|
assert browser.platform.android?
|
52
51
|
assert browser.safari?
|
53
52
|
assert browser.webkit?
|
54
|
-
assert browser.modern?
|
55
53
|
assert_equal "4.0", browser.full_version
|
56
54
|
assert_equal "4", browser.version
|
57
55
|
end
|
@@ -62,7 +60,6 @@ class BrowserTest < Minitest::Test
|
|
62
60
|
assert_equal "Internet Explorer", browser.name
|
63
61
|
assert browser.device.surface?
|
64
62
|
assert browser.ie?
|
65
|
-
assert browser.modern?
|
66
63
|
assert_equal "10.0", browser.full_version
|
67
64
|
assert_equal "10", browser.version
|
68
65
|
end
|
@@ -93,7 +90,6 @@ class BrowserTest < Minitest::Test
|
|
93
90
|
assert_equal "PhantomJS", browser.name
|
94
91
|
assert_equal :phantom_js, browser.id
|
95
92
|
assert browser.phantom_js?
|
96
|
-
assert browser.modern?
|
97
93
|
assert_equal "1.9.0", browser.full_version
|
98
94
|
assert_equal "1", browser.version
|
99
95
|
assert browser.phantom_js?(%w[>=1 <2])
|
data/test/ua.yml
CHANGED
@@ -18,6 +18,7 @@ ANDROID_LOLLIPOP_50: Mozilla/5.0 (Linux; Android 5.0; Nexus 5 Build/LPX13D) Appl
|
|
18
18
|
ANDROID_LOLLIPOP_51: Mozilla/5.0 (Linux; Android 5.1; Nexus 5 Build/LMY47I) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.0.0 Mobile Safari/537.36; DailymotionEmbedSDK 1.0
|
19
19
|
ANDROID_NEXUS_PLAYER: Mozilla/5.0 (Linux; Android 5.0; Nexus Player Build/LRX21V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.0
|
20
20
|
ANDROID_OREO: Mozilla/5.0 (Linux; Android 8.0.0; Pixel Build/OPR6.170623.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.03112.107 Mobile Safari/537.36
|
21
|
+
ANDROID_Q: Mozilla/5.0 (Linux; Android 10; Pixel 2 Build/QQ1A.191205.008; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Mobile Safari/537.36
|
21
22
|
ANDROID_TV: Mozilla/5.0 (Linux; Android 5.0; ADT-1 Build/LRW87K) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36
|
22
23
|
ANDROID_WEBVIEW: Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.65 Mobile Safari/537.36
|
23
24
|
ANDROID_WITH_SAFARI: "Mozilla/5.0 (Linux; U; Android 4.3; en-us; SCH-I535 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30"
|
@@ -57,6 +58,7 @@ IE9_COMPAT: "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)"
|
|
57
58
|
IE_WITHOUT_TRIDENT: Mozilla/4.0 (compatible; MSIE8.0; Windows NT 6.0) .NET CLR 2.0.50727)
|
58
59
|
INSTAGRAM: "Mozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E216 Instagram 41.0.0.14.90 (iPhone9,3; iOS 11_3; pl_PL; pl-PL; scale=2.00; gamut=wide; 750x1334)"
|
59
60
|
INSTAGRAM_OTHER: "Instagram/182257141 CFNetwork/1107.1 Darwin/19.0.0"
|
61
|
+
IOS12: "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1"
|
60
62
|
IOS3: "Mozilla/5.0 (iPad; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10"
|
61
63
|
IOS4: "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7"
|
62
64
|
IOS5: "Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3"
|
@@ -66,7 +68,6 @@ IOS8: "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.4
|
|
66
68
|
IOS8_1_2: 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B440 Safari/600.1.4'
|
67
69
|
IOS8_3: 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4'
|
68
70
|
IOS9: "Mozilla/5.0 (iPad; CPU OS 9_0 like Mac OS X) AppleWebKit/601.1.17 (KHTML, like Gecko) Version/8.0 Mobile/13A175 Safari/600.1.4"
|
69
|
-
IOS12: "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1"
|
70
71
|
IOS_WEBVIEW: Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12H141
|
71
72
|
IPAD: "Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10"
|
72
73
|
IPHONE: "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/1A542a Safari/419.3"
|
@@ -121,8 +122,8 @@ SAMSUNG: "Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I497 Build/IM
|
|
121
122
|
SAMSUNG_CHROME: "Mozilla/5.0 (Linux; Android 4.4.2; en-gb; SAMSUNG GT-I9195/I9195XXUCNEA Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36"
|
122
123
|
SMART_TV: "Mozilla/5.0 (SmartHub; SMART-TV; U; Linux/SmartTV) AppleWebKit/531.2+ (KHTML, like Gecko) WebBrowser/1.0 SmartTV Safari/531.2+"
|
123
124
|
SNAPCHAT: Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Snapchat/10.69.5.72 (iPhone10,3; iOS 13.2.2; gzip)
|
124
|
-
SNAPCHAT_SPACE_VERSION: "Mozilla/5.0 (Linux; Android 9; SM-N960U Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.96 Mobile Safari/537.36Snapchat 10.70.0.0 (SM-N960U; Android 9#N960USQS3CSJ2#28; gzip)"
|
125
125
|
SNAPCHAT_EMPTY_STRING_VERSION: "Mozilla/5.0 (Linux; Android 9; SM-N960U Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.96 Mobile Safari/537.36Snapchat10.70.0.0 (SM-N960U; Android 9#N960USQS3CSJ2#28; gzip)"
|
126
|
+
SNAPCHAT_SPACE_VERSION: "Mozilla/5.0 (Linux; Android 9; SM-N960U Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.96 Mobile Safari/537.36Snapchat 10.70.0.0 (SM-N960U; Android 9#N960USQS3CSJ2#28; gzip)"
|
126
127
|
SPUTNIK: "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 SputnikBrowser/4.1.2801.0 Safari/537.36"
|
127
128
|
SURFACE: "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch)"
|
128
129
|
SYMBIAN: "Nokia5250/10.0.011 (SymbianOS/9.4; U; Series60/5.0 Mozilla/5.0; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Safari/525 3gpp-gba"
|
data/test/ua_bots.yml
CHANGED
@@ -6,6 +6,7 @@ APIS_GOOGLE: "APIs-Google; (+https://developers.google.com/webmasters/APIs-Googl
|
|
6
6
|
APPLE_BOT: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (Applebot/0.1)"
|
7
7
|
ASK: "Mozilla/2.0 (compatible; Ask Jeeves/Teoma; +http://sp.ask.com/docs/about/tech_crawling.html)"
|
8
8
|
AWS_ELB: ELB-HealthChecker/1.0
|
9
|
+
ARCHIVEBOT: "ArchiveTeam ArchiveBot/20190617.01 (wpull 2.0.3) and not Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36"
|
9
10
|
BAIDU: "Baiduspider+(+http://www.baidu.com/search/spider.htm)"
|
10
11
|
BARKROWLER: "Barkrowler/0.7 (+http://www.exensa.com/crawl)"
|
11
12
|
BINGBOT: "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
|
@@ -39,6 +40,7 @@ GOOGLE_STRUCTURED_DATA_TESTING_TOOL: "Mozilla/5.0 (compatible; X11; Linux x86_64
|
|
39
40
|
GRAPESHOT: "Mozilla/5.0 (compatible; GrapeshotCrawler/2.0; +http://www.grapeshot.co.uk/crawler.php)"
|
40
41
|
HTTRACK: "Mozilla/4.5 (compatible; HTTrack 3.0x; Windows 98)"
|
41
42
|
IMPLISENSEBOT: "ImplisenseBot 1.0"
|
43
|
+
JAUNT: "Jaunt/1.5"
|
42
44
|
JOBSEEKER: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) JobBot/5.0 (compatible; +http://www.jobseeker.com.au/bot.html) Safari/538.1"
|
43
45
|
JOOBLE: "Mozilla/5.0 (compatible; Jooblebot/2.0; Windows NT 6.1; WOW64; +http://jooble.org/jooble-bot) Mobile"
|
44
46
|
LINKDEXBOT: "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)"
|
data/test/ua_search_engines.yml
CHANGED
@@ -157,4 +157,10 @@ class AcceptLanguageTest < Minitest::Test
|
|
157
157
|
assert_equal 5, result.size
|
158
158
|
assert_language result[3], code: "de", region: nil, quality: 0.7
|
159
159
|
end
|
160
|
+
|
161
|
+
test "sets default quality value for invalid strings" do
|
162
|
+
result = Browser::AcceptLanguage.parse(";q=0.0.0.0")
|
163
|
+
|
164
|
+
assert_equal 0.1, result[0].quality
|
165
|
+
end
|
160
166
|
end
|
@@ -9,7 +9,6 @@ class BlackberryTest < Minitest::Test
|
|
9
9
|
assert_equal "BlackBerry", browser.name
|
10
10
|
refute browser.device.tablet?
|
11
11
|
assert browser.device.mobile?
|
12
|
-
refute browser.modern?
|
13
12
|
assert_equal "4.1.0", browser.full_version
|
14
13
|
assert_equal "4", browser.version
|
15
14
|
end
|
@@ -18,7 +17,6 @@ class BlackberryTest < Minitest::Test
|
|
18
17
|
browser = Browser.new(Browser["BLACKBERRY4"])
|
19
18
|
|
20
19
|
assert_equal "BlackBerry", browser.name
|
21
|
-
refute browser.modern?
|
22
20
|
assert_equal "4.2.1", browser.full_version
|
23
21
|
assert_equal "4", browser.version
|
24
22
|
end
|
@@ -29,7 +27,6 @@ class BlackberryTest < Minitest::Test
|
|
29
27
|
assert_equal "BlackBerry", browser.name
|
30
28
|
refute browser.device.tablet?
|
31
29
|
assert browser.device.mobile?
|
32
|
-
refute browser.modern?
|
33
30
|
assert_equal "5.0.0.93", browser.full_version
|
34
31
|
assert_equal "5", browser.version
|
35
32
|
end
|
@@ -40,7 +37,6 @@ class BlackberryTest < Minitest::Test
|
|
40
37
|
assert_equal "BlackBerry", browser.name
|
41
38
|
refute browser.device.tablet?
|
42
39
|
assert browser.device.mobile?
|
43
|
-
assert browser.modern?
|
44
40
|
assert_equal "6.0.0.141", browser.full_version
|
45
41
|
assert_equal "6", browser.version
|
46
42
|
end
|
@@ -51,7 +47,6 @@ class BlackberryTest < Minitest::Test
|
|
51
47
|
assert_equal "BlackBerry", browser.name
|
52
48
|
refute browser.device.tablet?
|
53
49
|
assert browser.device.mobile?
|
54
|
-
assert browser.modern?
|
55
50
|
assert_equal "7.0.0.1", browser.full_version
|
56
51
|
assert_equal "7", browser.version
|
57
52
|
end
|
@@ -62,7 +57,6 @@ class BlackberryTest < Minitest::Test
|
|
62
57
|
assert_equal "BlackBerry", browser.name
|
63
58
|
refute browser.device.tablet?
|
64
59
|
assert browser.device.mobile?
|
65
|
-
assert browser.modern?
|
66
60
|
assert_equal "10.0.9.1675", browser.full_version
|
67
61
|
assert_equal "10", browser.version
|
68
62
|
end
|
data/test/unit/bots_test.rb
CHANGED
@@ -15,34 +15,6 @@ class BotsTest < Minitest::Test
|
|
15
15
|
refute browser.bot?
|
16
16
|
end
|
17
17
|
|
18
|
-
test "doesn't consider empty UA as bot" do
|
19
|
-
browser = Browser.new("")
|
20
|
-
refute browser.bot?
|
21
|
-
end
|
22
|
-
|
23
|
-
test "allows setting empty string as bots" do
|
24
|
-
Browser::Bot.detect_empty_ua!
|
25
|
-
browser = Browser.new("")
|
26
|
-
|
27
|
-
assert browser.bot?
|
28
|
-
end
|
29
|
-
|
30
|
-
test "allows setting nil as user agent for bots" do
|
31
|
-
browser = Browser.new(nil)
|
32
|
-
refute browser.bot?
|
33
|
-
|
34
|
-
Browser::Bot.detect_empty_ua!
|
35
|
-
browser = Browser.new(nil)
|
36
|
-
assert browser.bot?
|
37
|
-
end
|
38
|
-
|
39
|
-
test "doesn't detect mozilla as a bot when considering empty UA" do
|
40
|
-
Browser::Bot.detect_empty_ua!
|
41
|
-
browser = Browser.new("Mozilla")
|
42
|
-
|
43
|
-
refute browser.bot?
|
44
|
-
end
|
45
|
-
|
46
18
|
test "returns bot name" do
|
47
19
|
browser = Browser.new(Browser["GOOGLE_BOT"])
|
48
20
|
assert_equal "Google Bot", browser.bot.name
|
@@ -51,13 +23,6 @@ class BotsTest < Minitest::Test
|
|
51
23
|
assert_equal "Facebook Bot", browser.bot.name
|
52
24
|
end
|
53
25
|
|
54
|
-
test "returns bot name (empty string ua detection enabled)" do
|
55
|
-
Browser::Bot.detect_empty_ua!
|
56
|
-
browser = Browser.new("")
|
57
|
-
|
58
|
-
assert_equal browser.bot.name, "Generic Bot"
|
59
|
-
end
|
60
|
-
|
61
26
|
test "returns nil for non-bots" do
|
62
27
|
browser = Browser.new(Browser["CHROME"])
|
63
28
|
assert_nil browser.bot.name
|
@@ -84,7 +49,6 @@ class BotsTest < Minitest::Test
|
|
84
49
|
refute browser.platform.windows10?
|
85
50
|
refute browser.platform.windows_phone?
|
86
51
|
refute browser.edge?
|
87
|
-
refute browser.modern?
|
88
52
|
refute browser.device.mobile?
|
89
53
|
refute browser.webkit?
|
90
54
|
refute browser.chrome?
|
@@ -116,9 +80,32 @@ class BotsTest < Minitest::Test
|
|
116
80
|
end
|
117
81
|
|
118
82
|
test "tells why user agent is considered a bot" do
|
119
|
-
|
83
|
+
matcher = Browser::Bot.why?(Browser.bot_user_agents["LINKEDIN"])
|
84
|
+
|
85
|
+
assert_equal Browser::Bot::KnownBotsMatcher, matcher
|
86
|
+
end
|
87
|
+
|
88
|
+
test "adds custom bot matcher" do
|
89
|
+
Browser::Bot.matchers << ->(ua, _) { ua =~ /some-script/ }
|
90
|
+
browser = Browser.new("some-script")
|
120
91
|
|
121
|
-
|
122
|
-
assert_equal "
|
92
|
+
assert browser.bot?
|
93
|
+
assert_equal "Generic Bot", browser.bot.name
|
94
|
+
end
|
95
|
+
|
96
|
+
%w[
|
97
|
+
content-fetcher
|
98
|
+
content-crawler
|
99
|
+
some-search-engine
|
100
|
+
monitoring-service
|
101
|
+
content-spider
|
102
|
+
some-bot
|
103
|
+
].each do |ua|
|
104
|
+
test "detects user agents based on keywords (#{ua})" do
|
105
|
+
browser = Browser.new(ua)
|
106
|
+
|
107
|
+
assert browser.bot?
|
108
|
+
assert_equal Browser::Bot::KeywordMatcher, browser.bot.why?
|
109
|
+
end
|
123
110
|
end
|
124
111
|
end
|