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.
@@ -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