browser 2.7.1 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|