browser 2.7.1 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -21,7 +21,7 @@ module Browser
21
21
 
22
22
  def match?
23
23
  ua =~ /Chrome|CriOS/ &&
24
- ua !~ /PhantomJS|FxiOS|YaBrowser|SputnikBrowser/ &&
24
+ ua !~ /PhantomJS|FxiOS|YaBrowser|SputnikBrowser|ArchiveBot/ &&
25
25
  !opera? &&
26
26
  !edge?
27
27
  end
@@ -1,25 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "browser/device/base"
4
- require "browser/device/android"
5
- require "browser/device/unknown"
6
- require "browser/device/ipad"
7
- require "browser/device/ipod_touch"
8
- require "browser/device/iphone"
9
- require "browser/device/playstation3"
10
- require "browser/device/playstation4"
11
- require "browser/device/psp"
12
- require "browser/device/psvita"
13
- require "browser/device/kindle"
14
- require "browser/device/kindle_fire"
15
- require "browser/device/wii"
16
- require "browser/device/wiiu"
17
- require "browser/device/blackberry_playbook"
18
- require "browser/device/surface"
19
- require "browser/device/switch"
20
- require "browser/device/tv"
21
- require "browser/device/xbox_one"
22
- require "browser/device/xbox_360"
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 Metrics/LineLength
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 Metrics/LineLength
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
@@ -1,15 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "browser/meta/base"
4
- require "browser/meta/generic_browser"
5
- require "browser/meta/id"
6
- require "browser/meta/ie"
7
- require "browser/meta/ios"
8
- require "browser/meta/mobile"
9
- require "browser/meta/modern"
10
- require "browser/meta/platform"
11
- require "browser/meta/proxy"
12
- require "browser/meta/safari"
13
- require "browser/meta/webkit"
14
- require "browser/meta/tablet"
15
- require "browser/meta/device"
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"
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "uri"
4
- require "browser/middleware/context"
4
+ require_relative "middleware/context"
5
5
 
6
6
  module Browser
7
7
  class Middleware
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "browser/middleware/context/url_methods"
3
+ require_relative "url_methods"
4
4
 
5
5
  module Browser
6
6
  class Middleware
@@ -1,18 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "browser/platform/base"
4
- require "browser/platform/ios"
5
- require "browser/platform/linux"
6
- require "browser/platform/windows"
7
- require "browser/platform/mac"
8
- require "browser/platform/windows_phone"
9
- require "browser/platform/windows_mobile"
10
- require "browser/platform/firefox_os"
11
- require "browser/platform/blackberry"
12
- require "browser/platform/android"
13
- require "browser/platform/other"
14
- require "browser/platform/chrome_os"
15
- require "browser/platform/adobe_air"
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
@@ -19,7 +19,7 @@ module Browser
19
19
  end
20
20
 
21
21
  def match?
22
- ua =~ /QQ/i
22
+ ua =~ %r{QQ/|QQBrowser}i
23
23
  end
24
24
  end
25
25
  end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "rails/railtie"
4
- require "browser/action_controller"
5
- require "browser/middleware/context/additions"
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 Metrics/LineLength
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
@@ -11,10 +11,7 @@ module Browser
11
11
  end
12
12
 
13
13
  def full_version
14
- # Each regex on its own line to enforce precedence.
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?
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Browser
4
- VERSION = "2.7.1"
4
+ VERSION = "3.0.0"
5
5
  end
@@ -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])
@@ -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"
@@ -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/)"
@@ -1,3 +1,4 @@
1
+ ---
1
2
  ASK: "Mozilla/2.0 (compatible; Ask Jeeves/Teoma; +http://sp.ask.com/docs/about/tech_crawling.html)"
2
3
  BAIDU: "Baiduspider+(+http://www.baidu.com/search/spider.htm)"
3
4
  BINGBOT: "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
@@ -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
@@ -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
- id, name = Browser::Bot.why?(Browser.bot_user_agents["LINKEDIN"])
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
- assert_equal "linkedinbot", id
122
- assert_equal "LinkedIn", name
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