browser 3.0.3 → 5.1.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/.github/ISSUE_TEMPLATE.md +1 -1
- data/.prettierignore +1 -0
- data/.rubocop.yml +9 -0
- data/CHANGELOG.md +86 -19
- data/FUNDING.yml +3 -0
- data/README.md +101 -64
- data/bots.yml +300 -294
- data/browser.gemspec +3 -1
- data/lib/browser/base.rb +71 -16
- data/lib/browser/browser.rb +27 -26
- data/lib/browser/chrome.rb +12 -2
- data/lib/browser/device.rb +9 -2
- data/lib/browser/device/samsung.rb +33 -0
- data/lib/browser/device/unknown.rb +1 -1
- data/lib/browser/duck_duck_go.rb +22 -0
- data/lib/browser/edge.rb +2 -2
- data/lib/browser/google_search_app.rb +21 -0
- data/lib/browser/huawei_browser.rb +21 -0
- data/lib/browser/maxthon.rb +21 -0
- data/lib/browser/meta.rb +0 -1
- data/lib/browser/meta/base.rb +0 -1
- data/lib/browser/miui_browser.rb +21 -0
- data/lib/browser/platform.rb +5 -5
- data/lib/browser/platform/base.rb +3 -2
- data/lib/browser/platform/ios.rb +1 -1
- data/lib/browser/platform/mac.rb +4 -2
- data/lib/browser/platform/{other.rb → unknown.rb} +3 -3
- data/lib/browser/platform/windows.rb +1 -1
- data/lib/browser/safari.rb +16 -1
- data/lib/browser/samsung_browser.rb +21 -0
- data/lib/browser/sougou_browser.rb +24 -0
- data/lib/browser/{generic.rb → unknown.rb} +3 -3
- data/lib/browser/version.rb +1 -1
- data/samsung.yml +138 -0
- data/test/browser_test.rb +37 -6
- data/test/ua.yml +21 -1
- data/test/ua_bots.yml +8 -2
- data/test/unit/adobe_air_test.rb +1 -1
- data/test/unit/alipay_test.rb +6 -0
- data/test/unit/console_test.rb +2 -2
- data/test/unit/device_test.rb +29 -2
- data/test/unit/duck_duck_go_test.rb +37 -0
- data/test/unit/edge_test.rb +34 -2
- data/test/unit/google_search_app_test.rb +54 -0
- data/test/unit/huawei_browser_test.rb +25 -0
- data/test/unit/maxthon_test.rb +25 -0
- data/test/unit/meta_test.rb +9 -0
- data/test/unit/micro_messenger_test.rb +21 -6
- data/test/unit/miui_browser_test.rb +25 -0
- data/test/unit/opera_test.rb +1 -0
- data/test/unit/platform_test.rb +12 -7
- data/test/unit/qq_test.rb +12 -0
- data/test/unit/safari_test.rb +12 -7
- data/test/unit/samsung_browser_test.rb +23 -0
- data/test/unit/sougou_browser_test.rb +41 -0
- metadata +36 -11
- data/lib/browser/meta/modern.rb +0 -11
data/test/ua.yml
CHANGED
@@ -32,6 +32,8 @@ CHROME: "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/53
|
|
32
32
|
CHROME_OS: "Mozilla/5.0 (X11; CrOS x86_64 3701.81.0) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.57 Safari/537.31."
|
33
33
|
COREMEDIA: "Apple Mac OS X v10.6.4 CoreMedia v1.0.0.10F569"
|
34
34
|
CUSTOM_APP: "Our App 0.0.1 (Linux; Android 4.0.3; HTC Ruby Build/IML74K; en_CA)"
|
35
|
+
DUCKDUCKGO_BROWSER_ANDROID: Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.96 Mobile Safari/537.36 DuckDuckGo/5"
|
36
|
+
DUCKDUCKGO_BROWSER_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 DuckDuckGo/7"
|
35
37
|
ELECTRON: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Electron/1.4.12 Safari/537.36"
|
36
38
|
FACEBOOK: Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 [FBAN/FBIOS;FBAV/135.0.0.45.90;FBBV/66877072;FBDV/iPhone9,3;FBMD/iPhone;FBSN/iOS;FBSV/10.3.3;FBSS/2;FBCR/AT&T;FBID/phone;FBLC/en_US;FBOP/5;FBRV/0]
|
37
39
|
FACEBOOK_ANDROID: "Mozilla/5.0 (Linux; Android 9; ONEPLUS A6003 Build/PKQ1.180716.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/73.0.3683.90 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/214.0.0.43.83;]"
|
@@ -42,6 +44,10 @@ FIREFOX_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/
|
|
42
44
|
FIREFOX_MODERN: "Mozilla/5.0 (X11; Ubuntu; Linux armv7l; rv:17.0) Gecko/20100101 Firefox/17.0"
|
43
45
|
FIREFOX_OS: "Mozilla/5.0 (Mobile; rv:18.0) Gecko/18.0 Firefox/18.0"
|
44
46
|
FIREFOX_TABLET: "Mozilla/5.0 (Android; Tablet; rv:14.0) Gecko/14.0 Firefox/14.0"
|
47
|
+
GOOGLE_SEARCH_APP_ANDROID: "Mozilla/5.0 (Linux; Android 10; SM-G960U Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.117 Mobile Safari/537.36 GSA/11.6.8.21.arm64"
|
48
|
+
GOOGLE_SEARCH_APP_IPAD: "Mozilla/5.0 (iPad; CPU OS 12_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/102.0.304944559 Mobile/15E148 Safari/605.1"
|
49
|
+
GOOGLE_SEARCH_APP_IPHONE: "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/105.0.307913796 Mobile/17D50 Safari/604.1"
|
50
|
+
HUAWEI_BROWSER: "Mozilla/5.0 (Linux; Android 10; HMA-AL00; HMSCore 5.0.0.304; GMSCore 19.6.29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 HuaweiBrowser/10.1.2.300 Mobile Safari/537.36"
|
45
51
|
IE10: "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; EIE10;ENUSMSN)"
|
46
52
|
IE10_COMPAT: "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; EIE10;ENUSMSN)"
|
47
53
|
IE10_X64_WINX64: "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)"
|
@@ -77,12 +83,19 @@ KINDLE_FIRE: "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Kindle Fire Build/GIN
|
|
77
83
|
KINDLE_FIRE_HD: "Mozilla/5.0 (Linux; U; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.4 Safari/535.19 Silk-Accelerated=true"
|
78
84
|
KINDLE_FIRE_HD_MOBILE: "Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.4 Mobile Safari/535.19 Silk-Accelerated=true"
|
79
85
|
LUMIA800: "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; XBLWP7; ZuneWP7"
|
80
|
-
|
86
|
+
MAC_OS: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15"
|
87
|
+
MAC_OSX: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9"
|
88
|
+
MAXTHON: "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36 Maxthon/5.3.8.2000"
|
89
|
+
MICRO_MESSENGER_ANDROID: "Mozilla/5.0 (Linux; Android 7.1.2; Redmi 4X Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045131 Mobile Safari/537.36 MMWEBID/9286 MicroMessenger/7.0.13.1640(0x27000D37) Process/tools NetType/WIFI Language/zh_CN ABI/arm64 WeChat/arm64"
|
90
|
+
MICRO_MESSENGER_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.10(0x17000a21) NetType/4G Language/zh_CN"
|
81
91
|
MIDP: MIDP-2.0
|
92
|
+
MIUI_BROWSER: "Mozilla/5.0 (Linux; U; Android 7.1.2; zh-cn; Redmi 4X Build/N2G47H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.141 Mobile Safari/537.36 XiaoMi/MiuiBrowser/12.3.3-g"
|
82
93
|
MOBILE_CHROME: "Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3"
|
83
94
|
MS_EDGE: "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0"
|
95
|
+
MS_EDGE_ANDROID: "Mozilla/5.0 (Linux; Android 7.1.2; Redmi 4X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.0 Mobile Safari/537.36 EdgA/44.11.2.4122"
|
84
96
|
MS_EDGE_CHROME: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36 Edg/79.0.309.18"
|
85
97
|
MS_EDGE_COMPAT: "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; Microsoft Outlook 15.0.4433; ms-office; MSOffice 15)"
|
98
|
+
MS_EDGE_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 EdgiOS/44.5.0.10 Mobile/15E148 Safari/604.1"
|
86
99
|
MS_EDGE_MOBILE: "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; DEVICE INFO) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Mobile Safari/537.36 Edge/12.0"
|
87
100
|
NEXUS7: "Mozilla/5.0 (Linux; Android 4.3; Nexus 7 Build/JWR66Y) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Safari/537.36"
|
88
101
|
NEXUS_TABLET: "Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19"
|
@@ -107,6 +120,8 @@ QQ_BROWSER_ANDROID: "Mozilla/5.0 (Linux; Android 5.1.1; SM-N9108V Build/LMY47X)
|
|
107
120
|
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"
|
108
121
|
QQ_BROWSER_MAC: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36 QQBrowser/4.2.4753.400"
|
109
122
|
QQ_BROWSER_MAC_LITE: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14 QQBrowserLite/1.0.4"
|
123
|
+
SOUGOU_BROWSER: "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36 SE 2.X MetaSr 1.0"
|
124
|
+
SOUGOU_BROWSER_MOBILE: "Mozilla/5.0 (Linux; Android 7.1.2; Redmi 4X Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/68.0.3440.106 Mobile Safari/537.36 AWP/2.0 SogouMSE,SogouMobileBrowser/5.28.12"
|
110
125
|
QUICKTIME: "QuickTime/7.6.8 (qtver=7.6.8;os=Windows NT 5.1Service Pack 3)"
|
111
126
|
SAFARI3: "Mozilla/5.0 (Windows; U; Windows NT 6.0; en) AppleWebKit/522.15.5 (KHTML, like Gecko) Version/3.0.3 Safari/522.15.5"
|
112
127
|
SAFARI4: "Mozilla/5.0 (Windows; U; Windows NT 6.0; fr-ch) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9"
|
@@ -119,7 +134,12 @@ SAFARI: "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit/53
|
|
119
134
|
SAFARI_IPAD_WEBAPP_MODE: "Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405"
|
120
135
|
SAFARI_IPHONE_WEBAPP_MODE: "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.20 (KHTML, like Gecko) Mobile/7B298g"
|
121
136
|
SAMSUNG: "Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I497 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30"
|
137
|
+
SAMSUNG_BROWSER: "Mozilla/5.0 (Linux; Android 10; SAMSUNG SM-N960U) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/11.1 Chrome/75.0.3770.143 Mobile Safari/537.36"
|
122
138
|
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"
|
139
|
+
SAMSUNG_SM-G975F: "Mozilla/5.0 (Linux; Android 10; SM-G975F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.101 Mobile Safari/537.36"
|
140
|
+
SAMSUNG_SM-G960F: "Mozilla/5.0 (Linux; Android 8.0.0; SM-G960F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36"
|
141
|
+
SAMSUNG_SM-F700F: "Mozilla/5.0 (Linux; Android 10; SAMSUNG SM-F700F) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/11.1 Chrome/75.0.3770.143 Mobile Safari/537.36"
|
142
|
+
SAMSUNG_SM-FAKE: "Mozilla/5.0 (Linux; Android 8.0.0; SM-0000) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36"
|
123
143
|
SMART_TV: "Mozilla/5.0 (SmartHub; SMART-TV; U; Linux/SmartTV) AppleWebKit/531.2+ (KHTML, like Gecko) WebBrowser/1.0 SmartTV Safari/531.2+"
|
124
144
|
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)
|
125
145
|
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)"
|
data/test/ua_bots.yml
CHANGED
@@ -4,15 +4,16 @@ ADS_TXT_CRAWLER: "AdsTxtCrawler/1.0"
|
|
4
4
|
ANDERSPINK: "Mozilla/5.0 (compatible; AndersPinkBot/1.0; +http://anderspink.com/bot.html)"
|
5
5
|
APIS_GOOGLE: "APIs-Google; (+https://developers.google.com/webmasters/APIs-Google.html)"
|
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
|
+
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"
|
7
8
|
ASK: "Mozilla/2.0 (compatible; Ask Jeeves/Teoma; +http://sp.ask.com/docs/about/tech_crawling.html)"
|
8
9
|
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"
|
10
10
|
BAIDU: "Baiduspider+(+http://www.baidu.com/search/spider.htm)"
|
11
11
|
BARKROWLER: "Barkrowler/0.7 (+http://www.exensa.com/crawl)"
|
12
12
|
BINGBOT: "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
|
13
13
|
BINGPREVIEW: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534+ (KHTML, like Gecko) BingPreview/1.0b"
|
14
14
|
BUBING: "BUbiNG (+http://law.di.unimi.it/BUbiNG.html)"
|
15
15
|
BUZZBOT: "Buzzbot/1.0 (Buzzbot; http://www.buzzstream.com; buzzbot@buzzstream.com)"
|
16
|
+
CHROME_LIGHTHOUSE: "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3694.0 Mobile Safari/537.36 Chrome-Lighthouse"
|
16
17
|
CIPACRAWLER: "CipaCrawler/3.0 (info@domaincrawler.com; http://www.domaincrawler.com/www.example.com)"
|
17
18
|
CLOUDFLARE: "Mozilla/5.0 (compatible; CloudFlare-AlwaysOnline/1.0; +http://www.cloudflare.com/always-online) AppleWebKit/534.34"
|
18
19
|
COMMONCRAWL: "CCBot/2.0 (http://commoncrawl.org/faq/)"
|
@@ -30,7 +31,9 @@ FYREBOT: "Fyrebot/1.0"
|
|
30
31
|
GARLIK: "GarlikCrawler/1.2 (http://garlik.com/, crawler@garlik.com)"
|
31
32
|
GERMCRAWLER: "GermCrawler"
|
32
33
|
GO_1.1_PACKAGE_HTTP: "Go 1.1 package http"
|
34
|
+
GO_HTTP_CLIENT: "Go-http-client"
|
33
35
|
GOOGLE_BOT: "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
|
36
|
+
GOOGLE_IMAGE_PROXY: "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)"
|
34
37
|
GOOGLE_PAGE_SPEED_INSIGHTS: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.4 (KHTML, like Gecko; Google Page Speed Insights) Chrome/22.0.1229 Safari/537.4"
|
35
38
|
GOOGLE_SHOPPING: "google-xrawler"
|
36
39
|
GOOGLE_SITE_VERIFICATION: Mozilla/5.0 (compatible; Google-Site-Verification/1.0)
|
@@ -43,6 +46,7 @@ IMPLISENSEBOT: "ImplisenseBot 1.0"
|
|
43
46
|
JAUNT: "Jaunt/1.5"
|
44
47
|
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"
|
45
48
|
JOOBLE: "Mozilla/5.0 (compatible; Jooblebot/2.0; Windows NT 6.1; WOW64; +http://jooble.org/jooble-bot) Mobile"
|
49
|
+
KNOWLEDGE_AI: "The Knowledge AI"
|
46
50
|
LINKDEXBOT: "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)"
|
47
51
|
LINKEDIN: "LinkedInBot/1.0 (compatible; Mozilla/5.0; Jakarta Commons-HttpClient/3.1 +http://www.linkedin.com)"
|
48
52
|
LOAD_TIME_BOT: "Mozilla/5.0 (compatible; LoadTimeBot/0.9; +http://www.loadtime.net/bot.html)"
|
@@ -68,10 +72,12 @@ SCOUT_URL_MONITOR: ScoutURLMonitor/6.2.2
|
|
68
72
|
SCRAPY: "Scrapy/0.18.4 (+http://scrapy.org)"
|
69
73
|
SEMANTICBOT: "Mozilla/5.0 (compatible; Semanticbot/1.0; +http://sempi.tech/bot.html)"
|
70
74
|
SEO_AUDIT: "Mozilla/5.0 (compatible; seo-audit-check-bot/1.0)"
|
75
|
+
SEOBILITYBOT: "SeobilityBot (SEO Tool; https://www.seobility.net/sites/bot.html)"
|
71
76
|
SEODIVER: "Mozilla/5.0 (compatible; SEOdiver/1.0; +http://www.seodiver.com/bot)"
|
72
77
|
SEOKICKS: "Mozilla/5.0 (compatible; SEOkicks-Robot; +http://www.seokicks.de/robot.html)"
|
73
78
|
SISTRIX: "Mozilla/5.0 (compatible; SISTRIX Crawler; http://crawler.sistrix.net/)"
|
74
|
-
SITECHECK:
|
79
|
+
SITECHECK: "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.0) SiteCheck-sitecrawl by Siteimprove.com"
|
80
|
+
SKYPE: "Mozilla/5.0 (Windows NT 6.1; WOW64) SkypeUriPreview Preview/0.5"
|
75
81
|
SOCIALRANKIO: SocialRankIOBot; http://socialrank.io/about
|
76
82
|
SQUIDER: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36 Squider/0.01"
|
77
83
|
STRIPE: "Stripe/1.0 (+https://stripe.com/docs/webhooks)"
|
data/test/unit/adobe_air_test.rb
CHANGED
@@ -9,7 +9,7 @@ class AdobeAirTest < Minitest::Test
|
|
9
9
|
assert browser.webkit?
|
10
10
|
assert_equal "0", browser.version
|
11
11
|
assert_equal "0.0", browser.full_version
|
12
|
-
assert_equal "
|
12
|
+
assert_equal "Unknown Browser", browser.name
|
13
13
|
assert_equal "Adobe AIR", browser.platform.name
|
14
14
|
assert_equal "13.0", browser.platform.version
|
15
15
|
end
|
data/test/unit/alipay_test.rb
CHANGED
@@ -10,6 +10,9 @@ class AlipayTest < Minitest::Test
|
|
10
10
|
assert browser.alipay?
|
11
11
|
assert_equal "Alipay", browser.name
|
12
12
|
assert_equal "2.3.4", browser.full_version
|
13
|
+
|
14
|
+
refute browser.chrome?
|
15
|
+
refute browser.safari?
|
13
16
|
end
|
14
17
|
|
15
18
|
test "detects alipay Android" do
|
@@ -19,6 +22,9 @@ class AlipayTest < Minitest::Test
|
|
19
22
|
assert browser.alipay?
|
20
23
|
assert_equal "Alipay", browser.name
|
21
24
|
assert_equal "9.0.1.073001", browser.full_version
|
25
|
+
|
26
|
+
refute browser.chrome?
|
27
|
+
refute browser.safari?
|
22
28
|
end
|
23
29
|
|
24
30
|
test "detects version by range" do
|
data/test/unit/console_test.rb
CHANGED
@@ -5,11 +5,11 @@ require "test_helper"
|
|
5
5
|
class ConsoleTest < Minitest::Test
|
6
6
|
test "detects psp" do
|
7
7
|
browser = Browser.new(Browser["PSP"])
|
8
|
-
assert_equal "
|
8
|
+
assert_equal "Unknown Browser", browser.name
|
9
9
|
end
|
10
10
|
|
11
11
|
test "detects psp vita" do
|
12
12
|
browser = Browser.new(Browser["PSP_VITA"])
|
13
|
-
assert_equal "
|
13
|
+
assert_equal "Unknown Browser", browser.name
|
14
14
|
end
|
15
15
|
end
|
data/test/unit/device_test.rb
CHANGED
@@ -20,14 +20,14 @@ class DeviceTest < Minitest::Test
|
|
20
20
|
|
21
21
|
Browser::Device.matchers.shift
|
22
22
|
device = Browser::Device.new("Custom")
|
23
|
-
assert_equal :
|
23
|
+
assert_equal :unknown_device, device.id
|
24
24
|
end
|
25
25
|
|
26
26
|
test "detect generic device" do
|
27
27
|
device = Browser::Device.new("")
|
28
28
|
|
29
29
|
assert device.unknown?
|
30
|
-
assert_equal :
|
30
|
+
assert_equal :unknown_device, device.id
|
31
31
|
end
|
32
32
|
|
33
33
|
test "detect ipad" do
|
@@ -258,4 +258,31 @@ class DeviceTest < Minitest::Test
|
|
258
258
|
assert_equal name, device.name
|
259
259
|
end
|
260
260
|
end
|
261
|
+
|
262
|
+
test "detect samsung devices" do
|
263
|
+
device = Browser::Device.new(Browser["SAMSUNG_SM-G975F"])
|
264
|
+
|
265
|
+
assert device.samsung?
|
266
|
+
assert_equal :samsung, device.id
|
267
|
+
assert_equal "Samsung Galaxy S10+", device.name
|
268
|
+
end
|
269
|
+
|
270
|
+
test "detect generic samsung devices" do
|
271
|
+
device = Browser::Device.new(Browser["SAMSUNG_SM-FAKE"])
|
272
|
+
|
273
|
+
assert device.samsung?
|
274
|
+
assert_equal :samsung, device.id
|
275
|
+
assert_equal "Samsung SM-0000", device.name
|
276
|
+
end
|
277
|
+
|
278
|
+
{
|
279
|
+
"SAMSUNG_SM-G975F" => "Samsung Galaxy S10+",
|
280
|
+
"SAMSUNG_SM-G960F" => "Samsung Galaxy S9",
|
281
|
+
"SAMSUNG_SM-F700F" => "Samsung Galaxy Z Flip"
|
282
|
+
}.each do |key, name|
|
283
|
+
test "detect device name of #{key} as #{name}" do
|
284
|
+
device = Browser::Device.new(Browser[key])
|
285
|
+
assert_equal name, device.name
|
286
|
+
end
|
287
|
+
end
|
261
288
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
class DuckDuckGoTest < Minitest::Test
|
6
|
+
test "detects DuckDuckGo on iOS device" do
|
7
|
+
browser = Browser.new(Browser["DUCKDUCKGO_BROWSER_IOS"])
|
8
|
+
assert browser.duck_duck_go?
|
9
|
+
refute browser.safari?
|
10
|
+
refute browser.chrome?
|
11
|
+
assert browser.webkit?
|
12
|
+
refute browser.bot?
|
13
|
+
assert_equal "DuckDuckGo", browser.name
|
14
|
+
assert_equal :duckduckgo, browser.id
|
15
|
+
end
|
16
|
+
|
17
|
+
test "detects DuckDuckGo on Android device" do
|
18
|
+
browser = Browser.new(Browser["DUCKDUCKGO_BROWSER_ANDROID"])
|
19
|
+
assert browser.duck_duck_go?
|
20
|
+
refute browser.safari?
|
21
|
+
refute browser.chrome?
|
22
|
+
refute browser.bot?
|
23
|
+
assert_equal "DuckDuckGo", browser.name
|
24
|
+
assert_equal :duckduckgo, browser.id
|
25
|
+
end
|
26
|
+
|
27
|
+
test "detects correct version" do
|
28
|
+
browser = Browser.new(Browser["DUCKDUCKGO_BROWSER_IOS"])
|
29
|
+
assert_equal "7", browser.full_version
|
30
|
+
assert_equal "7", browser.version
|
31
|
+
end
|
32
|
+
|
33
|
+
test "detects version by range" do
|
34
|
+
browser = Browser.new(Browser["DUCKDUCKGO_BROWSER_IOS"])
|
35
|
+
assert browser.duck_duck_go?(%w[>=7 <8])
|
36
|
+
end
|
37
|
+
end
|
data/test/unit/edge_test.rb
CHANGED
@@ -65,8 +65,40 @@ class EdgeTest < ActionController::TestCase
|
|
65
65
|
refute browser.safari?
|
66
66
|
end
|
67
67
|
|
68
|
+
test "detects Microsoft Edge Mobile on iOS" do
|
69
|
+
browser = Browser.new(Browser["MS_EDGE_IOS"])
|
70
|
+
|
71
|
+
assert_equal :edge, browser.id
|
72
|
+
assert_equal "Microsoft Edge", browser.name
|
73
|
+
assert_equal "44.5.0.10", browser.full_version
|
74
|
+
assert_equal "44", browser.version
|
75
|
+
refute browser.platform.windows10?
|
76
|
+
refute browser.platform.windows_phone?
|
77
|
+
assert browser.platform.ios?
|
78
|
+
assert browser.edge?
|
79
|
+
refute browser.webkit?
|
80
|
+
refute browser.chrome?
|
81
|
+
refute browser.safari?
|
82
|
+
end
|
83
|
+
|
84
|
+
test "detects Microsoft Edge Mobile on Android" do
|
85
|
+
browser = Browser.new(Browser["MS_EDGE_ANDROID"])
|
86
|
+
|
87
|
+
assert_equal :edge, browser.id
|
88
|
+
assert_equal "Microsoft Edge", browser.name
|
89
|
+
assert_equal "44.11.2.4122", browser.full_version
|
90
|
+
assert_equal "44", browser.version
|
91
|
+
refute browser.platform.windows10?
|
92
|
+
refute browser.platform.windows_phone?
|
93
|
+
assert browser.platform.android?
|
94
|
+
assert browser.edge?
|
95
|
+
refute browser.webkit?
|
96
|
+
refute browser.chrome?
|
97
|
+
refute browser.safari?
|
98
|
+
end
|
99
|
+
|
68
100
|
test "detects version by range" do
|
69
|
-
browser = Browser.new(Browser["
|
70
|
-
assert browser.edge?(%w[>=
|
101
|
+
browser = Browser.new(Browser["MS_EDGE_IOS"])
|
102
|
+
assert browser.edge?(%w[>=43 <45])
|
71
103
|
end
|
72
104
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
class GoogleSearchAppTest < Minitest::Test
|
6
|
+
test "detects Google Search App (Android)" do
|
7
|
+
browser = Browser.new(Browser["GOOGLE_SEARCH_APP_ANDROID"])
|
8
|
+
|
9
|
+
assert browser.webkit?
|
10
|
+
assert browser.google_search_app?
|
11
|
+
assert browser.platform.android?
|
12
|
+
assert_equal :google_search_app, browser.id
|
13
|
+
assert_equal "11", browser.version
|
14
|
+
assert_equal "11.6.8.21", browser.full_version
|
15
|
+
assert_equal "Google Search App", browser.name
|
16
|
+
refute browser.chrome?
|
17
|
+
refute browser.safari?
|
18
|
+
end
|
19
|
+
|
20
|
+
test "detects Google Search App (iPad)" do
|
21
|
+
browser = Browser.new(Browser["GOOGLE_SEARCH_APP_IPAD"])
|
22
|
+
|
23
|
+
assert browser.webkit?
|
24
|
+
assert browser.google_search_app?
|
25
|
+
assert browser.device.ipad?
|
26
|
+
assert browser.platform.ios?
|
27
|
+
assert_equal :google_search_app, browser.id
|
28
|
+
assert_equal "102", browser.version
|
29
|
+
assert_equal "102.0.304944559", browser.full_version
|
30
|
+
assert_equal "Google Search App", browser.name
|
31
|
+
refute browser.chrome?
|
32
|
+
refute browser.safari?
|
33
|
+
end
|
34
|
+
|
35
|
+
test "detects Google Search App (iPhone)" do
|
36
|
+
browser = Browser.new(Browser["GOOGLE_SEARCH_APP_IPHONE"])
|
37
|
+
|
38
|
+
assert browser.webkit?
|
39
|
+
assert browser.google_search_app?
|
40
|
+
assert browser.device.iphone?
|
41
|
+
assert browser.platform.ios?
|
42
|
+
assert_equal :google_search_app, browser.id
|
43
|
+
assert_equal "105", browser.version
|
44
|
+
assert_equal "105.0.307913796", browser.full_version
|
45
|
+
assert_equal "Google Search App", browser.name
|
46
|
+
refute browser.chrome?
|
47
|
+
refute browser.safari?
|
48
|
+
end
|
49
|
+
|
50
|
+
test "detects version by range (iPad)" do
|
51
|
+
browser = Browser.new(Browser["GOOGLE_SEARCH_APP_IPAD"])
|
52
|
+
assert browser.google_search_app?(%w[>=102 <103])
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
class HuaweiBrowserTest < Minitest::Test
|
6
|
+
test "detects Huawei Browser" do
|
7
|
+
browser = Browser.new(Browser["HUAWEI_BROWSER"])
|
8
|
+
assert browser.huawei_browser?
|
9
|
+
refute browser.safari?
|
10
|
+
refute browser.chrome?
|
11
|
+
assert_equal "Huawei Browser", browser.name
|
12
|
+
assert_equal :huawei_browser, browser.id
|
13
|
+
end
|
14
|
+
|
15
|
+
test "detects correct version" do
|
16
|
+
browser = Browser.new(Browser["HUAWEI_BROWSER"])
|
17
|
+
assert_equal "10.1.2.300", browser.full_version
|
18
|
+
assert_equal "10", browser.version
|
19
|
+
end
|
20
|
+
|
21
|
+
test "detects version by range" do
|
22
|
+
browser = Browser.new(Browser["HUAWEI_BROWSER"])
|
23
|
+
assert browser.huawei_browser?(%w[>=10 <11])
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
class MaxthonTest < Minitest::Test
|
6
|
+
test "detects Maxthon" do
|
7
|
+
browser = Browser.new(Browser["MAXTHON"])
|
8
|
+
assert browser.maxthon?
|
9
|
+
refute browser.safari?
|
10
|
+
refute browser.chrome?
|
11
|
+
assert_equal "Maxthon", browser.name
|
12
|
+
assert_equal :maxthon, browser.id
|
13
|
+
end
|
14
|
+
|
15
|
+
test "detects correct version" do
|
16
|
+
browser = Browser.new(Browser["MAXTHON"])
|
17
|
+
assert_equal "5.3.8.2000", browser.full_version
|
18
|
+
assert_equal "5", browser.version
|
19
|
+
end
|
20
|
+
|
21
|
+
test "detects version by range" do
|
22
|
+
browser = Browser.new(Browser["MAXTHON"])
|
23
|
+
assert browser.maxthon?(%w[>=5 <6])
|
24
|
+
end
|
25
|
+
end
|
data/test/unit/meta_test.rb
CHANGED
@@ -45,4 +45,13 @@ class MetaTest < Minitest::Test
|
|
45
45
|
assert meta.include?("blackberry")
|
46
46
|
assert meta.include?("mobile")
|
47
47
|
end
|
48
|
+
|
49
|
+
test "returns string representation for unknown platform/device/browser" do
|
50
|
+
browser = Browser.new("Unknown")
|
51
|
+
meta = browser.to_s
|
52
|
+
|
53
|
+
assert meta.include?("unknown_platform")
|
54
|
+
assert meta.include?("unknown_device")
|
55
|
+
assert meta.include?("unknown_browser")
|
56
|
+
end
|
48
57
|
end
|
@@ -3,18 +3,33 @@
|
|
3
3
|
require "test_helper"
|
4
4
|
|
5
5
|
class MicroMessengerTest < Minitest::Test
|
6
|
-
test "detects micro messenger
|
7
|
-
browser = Browser.new(Browser["
|
6
|
+
test "detects micro messenger 7.0.10 on iOS" do
|
7
|
+
browser = Browser.new(Browser["MICRO_MESSENGER_IOS"])
|
8
8
|
|
9
9
|
assert browser.micro_messenger?
|
10
10
|
assert browser.wechat?
|
11
|
-
assert_equal "
|
11
|
+
assert_equal "7.0.10", browser.full_version
|
12
12
|
assert_equal "MicroMessenger", browser.name
|
13
13
|
assert_equal :micro_messenger, browser.id
|
14
14
|
end
|
15
15
|
|
16
|
-
test "detects version by range" do
|
17
|
-
browser = Browser.new(Browser["
|
18
|
-
assert browser.wechat?(%w[>=
|
16
|
+
test "detects version by range on iOS" do
|
17
|
+
browser = Browser.new(Browser["MICRO_MESSENGER_IOS"])
|
18
|
+
assert browser.wechat?(%w[>=7 <8])
|
19
|
+
end
|
20
|
+
|
21
|
+
test "detects micro messenger 7.0.13.1640 on Android" do
|
22
|
+
browser = Browser.new(Browser["MICRO_MESSENGER_ANDROID"])
|
23
|
+
|
24
|
+
assert browser.micro_messenger?
|
25
|
+
assert browser.wechat?
|
26
|
+
assert_equal "7.0.13.1640", browser.full_version
|
27
|
+
assert_equal "MicroMessenger", browser.name
|
28
|
+
assert_equal :micro_messenger, browser.id
|
29
|
+
end
|
30
|
+
|
31
|
+
test "detects version by range on Android" do
|
32
|
+
browser = Browser.new(Browser["MICRO_MESSENGER_ANDROID"])
|
33
|
+
assert browser.wechat?(%w[>=7 <8])
|
19
34
|
end
|
20
35
|
end
|