browser 2.4.0 → 2.5.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 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