browser 2.0.3 → 2.1.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: 3a1b14e0741db49c503fcd83bf58203f643538b7
4
- data.tar.gz: a556e47aed22b522f909d3b5a4b715d73a131287
3
+ metadata.gz: ec8732c321a4cf1e50c785d07a242a87e03d599e
4
+ data.tar.gz: 7c2632f4db32249d9b3411b7d8c99c24d3ae2ade
5
5
  SHA512:
6
- metadata.gz: 561cc37a9c7184d528cbcb72106d0542fa4f568489354b747a6c8351a72b1ddb3129e2742aa8d38eac6625bc5758bdefef7ca413202e04f10f7ce6586717a78d
7
- data.tar.gz: a15cc2f64759a2ed6078afdafe49966d464166e0997c9e3c887eb744a6fa0a8d370ea732cf7e87c4edf82b1f778b9d4eb3ec23bb5274ed2652511608b12763d0
6
+ metadata.gz: aa5e391f8d1ad5deed626581151df145f55ad6f2509592bb591ccf41f3446c0f4a249aa4e38dcfad53612c8a0caec7aafb94f685b1413bc3697bca8c9fd9777e
7
+ data.tar.gz: ce44b976d82b7d8ac431fc5333eaf43b5a7141658308b7c549cf56d13ccd64a20fb35738dd84078f1a83cf277ec6e14621971cc5fa2fc1fc25157768353122bb
@@ -2,12 +2,15 @@ language: ruby
2
2
  sudo: false
3
3
  cache: bundler
4
4
  rvm:
5
- - '2.2'
6
- - '2.1'
7
- - '2.0'
5
+ - '2.3.1'
6
+ - '2.2'
7
+ - '2.1'
8
8
  gemfile:
9
- - Gemfile
10
- - gemfiles/rails3.gemfile
11
- script: "bundle exec rake"
9
+ - Gemfile
10
+ - gemfiles/rails3.gemfile
11
+ script: bundle exec rake
12
12
  notifications:
13
13
  email: false
14
+ env:
15
+ global:
16
+ secure: egPPk/jMVzOoZGkk8jcf1f1N++oI4p4hqtk53T2kpHChxpmR8sP/oFlAhebvqMhM8svbQx+lWTvdxPDj9GBQGsC4ekqubV6S0MNJQS4/F41PSEU+DFUzNU1PHiDO+/0AbIheTj15UIt8IC4NVaM236HuSdMDWOjVI3ydBsgJ/GY=
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## v2.1.0
4
+
5
+ - Add PrivacyAwareBot, ltx71, Squider and Traackr to bots.
6
+ - Match Google Structured Data alternative bot.
7
+ - Match MicroMessenger (WeChat).
8
+ - Match Weibo.
9
+ - Detect Windows & Mac OS versions.
10
+
11
+ ## v2.0.3
12
+
13
+ - Fix issue with version detection when no actual version is provided (i.e. the user agent doesn't have any version information).
14
+
3
15
  ## v2.0.2
4
16
 
5
17
  - Fix issue when user agent is set to `nil`.
data/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # Browser
2
2
 
3
3
  [![Travis-CI](https://travis-ci.org/fnando/browser.png)](https://travis-ci.org/fnando/browser)
4
- [![CodeClimate](https://codeclimate.com/github/fnando/browser.png)](https://codeclimate.com/github/fnando/browser)
4
+ [![Code Climate](https://codeclimate.com/github/fnando/browser/badges/gpa.svg)](https://codeclimate.com/github/fnando/browser)
5
+ [![Test Coverage](https://codeclimate.com/github/fnando/browser/badges/coverage.svg)](https://codeclimate.com/github/fnando/browser/coverage)
5
6
  [![Gem](https://img.shields.io/gem/v/browser.svg)](https://rubygems.org/gems/browser)
6
7
  [![Gem](https://img.shields.io/gem/dt/browser.svg)](https://rubygems.org/gems/browser)
7
8
 
@@ -47,6 +48,8 @@ browser.version # major version number
47
48
  browser.webkit?
48
49
  browser.webkit_full_version
49
50
  browser.yandex?
51
+ browser.wechat? # detect the MicroMessenger(WeChat)
52
+ browser.weibo? # detect Weibo embedded browser (Sina Weibo)
50
53
 
51
54
  # Get bot info
52
55
  browser.bot.name
@@ -181,7 +184,10 @@ language.name
181
184
  #=> "English/United States"
182
185
  ```
183
186
 
184
- Result is always sorted in quality order from highest -> lowest. as per the HTTP spec, omitting the quality value implies 1.0.
187
+ Result is always sorted in quality order from highest -> lowest. As per the HTTP spec:
188
+
189
+ - omitting the quality value implies 1.0.
190
+ - quality value equal to zero means that is not accepted by the client.
185
191
 
186
192
  ### Internet Explorer
187
193
 
data/bots.yml CHANGED
@@ -68,6 +68,8 @@ gimmeusabot: "Gimme60 (gimme60.com)"
68
68
  go http package: "Go http library"
69
69
  google page speed insights: "Google Page Speed Insights"
70
70
  google Web Preview: "Google Instant Previews crawler"
71
+ google-structured-data-testing-tool: "Google-StructuredDataTestingTool"
72
+ google-structureddatatestingtool: "Google-StructuredDataTestingTool"
71
73
  googlebot: "Google Bot"
72
74
  grapeshotcrawler: "GrapeshotCrawler"
73
75
  gravitybot: "Gravity Bot"
@@ -108,6 +110,7 @@ lipperhey: "Lipperhey"
108
110
  livelapbot: "Livelapbot"
109
111
  loadtimebot: "Load Time Bot"
110
112
  longurl: "URL expander service"
113
+ ltx71: "ltx71.com"
111
114
  lumibot: "Lumibot"
112
115
  lwp-trivial: "Another Perl library"
113
116
  magpie-crawler: "magpie-crawler"
@@ -121,6 +124,7 @@ mfe_expand: "Mcafee spider"
121
124
  mir web crawler: "MIR web crawler"
122
125
  mj12bot: "Majestic-12 spider"
123
126
  mojeekbot: "Mojeek UK search crawler"
127
+ mrchrome: "MrChrome"
124
128
  ms search 6.0 robot: "MS Search 6.0 Robot"
125
129
  msnbot: "Microsoft bot"
126
130
  nerdybot: "NerdyBot"
@@ -144,6 +148,7 @@ phantomjs: "PhantomJS"
144
148
  pingdom: "Pingdom monitoring"
145
149
  pinterest: "Pinterest"
146
150
  plukkie: "botje.com/plukkie.htm"
151
+ privacyawarebot: "PrivacyAwareBot"
147
152
  psbot-page: "Picsearch"
148
153
  publiclibraryarchive.org: "publiclibraryarchive.org"
149
154
  pycurl: "Python http library"
@@ -182,10 +187,11 @@ spbot: "OpenLinkProfiler"
182
187
  spider: "generic web spider"
183
188
  spinn3r: "Spinn3r aggregator"
184
189
  sputnikbot: "SputnikBot"
190
+ squider: "Squider"
185
191
  statuscake: "StatusCake"
186
- structureddatatestingtool: 'Google-StructuredDataTestingTool'
187
192
  test certificate info: "C http library?"
188
193
  tineye: "TinEye Bot"
194
+ traackr: "Traackr Bot"
189
195
  trendictionbot: "Trendiction Search"
190
196
  turnitinbot: "TurnitinBot"
191
197
  tweetedtimes: "The Tweeted Times"
@@ -223,4 +229,3 @@ zelist.ro: "feed parser"
223
229
  zibb: "ZIBB spider"
224
230
  zitebot: "Zite"
225
231
  zyborg: "Zyborg"
226
- mrchrome: "MrChrome"
@@ -27,4 +27,5 @@ Gem::Specification.new do |s|
27
27
  s.add_development_dependency "minitest-utils"
28
28
  s.add_development_dependency "pry-meta"
29
29
  s.add_development_dependency "minitest-autotest"
30
+ s.add_development_dependency "codeclimate-test-reporter"
30
31
  end
@@ -17,6 +17,8 @@ require "browser/generic"
17
17
  require "browser/phantom_js"
18
18
  require "browser/uc_browser"
19
19
  require "browser/nokia"
20
+ require "browser/micro_messenger"
21
+ require "browser/weibo"
20
22
 
21
23
  require "browser/bot"
22
24
  require "browser/middleware"
@@ -91,8 +93,10 @@ module Browser
91
93
  Edge,
92
94
  InternetExplorer,
93
95
  Firefox,
96
+ Weibo, # must be placed before Chrome and Safari
94
97
  Chrome,
95
98
  Safari,
99
+ MicroMessenger,
96
100
  Generic
97
101
  ]
98
102
  end
@@ -125,11 +129,4 @@ module Browser
125
129
  .map {|klass| klass.new(user_agent || EMPTY_STRING, **kwargs) }
126
130
  .find(&:match?)
127
131
  end
128
-
129
- private
130
-
131
- def deprecate(message)
132
- offender = caller[1].to_s[/^(.*?\.rb:\d+).*?$/, 1]
133
- $stderr << "\n#{message} (called from #{offender})\n"
134
- end
135
132
  end
@@ -12,6 +12,7 @@ module Browser
12
12
  .split(",")
13
13
  .map {|string| string.squeeze(" ").strip }
14
14
  .map {|part| new(part) }
15
+ .reject {|al| al.quality.zero? }
15
16
  .sort_by(&:quality)
16
17
  .reverse
17
18
  end
@@ -42,7 +43,14 @@ module Browser
42
43
  end
43
44
 
44
45
  def quality
45
- @quality ||= Float(part[/;q=([\d.]+)/, 1] || 1.0)
46
+ @quality ||= Float(quality_value || 1.0)
47
+ end
48
+
49
+ private
50
+
51
+ def quality_value
52
+ qvalue = part[/;q=([\d.]+)/, 1]
53
+ qvalue =~ /\A0\.0?\z/ ? "0.0" : qvalue
46
54
  end
47
55
  end
48
56
  end
@@ -136,6 +136,17 @@ module Browser
136
136
  Nokia.new(ua).match?
137
137
  end
138
138
 
139
+ # Detect if browser is MicroMessenger.
140
+ def micro_messenger?
141
+ MicroMessenger.new(ua).match?
142
+ end
143
+
144
+ alias_method :wechat?, :micro_messenger?
145
+
146
+ def weibo?
147
+ Weibo.new(ua).match?
148
+ end
149
+
139
150
  # Detect if browser is Opera Mini.
140
151
  def opera_mini?
141
152
  ua =~ /Opera Mini/
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+ module Browser
3
+ class MicroMessenger < Base
4
+ def id
5
+ :micro_messenger
6
+ end
7
+
8
+ def name
9
+ "MicroMessenger"
10
+ end
11
+
12
+ def full_version
13
+ ua[%r[(?:MicroMessenger)/([\d.]+)]i, 1] || "0.0"
14
+ end
15
+
16
+ def match?
17
+ ua =~ /MicroMessenger/i
18
+ end
19
+ end
20
+ end
@@ -7,7 +7,7 @@ module Browser
7
7
  end
8
8
 
9
9
  def version
10
- ua[%r[AdobeAIR/([\d.]+)]]
10
+ ua[%r[AdobeAIR/([\d.]+)], 1]
11
11
  end
12
12
 
13
13
  def name
@@ -3,7 +3,7 @@ module Browser
3
3
  class Platform
4
4
  class Mac < Base
5
5
  def version
6
- "0"
6
+ ua[/Mac OS X\s*([0-9_\.]+)?/, 1].gsub("_", ".")
7
7
  end
8
8
 
9
9
  def name
@@ -3,7 +3,7 @@ module Browser
3
3
  class Platform
4
4
  class Windows < Base
5
5
  def version
6
- "0"
6
+ ua[/Windows NT\s*([0-9_\.]+)?/, 1] || "0"
7
7
  end
8
8
 
9
9
  def name
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Browser
3
- VERSION = "2.0.3"
3
+ VERSION = "2.1.0"
4
4
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+ module Browser
3
+ class Weibo < Base
4
+ def id
5
+ :weibo
6
+ end
7
+
8
+ def name
9
+ "Weibo"
10
+ end
11
+
12
+ def full_version
13
+ ua[%r[(?:__weibo__)([\d.]+)]i, 1] || "0.0"
14
+ end
15
+
16
+ def match?
17
+ ua =~ /__weibo__/i
18
+ end
19
+ end
20
+ end
@@ -88,6 +88,7 @@ class BrowserTest < Minitest::Test
88
88
  browser = Browser.new(Browser["PHANTOM_JS"])
89
89
 
90
90
  assert_equal "PhantomJS", browser.name
91
+ assert_equal :phantom_js, browser.id
91
92
  assert browser.phantom_js?
92
93
  assert browser.modern?
93
94
  assert_equal "1.9.0", browser.full_version
@@ -1,4 +1,7 @@
1
1
  # frozen_string_literal: true
2
+ require "codeclimate-test-reporter"
3
+ CodeClimate::TestReporter.start
4
+
2
5
  ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__)
3
6
  require "bundler/setup"
4
7
  require "minitest/autorun"
@@ -101,9 +101,12 @@ SURFACE: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0;
101
101
  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'
102
102
  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'
103
103
  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'
104
+ WINDOWS_2000: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 5.0; Trident/6.0)'
105
+ WINDOWS_2000_SP1: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 5.01; Trident/6.0)'
104
106
  WINDOWS7: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) chromeframe/10.0.648.205'
105
107
  WINDOWS81: 'Mozilla/5.0 (IE 11.0; Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko'
106
108
  WINDOWS8: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'
109
+ WINDOWS10: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 10.0; Trident/6.0)'
107
110
  WINDOWS_MOBILE: 'Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.12)'
108
111
  WINDOWS_PHONE8: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)'
109
112
  WINDOWS_PHONE: 'Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; DELL; Venue Pro)'
@@ -116,3 +119,6 @@ XBOX360: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; Xbox),
116
119
  XBOXONE: 'Mozilla/5.0 (Compatible; MSIE 10.0; Windows NT 6.2; Trident /6.0; Xbox; Xbox One)'
117
120
  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'
118
121
  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'
122
+ 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'
123
+ 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)'
124
+ 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)'
@@ -10,18 +10,23 @@ FACEBOOK_BOT: 'facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uat
10
10
  GOOGLE_BOT: 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'
11
11
  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'
12
12
  GOOGLE_STRUCTURED_DATA_TESTING_TOOL: 'Mozilla/5.0 (compatible; X11; Linux x86_64; Google-StructuredDataTestingTool; +http://www.google.com/webmasters/tools/richsnippets)'
13
+ GOOGLE_STRUCTURED_DATA_TESTING_TOOL2: 'Mozilla/5.0 (compatible; Google-Structured-Data-Testing-Tool +http://developers.google.com/structured-data/testing-tool/)'
13
14
  GRAPESHOT: 'Mozilla/5.0 (compatible; GrapeshotCrawler/2.0; +http://www.grapeshot.co.uk/crawler.php)'
14
15
  LINKDEXBOT: 'Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)'
15
16
  LOAD_TIME_BOT: 'Mozilla/5.0 (compatible; LoadTimeBot/0.9; +http://www.loadtime.net/bot.html)'
17
+ LTX71: 'ltx71 - (http://ltx71.com/)'
16
18
  MAIL_RU: 'Mozilla/5.0 (compatible; Linux x86_64; Mail.RU_Bot/2.0; +http://go.mail.ru/help/robots)'
17
19
  MEGAINDEX_RU: 'Mozilla/5.0 (compatible; MegaIndex.ru/2.0; +https://www.megaindex.ru/?tab=linkAnalyze)'
18
20
  MRCHROME: 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.107 Amigo/45.0.2454.107 MRCHROME SOC Safari/537.36'
19
21
  MSN_BOT: 'msnbot-media/1.1 (+http://search.msn.com/msnbot.htm)'
22
+ PRIVACYAWAREBOT: 'Mozilla/5.0 (compatible; PrivacyAwareBot/1.1; +http://www.privacyaware.org)'
20
23
  QUERYSEEKER: 'QuerySeekerSpider ( http://queryseeker.com/bot.html )'
21
24
  SCRAPY: 'Scrapy/0.18.4 (+http://scrapy.org)'
22
25
  SEOKICKS: 'Mozilla/5.0 (compatible; SEOkicks-Robot; +http://www.seokicks.de/robot.html)'
23
26
  SISTRIX: 'Mozilla/5.0 (compatible; SISTRIX Crawler; http://crawler.sistrix.net/)'
27
+ 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'
24
28
  TINEYE: 'TinEye-bot/0.51 (see http://www.tineye.com/crawler.html)'
29
+ TRAACKR: 'Traackr.com'
25
30
  YAHOO_SLURP: 'Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)'
26
31
  YANDEX_DIRECT: 'Mozilla/5.0 (compatible; YandexDirect/3.0; +http://yandex.com/bots)'
27
32
  YANDEX_METRIKA: 'Mozilla/5.0 (compatible; YandexMetrika/3.0; +http://yandex.com/bots)'
@@ -90,4 +90,13 @@ class AcceptLanguageTest < Minitest::Test
90
90
  assert_language result[3], code: "en", region: nil, quality: 0.4
91
91
  assert_language result[4], code: "fr", region: nil, quality: 0.2
92
92
  end
93
+
94
+ test "rejects quality values equals to zero (#241)" do
95
+ result = Browser::AcceptLanguage.parse("de-DE,ru;q=0.9,de;q=0.8,en;q=0.")
96
+
97
+ assert_equal 3, result.size
98
+ assert_language result[0], code: "de", region: "DE", quality: 1.0
99
+ assert_language result[1], code: "ru", region: nil, quality: 0.9
100
+ assert_language result[2], code: "de", region: nil, quality: 0.8
101
+ end
93
102
  end
@@ -9,5 +9,7 @@ class AdobeAirTest < Minitest::Test
9
9
  assert_equal "0", browser.version
10
10
  assert_equal "0.0", browser.full_version
11
11
  assert_equal "Generic Browser", browser.name
12
+ assert_equal "Adobe AIR", browser.platform.name
13
+ assert_equal "13.0", browser.platform.version
12
14
  end
13
15
  end
@@ -74,6 +74,7 @@ class DeviceTest < Minitest::Test
74
74
 
75
75
  assert device.console?
76
76
  assert device.xbox?
77
+ assert device.xbox_360?
77
78
  refute device.xbox_one?
78
79
  assert_equal :xbox_360, device.id
79
80
  assert_equal "Xbox 360", device.name
@@ -85,6 +86,7 @@ class DeviceTest < Minitest::Test
85
86
  assert device.console?
86
87
  assert device.xbox?
87
88
  assert device.xbox_one?
89
+ refute device.xbox_360?
88
90
  assert_equal :xbox_one, device.id
89
91
  assert_equal "Xbox One", device.name
90
92
  end
@@ -169,6 +171,13 @@ class DeviceTest < Minitest::Test
169
171
  assert_equal "TV", device.name
170
172
  end
171
173
 
174
+ test "detect unknown device" do
175
+ device = Browser::Device.new("")
176
+
177
+ assert device.unknown?
178
+ assert_equal "Unknown", device.name
179
+ end
180
+
172
181
  %w[
173
182
  ANDROID
174
183
  SYMBIAN
@@ -0,0 +1,22 @@
1
+ require "test_helper"
2
+
3
+ class GenericTest < Minitest::Test
4
+ test "return default msie version" do
5
+ browser = Browser.new("")
6
+
7
+ assert_equal "0.0", browser.msie_full_version
8
+ assert_equal "0", browser.msie_version
9
+ end
10
+
11
+ test "return default compatibility view" do
12
+ browser = Browser.new("")
13
+
14
+ refute browser.compatibility_view?
15
+ end
16
+
17
+ test "return default safari web app mode" do
18
+ browser = Browser.new("")
19
+
20
+ refute browser.safari_webapp_mode?
21
+ end
22
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+ require "test_helper"
3
+
4
+ class MicroMessengerTest < Minitest::Test
5
+ test "detects micro messenger 6.3.15" do
6
+ browser = Browser.new(Browser["MICRO_MESSENGER"])
7
+
8
+ assert browser.micro_messenger?
9
+ assert browser.wechat?
10
+ assert_equal "6.3.15", browser.full_version
11
+ assert_equal "MicroMessenger", browser.name
12
+ assert_equal :micro_messenger, browser.id
13
+ end
14
+ end
@@ -72,7 +72,7 @@ class PlatformTest < Minitest::Test
72
72
  assert_equal "Macintosh", platform.name
73
73
  assert_equal :mac, platform.id
74
74
  assert platform.mac?
75
- assert_equal "0", platform.version
75
+ assert_equal "10.6.4", platform.version
76
76
  end
77
77
 
78
78
  test "detect firefox os" do
@@ -64,4 +64,22 @@ class SafariTest < Minitest::Test
64
64
  assert_equal "9", browser.version
65
65
  assert_equal "9.0.2", browser.full_version
66
66
  end
67
+
68
+ test "detect web app mode" do
69
+ browser = Browser.new(Browser["SAFARI_IPHONE_WEBAPP_MODE"])
70
+
71
+ assert browser.safari_webapp_mode?
72
+ end
73
+
74
+ test "reject regular safari as web app mode" do
75
+ browser = Browser.new(Browser["SAFARI9"])
76
+
77
+ refute browser.safari_webapp_mode?
78
+ end
79
+
80
+ test "returns webkit version" do
81
+ browser = Browser.new(Browser["SAFARI9"])
82
+
83
+ assert_equal "601.3.9", browser.webkit_full_version
84
+ end
67
85
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+ require "test_helper"
3
+
4
+ class MicroMessengerTest < Minitest::Test
5
+ test "detects weibo iOS" do
6
+ browser = Browser.new(Browser["WEIBO_IOS"])
7
+ assert browser.weibo?
8
+ assert_equal "Weibo", browser.name
9
+ assert_equal "5.7.1", browser.full_version
10
+ end
11
+
12
+ test "detects weibo Android" do
13
+ browser = Browser.new(Browser["WEIBO_ANDROID"])
14
+ assert browser.weibo?
15
+ assert_equal "Weibo", browser.name
16
+ assert_equal "5.7.1", browser.full_version
17
+ end
18
+ end
@@ -7,6 +7,7 @@ class WindowsTest < Minitest::Test
7
7
  assert browser.platform.windows_x64?
8
8
  refute browser.platform.windows_wow64?
9
9
  assert browser.platform.windows_x64_inclusive?
10
+ assert_equal browser.platform.version, "6.2"
10
11
  end
11
12
 
12
13
  test "detects windows wow64" do
@@ -14,6 +15,21 @@ class WindowsTest < Minitest::Test
14
15
  refute browser.platform.windows_x64?
15
16
  assert browser.platform.windows_wow64?
16
17
  assert browser.platform.windows_x64_inclusive?
18
+ assert_equal browser.platform.version, "6.3"
19
+ end
20
+
21
+ test "detects windows_2000" do
22
+ browser = Browser.new(Browser["WINDOWS_2000"])
23
+
24
+ assert browser.platform.windows?
25
+ assert_equal browser.platform.version, "5.0"
26
+ end
27
+
28
+ test "detects windows_2000_sp1" do
29
+ browser = Browser.new(Browser["WINDOWS_2000_SP1"])
30
+
31
+ assert browser.platform.windows?
32
+ assert_equal browser.platform.version, "5.01"
17
33
  end
18
34
 
19
35
  test "detects windows_xp" do
@@ -21,6 +37,7 @@ class WindowsTest < Minitest::Test
21
37
 
22
38
  assert browser.platform.windows?
23
39
  assert browser.platform.windows_xp?
40
+ assert_equal browser.platform.version, "5.1"
24
41
  end
25
42
 
26
43
  test "detects windows_xp (64-bit)" do
@@ -29,6 +46,7 @@ class WindowsTest < Minitest::Test
29
46
  assert browser.platform.windows?
30
47
  assert browser.platform.windows_xp?
31
48
  assert browser.platform.windows_x64?
49
+ assert_equal browser.platform.version, "5.2"
32
50
  end
33
51
 
34
52
  test "detects windows_vista" do
@@ -36,6 +54,7 @@ class WindowsTest < Minitest::Test
36
54
 
37
55
  assert browser.platform.windows?
38
56
  assert browser.platform.windows_vista?
57
+ assert_equal browser.platform.version, "6.0"
39
58
  end
40
59
 
41
60
  test "detects windows7" do
@@ -43,6 +62,7 @@ class WindowsTest < Minitest::Test
43
62
 
44
63
  assert browser.platform.windows?
45
64
  assert browser.platform.windows7?
65
+ assert_equal browser.platform.version, "6.1"
46
66
  end
47
67
 
48
68
  test "detects windows8" do
@@ -51,6 +71,7 @@ class WindowsTest < Minitest::Test
51
71
  assert browser.platform.windows?
52
72
  assert browser.platform.windows8?
53
73
  refute browser.platform.windows8_1?
74
+ assert_equal browser.platform.version, "6.2"
54
75
  end
55
76
 
56
77
  test "detects windows8.1" do
@@ -59,5 +80,19 @@ class WindowsTest < Minitest::Test
59
80
  assert browser.platform.windows?
60
81
  assert browser.platform.windows8?
61
82
  assert browser.platform.windows8_1?
83
+ assert_equal browser.platform.version, "6.3"
84
+ end
85
+
86
+ test "detects windows10" do
87
+ browser = Browser.new(Browser["WINDOWS10"])
88
+
89
+ assert browser.platform.windows?
90
+ assert browser.platform.windows10?
91
+ assert_equal browser.platform.version, "10.0"
92
+ end
93
+
94
+ test "returns name" do
95
+ browser = Browser.new(Browser["WINDOWS8"])
96
+ assert_equal "Windows", browser.platform.name
62
97
  end
63
98
  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.0.3
4
+ version: 2.1.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: 2016-03-28 00:00:00.000000000 Z
11
+ date: 2016-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: codeclimate-test-reporter
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  description: Do some browser detection with Ruby.
126
140
  email:
127
141
  - fnando.vieira@gmail.com
@@ -190,6 +204,7 @@ files:
190
204
  - lib/browser/meta/safari.rb
191
205
  - lib/browser/meta/tablet.rb
192
206
  - lib/browser/meta/webkit.rb
207
+ - lib/browser/micro_messenger.rb
193
208
  - lib/browser/middleware.rb
194
209
  - lib/browser/middleware/context.rb
195
210
  - lib/browser/middleware/context/additions.rb
@@ -216,6 +231,7 @@ files:
216
231
  - lib/browser/testing.rb
217
232
  - lib/browser/uc_browser.rb
218
233
  - lib/browser/version.rb
234
+ - lib/browser/weibo.rb
219
235
  - search_engines.yml
220
236
  - test/browser_test.rb
221
237
  - test/middleware_test.rb
@@ -234,17 +250,20 @@ files:
234
250
  - test/unit/console_test.rb
235
251
  - test/unit/device_test.rb
236
252
  - test/unit/firefox_test.rb
253
+ - test/unit/generic_test.rb
237
254
  - test/unit/ie_test.rb
238
255
  - test/unit/ios_app_test.rb
239
256
  - test/unit/ios_test.rb
240
257
  - test/unit/kindle_test.rb
241
258
  - test/unit/meta_test.rb
259
+ - test/unit/micro_messenger_test.rb
242
260
  - test/unit/nokia_test.rb
243
261
  - test/unit/opera_test.rb
244
262
  - test/unit/platform_test.rb
245
263
  - test/unit/proxy_test.rb
246
264
  - test/unit/safari_test.rb
247
265
  - test/unit/uc_browser_test.rb
266
+ - test/unit/weibo_test.rb
248
267
  - test/unit/windows_phone_test.rb
249
268
  - test/unit/windows_test.rb
250
269
  homepage: http://github.com/fnando/browser
@@ -289,16 +308,19 @@ test_files:
289
308
  - test/unit/console_test.rb
290
309
  - test/unit/device_test.rb
291
310
  - test/unit/firefox_test.rb
311
+ - test/unit/generic_test.rb
292
312
  - test/unit/ie_test.rb
293
313
  - test/unit/ios_app_test.rb
294
314
  - test/unit/ios_test.rb
295
315
  - test/unit/kindle_test.rb
296
316
  - test/unit/meta_test.rb
317
+ - test/unit/micro_messenger_test.rb
297
318
  - test/unit/nokia_test.rb
298
319
  - test/unit/opera_test.rb
299
320
  - test/unit/platform_test.rb
300
321
  - test/unit/proxy_test.rb
301
322
  - test/unit/safari_test.rb
302
323
  - test/unit/uc_browser_test.rb
324
+ - test/unit/weibo_test.rb
303
325
  - test/unit/windows_phone_test.rb
304
326
  - test/unit/windows_test.rb