browser 2.4.0 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f0828232944387c4f17fbb21c8898d3d310d76d6
4
- data.tar.gz: ada9777fb56e976f0cbe2712b47922f5567c4dea
3
+ metadata.gz: dfb0f67e4198ff39314ea0fb6d61f74e6e7e87e0
4
+ data.tar.gz: f306ab70e7d0c09b6762518a45575cc6174da730
5
5
  SHA512:
6
- metadata.gz: d3bd6be62efd9948c33f9ead9efbb721a416a3273c403d6c81494f8fb0479e7abf531de4e92668e8ecf4426832466013de4f9225de3d3ead056b6772dbd1b813
7
- data.tar.gz: 3d01aa934c168838d056632917f8e8a58cd4d9e810b28f9a27d8d4ddd79db52049718eab57e937201fe5d4305e71b8638ef3c92ab1342342b5beb74b46dee87b
6
+ metadata.gz: a735e5313563172b76f9c86a28390755caaaf0f359c135743795f90f7c33df849cb041be3ebdb943101e4f46aefbc6d4ea2e1c6d5c564d43092974676d55614e
7
+ data.tar.gz: fd6438932dbab1676ceed16b454c746b4d2177f0651aff4ecc1205b392ce7663c894e0e4b4e6ca7435b6b85348921973733a225ed6e2ad910dde3b4a4b72e672
data/.gitignore CHANGED
@@ -3,3 +3,4 @@ coverage
3
3
  doc
4
4
  log
5
5
  *.lock
6
+ bin/
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## v2.5.0
4
+
5
+ - Add support for QQ Browser Mac & Mac Lite.
6
+ - Add support for Electron Framework.
7
+ - Add support for Facebook in-app browser.
8
+ - Add support for Otter Browser.
9
+ - Add Android webview detection.
10
+
3
11
  ## v2.4.0
4
12
 
5
13
  - Add Google Drive API, Proximic Spider, NewRelic pinger and SocialRank bots.
data/README.md CHANGED
@@ -25,7 +25,8 @@ browser = Browser.new("Some User Agent", accept_language: "en-us")
25
25
  browser.bot?
26
26
  browser.chrome?
27
27
  browser.core_media?
28
- browser.edge? # Newest MS browser
28
+ browser.edge? # Newest MS browser
29
+ browser.electron? # Electron Framework
29
30
  browser.firefox?
30
31
  browser.full_version
31
32
  browser.ie?
@@ -92,15 +93,16 @@ browser.platform.version # e.g. 9 (for iOS9)
92
93
  browser.platform.adobe_air?
93
94
  browser.platform.android?
94
95
  browser.platform.android?(4.2) # detect Android Jelly Bean 4.2
96
+ browser.platform.android_app? # detect webview in an Android app
97
+ browser.platform.android_webview? # alias for android_app?
95
98
  browser.platform.blackberry?
96
99
  browser.platform.blackberry?(10) # detect specific BlackBerry version
97
100
  browser.platform.chrome_os?
98
101
  browser.platform.firefox_os?
99
102
  browser.platform.ios? # detect iOS
100
103
  browser.platform.ios?(9) # detect specific iOS version
101
- browser.platform.ios_app?
102
- browser.platform.ios_webview?
103
- browser.platform.ios_webview? # request performed by ios' app webview
104
+ browser.platform.ios_app? # detect webview in an iOS app
105
+ browser.platform.ios_webview? # alias for ios_app?
104
106
  browser.platform.linux?
105
107
  browser.platform.mac?
106
108
  browser.platform.other?
@@ -207,7 +209,7 @@ language.name
207
209
  #=> "English/United States"
208
210
  ```
209
211
 
210
- Result is always sorted in quality order from highest -> lowest. As per the HTTP spec:
212
+ Result is always sorted in quality order from highest -> lowest. As per the HTTP spec:
211
213
 
212
214
  - omitting the quality value implies 1.0.
213
215
  - quality value equal to zero means that is not accepted by the client.
@@ -7,7 +7,7 @@ module Browser
7
7
  extend ActiveSupport::Concern
8
8
 
9
9
  included do
10
- helper_method :browser
10
+ helper_method(:browser) if respond_to?(:helper_method)
11
11
  end
12
12
 
13
13
  private
data/lib/browser/base.rb CHANGED
@@ -78,6 +78,18 @@ module Browser
78
78
  "0"
79
79
  end
80
80
 
81
+ # Detect if browser if Facebook.
82
+ def facebook?(expected_version = nil)
83
+ Facebook.new(ua).match? &&
84
+ detect_version?(full_version, expected_version)
85
+ end
86
+
87
+ # Detect if browser is Otter.
88
+ def otter?(expected_version = nil)
89
+ Otter.new(ua).match? &&
90
+ detect_version?(full_version, expected_version)
91
+ end
92
+
81
93
  # Detect if browser is WebKit-based.
82
94
  def webkit?(expected_version = nil)
83
95
  ua =~ /AppleWebKit/i &&
@@ -174,5 +186,10 @@ module Browser
174
186
  def proxy?
175
187
  nokia? || uc_browser? || opera_mini?
176
188
  end
189
+
190
+ # Detect if the browser is Electron.
191
+ def electron?(expected_version = nil)
192
+ Electron.new(ua).match? && detect_version?(full_version, expected_version)
193
+ end
177
194
  end
178
195
  end
@@ -23,6 +23,9 @@ require "browser/micro_messenger"
23
23
  require "browser/weibo"
24
24
  require "browser/qq"
25
25
  require "browser/alipay"
26
+ require "browser/electron"
27
+ require "browser/facebook"
28
+ require "browser/otter"
26
29
 
27
30
  require "browser/bot"
28
31
  require "browser/middleware"
@@ -50,9 +53,12 @@ module Browser
50
53
  Edge,
51
54
  InternetExplorer,
52
55
  Firefox,
56
+ Otter,
57
+ Facebook, # must be placed before Chrome and Safari
53
58
  Weibo, # must be placed before Chrome and Safari
54
59
  QQ, # must be placed before Chrome and Safari
55
60
  Alipay, # must be placed before Chrome and Safari
61
+ Electron, # must be placed before Chrome and Safari
56
62
  Chrome,
57
63
  Safari,
58
64
  MicroMessenger,
@@ -105,7 +105,6 @@ module Browser
105
105
  id == :ps4
106
106
  end
107
107
  alias_method :playstation4?, :ps4?
108
- alias_method :playstation4?, :ps4?
109
108
 
110
109
  def psp?
111
110
  id == :psp
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Browser
4
+ class Electron < Base
5
+ def id
6
+ :electron
7
+ end
8
+
9
+ def name
10
+ "Electron"
11
+ end
12
+
13
+ def full_version
14
+ ua[%r[Electron/([\d.]+)], 1] ||
15
+ "0.0"
16
+ end
17
+
18
+ def match?
19
+ ua =~ /Electron/
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Browser
4
+ class Facebook < Base
5
+ def id
6
+ :facebook
7
+ end
8
+
9
+ def name
10
+ "Facebook"
11
+ end
12
+
13
+ def full_version
14
+ ua[%r[FBAV/([\d.]+)], 1]
15
+ end
16
+
17
+ def match?
18
+ ua =~ /FBAV/
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Browser
4
+ class Otter < Base
5
+ def id
6
+ :otter
7
+ end
8
+
9
+ def name
10
+ "Otter"
11
+ end
12
+
13
+ def full_version
14
+ ua[%r[Otter/([\d.]+)], 1] || "0.0"
15
+ end
16
+
17
+ def match?
18
+ ua =~ /Otter/
19
+ end
20
+ end
21
+ end
@@ -127,6 +127,13 @@ module Browser
127
127
  ios_app?
128
128
  end
129
129
 
130
+ # Detect if in an Android app webview (Lollipop and newer)
131
+ # https://developer.chrome.com/multidevice/user-agent#webview_user_agent
132
+ def android_app?
133
+ android? && ua =~ /\bwv\b/
134
+ end
135
+ alias_method :android_webview?, :android_app?
136
+
130
137
  # http://msdn.microsoft.com/fr-FR/library/ms537503.aspx#PltToken
131
138
  def windows_xp?
132
139
  windows? && ua =~ /Windows NT 5\.[12]/
data/lib/browser/qq.rb CHANGED
@@ -12,6 +12,8 @@ module Browser
12
12
 
13
13
  def full_version
14
14
  ua[%r[(?:Mobile MQQBrowser)/([\d.]+)]i, 1] ||
15
+ ua[%r[(?:QQBrowserLite)/([\d.]+)]i, 1] ||
16
+ ua[%r[(?:QQBrowser)/([\d.]+)]i, 1] ||
15
17
  ua[%r[(?:QQ)/([\d.]+)]i, 1] ||
16
18
  "0.0"
17
19
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Browser
4
- VERSION = "2.4.0".freeze
4
+ VERSION = "2.5.0".freeze
5
5
  end
data/test/ua.yml CHANGED
@@ -1,4 +1,6 @@
1
1
  ADOBE_AIR: 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; de) AppleWebKit/533.19.4 (KHTML, like Gecko) AdobeAIR/13.0'
2
+ ALIPAY_ANDROID: "Mozilla/5.0 (Linux; U; Android 4.2.1; zh-cn; HUAWEI G610-T00 Build/HuaweiG610-T00) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 AlipayDefined(nt:WIFI,ws:360|640|1.5) AliApp(AP/9.0.1.073001) AlipayClient/9.0.1.073001 GCanvas/1.4.2.15"
3
+ ALIPAY_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 AliApp(AP/2.3.4) AlipayClient/2.3.4"
2
4
  ANDROID: 'Android SDK 1.5r3: Mozilla/5.0 (Linux; U; Android 1.5; de-; sdk Build/CUPCAKE) AppleWebkit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1'
3
5
  ANDROID_CUPCAKE: Mozilla/5.0 (Linux; U; Android 1.5; en-gb; T-Mobile G1 Build/CRC1) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1
4
6
  ANDROID_DONUT: Mozilla/5.0 (Linux; U; Android 1.6; ar-us; SonyEricssonX10i Build/R2BA026) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1
@@ -15,6 +17,7 @@ ANDROID_LOLLIPOP_50: Mozilla/5.0 (Linux; Android 5.0; Nexus 5 Build/LPX13D) Appl
15
17
  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
16
18
  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
17
19
  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
20
+ 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
18
21
  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'
19
22
  BLACKBERRY10: 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.1675 Mobile Safari/537.10+'
20
23
  BLACKBERRY4: 'BlackBerry8100/4.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/103'
@@ -26,6 +29,8 @@ CHROME: 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/53
26
29
  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.'
27
30
  COREMEDIA: 'Apple Mac OS X v10.6.4 CoreMedia v1.0.0.10F569'
28
31
  CUSTOM_APP: "Our App 0.0.1 (Linux; Android 4.0.3; HTC Ruby Build/IML74K; en_CA)"
32
+ 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"
33
+ 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]
29
34
  FIREFOX: 'Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8'
30
35
  FIREFOX_ANDROID: 'Mozilla/5.0 (Android; Mobile; rv:40.0) Gecko/40.0 Firefox/40.0'
31
36
  FIREFOX_IOS: 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) FxiOS/1.2 Mobile/13C75 Safari/601.1.46'
@@ -62,6 +67,7 @@ KINDLE_FIRE: 'Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Kindle Fire Build/GIN
62
67
  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'
63
68
  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'
64
69
  LUMIA800: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; XBLWP7; ZuneWP7'
70
+ MICRO_MESSENGER: 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13E238 MicroMessenger/6.3.15 NetType/3G+ Language/zh_CN'
65
71
  MIDP: MIDP-2.0
66
72
  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'
67
73
  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'
@@ -78,12 +84,17 @@ OPERA_ANDROID: 'Mozill/5.0 (Linux; Android 4.4.2; A1-810 Build/KOT49H) Apple/Web
78
84
  OPERA_MINI: 'Opera/9.80 (Android; Opera Mini/7.029952/28.2359;u; fr) Presto/2.8.119 Version/11.10'
79
85
  OPERA_MOBI: 'Opera/9.8 (Android 2.3.5; Linux; Opera Mobi/ADR-1205181138; U; en) Presto/2.10.254 Version/12.00'
80
86
  OPERA_NEXT: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.37 Safari/537.36 OPR/15.0.1147.44 (Edition Next)'
87
+ OTTER: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/602.1 (KHTML, like Gecko) Otter/0.9.91
81
88
  PHANTOM_JS: 'Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.0 Safari/534.34'
82
89
  PLAYBOOK: 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML, like Gecko) Version/7.2.1.0 Safari/536.2+'
83
90
  PLAYSTATION3: 'Mozilla/5.0 (PLAYSTATION 3; 3.55)'
84
91
  PLAYSTATION4: 'Mozilla/5.0 (PlayStation 4 1.020) AppleWebKit/536.26 (KHTML, like Gecko)'
85
92
  PSP: 'Mozilla/4.0 (PSP (PlayStation Portable); 2.00)'
86
93
  PSP_VITA: 'Mozilla/5.0 (Playstation Vita 1.61) AppleWebKit/531.22.8 (KHTML, like Gecko) Silk/3.2'
94
+ QQ_BROWSER_ANDROID: 'Mozilla/5.0 (Linux; Android 5.1.1; SM-N9108V Build/LMY47X) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile MQQBrowser/6.2 TBS/036222 Safari/537.36 V1_AND_SQ_6.2.0_320_YYB_D QQ/6.2.0.2655 NetType/WIFI WebP/0.3.0 Pixel/1440'
95
+ 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'
96
+ 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'
97
+ 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'
87
98
  QUICKTIME: 'QuickTime/7.6.8 (qtver=7.6.8;os=Windows NT 5.1Service Pack 3)'
88
99
  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'
89
100
  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'
@@ -102,12 +113,14 @@ SURFACE: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0;
102
113
  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'
103
114
  TABLOID: 'Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13'
104
115
  UC_BROWSER: 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-US; GT-I9500 Build/KOT49H) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/9.9.4.484 U3/0.8.0 Mobile Safari/533.1'
105
- WINDOWS_2000: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 5.0; Trident/6.0)'
106
- WINDOWS_2000_SP1: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 5.01; Trident/6.0)'
116
+ WEIBO_ANDROID: 'Mozilla/5.0 (Linux; Android 5.0.2; vivo X5M Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36 Weibo (vivo-vivo X5M__weibo__5.7.1__android__android5.0.2)'
117
+ WEIBO_IOS: 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12H143 Weibo (iPhone7,2__weibo__5.7.1__iphone__os8.4)'
118
+ WINDOWS10: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 10.0; Trident/6.0)'
107
119
  WINDOWS7: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) chromeframe/10.0.648.205'
108
120
  WINDOWS81: 'Mozilla/5.0 (IE 11.0; Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko'
109
121
  WINDOWS8: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'
110
- WINDOWS10: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 10.0; Trident/6.0)'
122
+ WINDOWS_2000: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 5.0; Trident/6.0)'
123
+ WINDOWS_2000_SP1: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 5.01; Trident/6.0)'
111
124
  WINDOWS_MOBILE: 'Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.12)'
112
125
  WINDOWS_PHONE8: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)'
113
126
  WINDOWS_PHONE: 'Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; DELL; Venue Pro)'
@@ -120,10 +133,3 @@ XBOX360: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; Xbox),
120
133
  XBOXONE: 'Mozilla/5.0 (Compatible; MSIE 10.0; Windows NT 6.2; Trident /6.0; Xbox; Xbox One)'
121
134
  XOOM: 'Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13'
122
135
  YANDEX_BROWSER: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 YaBrowser/15.4.2272.3909 (beta) Yowser/2.0 Safari/537.36'
123
- MICRO_MESSENGER: 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13E238 MicroMessenger/6.3.15 NetType/3G+ Language/zh_CN'
124
- WEIBO_IOS: 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12H143 Weibo (iPhone7,2__weibo__5.7.1__iphone__os8.4)'
125
- WEIBO_ANDROID: 'Mozilla/5.0 (Linux; Android 5.0.2; vivo X5M Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36 Weibo (vivo-vivo X5M__weibo__5.7.1__android__android5.0.2)'
126
- 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'
127
- QQ_BROWSER_ANDROID: 'Mozilla/5.0 (Linux; Android 5.1.1; SM-N9108V Build/LMY47X) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile MQQBrowser/6.2 TBS/036222 Safari/537.36 V1_AND_SQ_6.2.0_320_YYB_D QQ/6.2.0.2655 NetType/WIFI WebP/0.3.0 Pixel/1440'
128
- ALIPAY_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 AliApp(AP/2.3.4) AlipayClient/2.3.4"
129
- ALIPAY_ANDROID: "Mozilla/5.0 (Linux; U; Android 4.2.1; zh-cn; HUAWEI G610-T00 Build/HuaweiG610-T00) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 AlipayDefined(nt:WIFI,ws:360|640|1.5) AliApp(AP/9.0.1.073001) AlipayClient/9.0.1.073001 GCanvas/1.4.2.15"
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class AndroidAppTest < Minitest::Test
6
+ let(:browser) { Browser.new(Browser["ANDROID_WEBVIEW"]) }
7
+
8
+ test "detect as android" do
9
+ assert browser.platform.android?
10
+ end
11
+
12
+ test "detect as webview" do
13
+ assert browser.platform.android_webview?
14
+ end
15
+
16
+ test "non-webviews do not detect as webview" do
17
+ %w[
18
+ ANDROID_CUPCAKE
19
+ ANDROID_DONUT
20
+ ANDROID_ECLAIR_21
21
+ ANDROID_FROYO
22
+ ANDROID_GINGERBREAD
23
+ ANDROID_HONEYCOMB_30
24
+ ANDROID_ICECREAM
25
+ ANDROID_JELLYBEAN_41
26
+ ANDROID_JELLYBEAN_42
27
+ ANDROID_JELLYBEAN_43
28
+ ANDROID_KITKAT
29
+ ANDROID_LOLLIPOP_50
30
+ ANDROID_LOLLIPOP_51
31
+ ANDROID_TV
32
+ ANDROID_NEXUS_PLAYER
33
+ FIREFOX_ANDROID
34
+ ].each do |android_type|
35
+ refute Browser.new(Browser[android_type]).platform.android_webview?
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class ElectronTest < Minitest::Test
6
+ test "detect electron" do
7
+ browser = Browser.new(Browser["ELECTRON"])
8
+
9
+ assert_equal "Electron", browser.name
10
+ assert browser.electron?
11
+ assert_equal :electron, browser.id
12
+ assert_equal "1.4.12", browser.full_version
13
+ end
14
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class FacebookTest < Minitest::Test
6
+ test "detects facebook" do
7
+ browser = Browser.new(Browser["FACEBOOK"])
8
+
9
+ assert_equal "Facebook", browser.name
10
+ assert browser.facebook?
11
+ assert :facebook, browser.id
12
+ assert_equal "135.0.0.45.90", browser.full_version
13
+ assert_equal "135", browser.version
14
+ end
15
+
16
+ test "detects version by range" do
17
+ browser = Browser.new(Browser["FACEBOOK"])
18
+ assert browser.facebook?(%w[>=135])
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class OtterBrowserTest < Minitest::Test
6
+ test "detects Otter Browser" do
7
+ browser = Browser.new(Browser["OTTER"])
8
+
9
+ assert browser.otter?
10
+ assert_equal "Otter", browser.name
11
+ assert_equal :otter, browser.id
12
+ assert_equal "0.9.91", browser.full_version
13
+ assert_equal "0", browser.version
14
+ end
15
+
16
+ test "detects version by range" do
17
+ browser = Browser.new(Browser["OTTER"])
18
+ assert browser.otter?(%w[=0.9.91])
19
+ end
20
+ end
data/test/unit/qq_test.rb CHANGED
@@ -18,4 +18,20 @@ class QQTest < Minitest::Test
18
18
  assert_equal "QQ Browser", browser.name
19
19
  assert_equal :qq, browser.id
20
20
  end
21
+
22
+ test "detects QQ browser for Mac" do
23
+ browser = Browser.new(Browser["QQ_BROWSER_MAC"])
24
+
25
+ assert_equal "4.2.4753.400", browser.full_version
26
+ assert_equal "QQ Browser", browser.name
27
+ assert_equal :qq, browser.id
28
+ end
29
+
30
+ test "detects QQ browser lite for Mac" do
31
+ browser = Browser.new(Browser["QQ_BROWSER_MAC_LITE"])
32
+
33
+ assert_equal "1.0.4", browser.full_version
34
+ assert_equal "QQ Browser", browser.name
35
+ assert_equal :qq, browser.id
36
+ end
21
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: browser
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Vieira
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-10 00:00:00.000000000 Z
11
+ date: 2017-08-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -204,6 +204,8 @@ files:
204
204
  - lib/browser/device/xbox_360.rb
205
205
  - lib/browser/device/xbox_one.rb
206
206
  - lib/browser/edge.rb
207
+ - lib/browser/electron.rb
208
+ - lib/browser/facebook.rb
207
209
  - lib/browser/firefox.rb
208
210
  - lib/browser/generic.rb
209
211
  - lib/browser/internet_explorer.rb
@@ -228,6 +230,7 @@ files:
228
230
  - lib/browser/middleware/context/url_methods.rb
229
231
  - lib/browser/nokia.rb
230
232
  - lib/browser/opera.rb
233
+ - lib/browser/otter.rb
231
234
  - lib/browser/phantom_js.rb
232
235
  - lib/browser/platform.rb
233
236
  - lib/browser/platform/adobe_air.rb
@@ -263,6 +266,7 @@ files:
263
266
  - test/unit/adobe_air_test.rb
264
267
  - test/unit/aliases_test.rb
265
268
  - test/unit/alipay_test.rb
269
+ - test/unit/android_app_test.rb
266
270
  - test/unit/android_test.rb
267
271
  - test/unit/blackberry_test.rb
268
272
  - test/unit/bots_test.rb
@@ -270,6 +274,8 @@ files:
270
274
  - test/unit/console_test.rb
271
275
  - test/unit/device_test.rb
272
276
  - test/unit/edge_test.rb
277
+ - test/unit/electron_test.rb
278
+ - test/unit/facebook_test.rb
273
279
  - test/unit/firefox_test.rb
274
280
  - test/unit/generic_test.rb
275
281
  - test/unit/internet_explorer_test.rb
@@ -280,6 +286,7 @@ files:
280
286
  - test/unit/micro_messenger_test.rb
281
287
  - test/unit/nokia_test.rb
282
288
  - test/unit/opera_test.rb
289
+ - test/unit/otter_test.rb
283
290
  - test/unit/platform_test.rb
284
291
  - test/unit/proxy_test.rb
285
292
  - test/unit/qq_test.rb
@@ -325,6 +332,7 @@ test_files:
325
332
  - test/unit/adobe_air_test.rb
326
333
  - test/unit/aliases_test.rb
327
334
  - test/unit/alipay_test.rb
335
+ - test/unit/android_app_test.rb
328
336
  - test/unit/android_test.rb
329
337
  - test/unit/blackberry_test.rb
330
338
  - test/unit/bots_test.rb
@@ -332,6 +340,8 @@ test_files:
332
340
  - test/unit/console_test.rb
333
341
  - test/unit/device_test.rb
334
342
  - test/unit/edge_test.rb
343
+ - test/unit/electron_test.rb
344
+ - test/unit/facebook_test.rb
335
345
  - test/unit/firefox_test.rb
336
346
  - test/unit/generic_test.rb
337
347
  - test/unit/internet_explorer_test.rb
@@ -342,6 +352,7 @@ test_files:
342
352
  - test/unit/micro_messenger_test.rb
343
353
  - test/unit/nokia_test.rb
344
354
  - test/unit/opera_test.rb
355
+ - test/unit/otter_test.rb
345
356
  - test/unit/platform_test.rb
346
357
  - test/unit/proxy_test.rb
347
358
  - test/unit/qq_test.rb