brauser 3.2.2 → 3.2.3

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.
@@ -6,7 +6,7 @@
6
6
  <title>
7
7
  Module: Brauser::Version
8
8
 
9
- &mdash; Documentation by YARD 0.8.7
9
+ &mdash; Documentation by YARD 0.8.7.3
10
10
 
11
11
  </title>
12
12
 
@@ -149,7 +149,7 @@
149
149
 
150
150
  </div>
151
151
  </dt>
152
- <dd><pre class="code"><span class='int'>2</span></pre></dd>
152
+ <dd><pre class="code"><span class='int'>3</span></pre></dd>
153
153
 
154
154
  <dt id="STRING-constant" class="">STRING =
155
155
  <div class="docstring">
@@ -180,9 +180,9 @@
180
180
  </div>
181
181
 
182
182
  <div id="footer">
183
- Generated on Sun Aug 18 16:30:30 2013 by
183
+ Generated on Sat Nov 16 10:49:21 2013 by
184
184
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
185
- 0.8.7 (ruby-2.0.0).
185
+ 0.8.7.3 (ruby-2.0.0).
186
186
  </div>
187
187
 
188
188
  </body>
data/doc/_index.html CHANGED
@@ -4,7 +4,7 @@
4
4
  <head>
5
5
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
6
  <title>
7
- Documentation by YARD 0.8.7
7
+ Documentation by YARD 0.8.7.3
8
8
 
9
9
  </title>
10
10
 
@@ -56,7 +56,7 @@
56
56
 
57
57
  <iframe id="search_frame"></iframe>
58
58
 
59
- <div id="content"><h1 class="noborder title">Documentation by YARD 0.8.7</h1>
59
+ <div id="content"><h1 class="noborder title">Documentation by YARD 0.8.7.3</h1>
60
60
  <div id="listing">
61
61
  <h1 class="alphaindex">Alphabetic Index</h1>
62
62
 
@@ -295,9 +295,9 @@
295
295
  </div>
296
296
 
297
297
  <div id="footer">
298
- Generated on Sun Aug 18 16:30:30 2013 by
298
+ Generated on Sat Nov 16 10:49:21 2013 by
299
299
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
300
- 0.8.7 (ruby-2.0.0).
300
+ 0.8.7.3 (ruby-2.0.0).
301
301
  </div>
302
302
 
303
303
  </body>
data/doc/css/style.css CHANGED
@@ -324,9 +324,9 @@ pre.code .dot + pre.code .id,
324
324
  pre.code .rubyid_to_i pre.code .rubyid_each { color: #0085FF; }
325
325
  pre.code .comment { color: #0066FF; }
326
326
  pre.code .const, pre.code .constant { color: #585CF6; }
327
+ pre.code .label,
327
328
  pre.code .symbol { color: #C5060B; }
328
329
  pre.code .kw,
329
- pre.code .label,
330
330
  pre.code .rubyid_require,
331
331
  pre.code .rubyid_extend,
332
332
  pre.code .rubyid_include { color: #0000FF; }
data/doc/file.README.html CHANGED
@@ -6,7 +6,7 @@
6
6
  <title>
7
7
  File: README
8
8
 
9
- &mdash; Documentation by YARD 0.8.7
9
+ &mdash; Documentation by YARD 0.8.7.3
10
10
 
11
11
  </title>
12
12
 
@@ -67,7 +67,8 @@
67
67
  <a href="https://gemnasium.com/ShogunPanda/brauser"><img src="https://gemnasium.com/ShogunPanda/brauser.png?travis" alt="Dependency Status" /></a>
68
68
  <a href="http://travis-ci.org/ShogunPanda/brauser"><img src="https://secure.travis-ci.org/ShogunPanda/brauser.png?branch=master" alt="Build Status" /></a>
69
69
  <a href="https://codeclimate.com/github/ShogunPanda/brauser"><img src="https://codeclimate.com/github/ShogunPanda/brauser.png" alt="Code Climate" /></a>
70
- <a href="https://coveralls.io/r/ShogunPanda/brauser"><img src="https://coveralls.io/repos/ShogunPanda/brauser/badge.png" alt="Coverage Status" /></a></p>
70
+ <a href="https://coveralls.io/r/ShogunPanda/brauser"><img src="https://coveralls.io/repos/ShogunPanda/brauser/badge.png" alt="Coverage Status" /></a>
71
+ <a href="https://bitdeli.com/free" title="Bitdeli Badge"><img src="https://d2weczhvl823v0.cloudfront.net/ShogunPanda/brauser/trend.png" alt="Bitdeli Trend" /></a></p>
71
72
 
72
73
  <p>A framework agnostic browser detection and querying helper.</p>
73
74
 
@@ -269,9 +270,9 @@ Brauser::Browsers.add(:languages, ::Brauser::Definition.new(:it, "Italian"))
269
270
  </div></div>
270
271
 
271
272
  <div id="footer">
272
- Generated on Sun Aug 18 16:30:30 2013 by
273
+ Generated on Sat Nov 16 10:49:21 2013 by
273
274
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
274
- 0.8.7 (ruby-2.0.0).
275
+ 0.8.7.3 (ruby-2.0.0).
275
276
  </div>
276
277
 
277
278
  </body>
data/doc/frames.html CHANGED
@@ -4,18 +4,16 @@
4
4
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
5
  <head>
6
6
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
7
- <title>Documentation by YARD 0.8.7</title>
7
+ <title>Documentation by YARD 0.8.7.3</title>
8
8
  </head>
9
9
  <script type="text/javascript" charset="utf-8">
10
10
  window.onload = function() {
11
- var match = window.location.hash.match(/^#!(.+)/);
12
- var name = 'index.html';
13
- if (match) {
14
- name = unescape(match[1]);
15
- }
11
+ var match = unescape(window.location.hash).match(/^#!(.+)/);
12
+ var name = match ? match[1] : 'index.html';
13
+ name = name.replace(/^(\w+):\/\//, '').replace(/^\/\//, '');
16
14
  document.writeln('<frameset cols="20%,*">' +
17
15
  '<frame name="list" src="class_list.html" />' +
18
- '<frame name="main" src="' + name + '" />' +
16
+ '<frame name="main" src="' + escape(name) + '" />' +
19
17
  '</frameset>');
20
18
  }
21
19
  </script>
data/doc/index.html CHANGED
@@ -6,7 +6,7 @@
6
6
  <title>
7
7
  File: README
8
8
 
9
- &mdash; Documentation by YARD 0.8.7
9
+ &mdash; Documentation by YARD 0.8.7.3
10
10
 
11
11
  </title>
12
12
 
@@ -67,7 +67,8 @@
67
67
  <a href="https://gemnasium.com/ShogunPanda/brauser"><img src="https://gemnasium.com/ShogunPanda/brauser.png?travis" alt="Dependency Status" /></a>
68
68
  <a href="http://travis-ci.org/ShogunPanda/brauser"><img src="https://secure.travis-ci.org/ShogunPanda/brauser.png?branch=master" alt="Build Status" /></a>
69
69
  <a href="https://codeclimate.com/github/ShogunPanda/brauser"><img src="https://codeclimate.com/github/ShogunPanda/brauser.png" alt="Code Climate" /></a>
70
- <a href="https://coveralls.io/r/ShogunPanda/brauser"><img src="https://coveralls.io/repos/ShogunPanda/brauser/badge.png" alt="Coverage Status" /></a></p>
70
+ <a href="https://coveralls.io/r/ShogunPanda/brauser"><img src="https://coveralls.io/repos/ShogunPanda/brauser/badge.png" alt="Coverage Status" /></a>
71
+ <a href="https://bitdeli.com/free" title="Bitdeli Badge"><img src="https://d2weczhvl823v0.cloudfront.net/ShogunPanda/brauser/trend.png" alt="Bitdeli Trend" /></a></p>
71
72
 
72
73
  <p>A framework agnostic browser detection and querying helper.</p>
73
74
 
@@ -269,9 +270,9 @@ Brauser::Browsers.add(:languages, ::Brauser::Definition.new(:it, "Italian"))
269
270
  </div></div>
270
271
 
271
272
  <div id="footer">
272
- Generated on Sun Aug 18 16:30:30 2013 by
273
+ Generated on Sat Nov 16 10:49:21 2013 by
273
274
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
274
- 0.8.7 (ruby-2.0.0).
275
+ 0.8.7.3 (ruby-2.0.0).
275
276
  </div>
276
277
 
277
278
  </body>
data/doc/js/app.js CHANGED
@@ -78,7 +78,12 @@ function framesInit() {
78
78
  if (hasFrames) {
79
79
  document.body.className = 'frames';
80
80
  $('#menu .noframes a').attr('href', document.location);
81
- window.top.document.title = $('html head title').text();
81
+ try {
82
+ window.top.document.title = $('html head title').text();
83
+ } catch(error) {
84
+ // some browsers will not allow this when serving from file://
85
+ // but we don't want to stop the world.
86
+ }
82
87
  }
83
88
  else {
84
89
  $('#menu .noframes a').text('frames').attr('href', framesUrl);
@@ -211,4 +216,4 @@ $(linkSummaries);
211
216
  $(keyboardShortcuts);
212
217
  $(summaryToggle);
213
218
  $(fixOutsideWorldLinks);
214
- $(generateTOC);
219
+ $(generateTOC);
data/doc/method_list.html CHANGED
@@ -228,14 +228,14 @@
228
228
 
229
229
 
230
230
  <li class="r1 ">
231
- <span class='object_link'><a href="Brauser/Queries.html#on%3F-instance_method" title="Brauser::Queries#on? (method)">#on?</a></span>
232
- <small>Brauser::Queries</small>
231
+ <span class='object_link'><a href="Brauser/BrowserMethods/Querying.html#on%3F-instance_method" title="Brauser::BrowserMethods::Querying#on? (method)">#on?</a></span>
232
+ <small>Brauser::BrowserMethods::Querying</small>
233
233
  </li>
234
234
 
235
235
 
236
236
  <li class="r2 ">
237
- <span class='object_link'><a href="Brauser/BrowserMethods/Querying.html#on%3F-instance_method" title="Brauser::BrowserMethods::Querying#on? (method)">#on?</a></span>
238
- <small>Brauser::BrowserMethods::Querying</small>
237
+ <span class='object_link'><a href="Brauser/Queries.html#on%3F-instance_method" title="Brauser::Queries#on? (method)">#on?</a></span>
238
+ <small>Brauser::Queries</small>
239
239
  </li>
240
240
 
241
241
 
@@ -294,48 +294,54 @@
294
294
 
295
295
 
296
296
  <li class="r2 ">
297
+ <span class='object_link'><a href="Brauser/BrowserMethods/Querying.html#supported%3F-instance_method" title="Brauser::BrowserMethods::Querying#supported? (method)">#supported?</a></span>
298
+ <small>Brauser::BrowserMethods::Querying</small>
299
+ </li>
300
+
301
+
302
+ <li class="r1 ">
297
303
  <span class='object_link'><a href="Brauser/Definition.html#tag-instance_method" title="Brauser::Definition#tag (method)">#tag</a></span>
298
304
  <small>Brauser::Definition</small>
299
305
  </li>
300
306
 
301
307
 
302
- <li class="r1 ">
308
+ <li class="r2 ">
303
309
  <span class='object_link'><a href="Brauser/Query.html#target-instance_method" title="Brauser::Query#target (method)">#target</a></span>
304
310
  <small>Brauser::Query</small>
305
311
  </li>
306
312
 
307
313
 
308
- <li class="r2 ">
314
+ <li class="r1 ">
309
315
  <span class='object_link'><a href="Brauser/Browser.html#to_s-instance_method" title="Brauser::Browser#to_s (method)">#to_s</a></span>
310
316
  <small>Brauser::Browser</small>
311
317
  </li>
312
318
 
313
319
 
314
- <li class="r1 ">
320
+ <li class="r2 ">
315
321
  <span class='object_link'><a href="Brauser/BrowserMethods/PartialQuerying.html#v-instance_method" title="Brauser::BrowserMethods::PartialQuerying#v (method)">#v</a></span>
316
322
  <small>Brauser::BrowserMethods::PartialQuerying</small>
317
323
  </li>
318
324
 
319
325
 
320
- <li class="r2 ">
326
+ <li class="r1 ">
321
327
  <span class='object_link'><a href="Brauser/Chainers.html#v-instance_method" title="Brauser::Chainers#v (method)">#v</a></span>
322
328
  <small>Brauser::Chainers</small>
323
329
  </li>
324
330
 
325
331
 
326
- <li class="r1 ">
332
+ <li class="r2 ">
327
333
  <span class='object_link'><a href="Brauser/BrowserMethods/Querying.html#v%3F-instance_method" title="Brauser::BrowserMethods::Querying#v? (method)">#v?</a></span>
328
334
  <small>Brauser::BrowserMethods::Querying</small>
329
335
  </li>
330
336
 
331
337
 
332
- <li class="r2 ">
338
+ <li class="r1 ">
333
339
  <span class='object_link'><a href="Brauser/Queries.html#v%3F-instance_method" title="Brauser::Queries#v? (method)">#v?</a></span>
334
340
  <small>Brauser::Queries</small>
335
341
  </li>
336
342
 
337
343
 
338
- <li class="r1 ">
344
+ <li class="r2 ">
339
345
  <span class='object_link'><a href="Brauser/Browser.html#version-instance_method" title="Brauser::Browser#version (method)">#version</a></span>
340
346
  <small>Brauser::Browser</small>
341
347
  </li>
@@ -6,7 +6,7 @@
6
6
  <title>
7
7
  Top Level Namespace
8
8
 
9
- &mdash; Documentation by YARD 0.8.7
9
+ &mdash; Documentation by YARD 0.8.7.3
10
10
 
11
11
  </title>
12
12
 
@@ -103,9 +103,9 @@
103
103
  </div>
104
104
 
105
105
  <div id="footer">
106
- Generated on Sun Aug 18 16:30:30 2013 by
106
+ Generated on Sat Nov 16 10:49:21 2013 by
107
107
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
108
- 0.8.7 (ruby-2.0.0).
108
+ 0.8.7.3 (ruby-2.0.0).
109
109
  </div>
110
110
 
111
111
  </body>
@@ -62,7 +62,7 @@ module Brauser
62
62
  [:linux, "Linux", /linux/i],
63
63
  [:osx, "Apple MacOS X", /mac|macintosh|mac os x/i],
64
64
  [:windows, "Microsoft Windows", /windows/i]
65
- ].collect { |platform| ::Brauser::Definition.send(:new, *platform) })
65
+ ].map { |platform| ::Brauser::Definition.send(:new, *platform) })
66
66
  end
67
67
 
68
68
  # Adds a default list of languages that can be recognized.
@@ -183,7 +183,7 @@ module Brauser
183
183
  "xh" => "Xshosa",
184
184
  "ji" => "Yiddish",
185
185
  "zu" => "Zulu"
186
- }.collect { |code, name| ::Brauser::Definition.new(code, name, code) })
186
+ }.map { |code, name| ::Brauser::Definition.new(code, name, code) })
187
187
  end
188
188
 
189
189
  private
@@ -195,8 +195,8 @@ module Brauser
195
195
  [:chrome, "Google Chrome", /((chrome)|(chromium))/i, /(.+Chrom[a-z]+\/)([a-z0-9.]+)/i],
196
196
  [:netscape, "Netscape Navigator", /(netscape|navigator)\//i, /((Netscape|Navigator)\/)([a-z0-9.]+)/i],
197
197
  [:firefox, "Mozilla Firefox", /firefox/i, /(.+Firefox\/)([a-z0-9.]+)/i],
198
- [:safari, "Apple Safari", Proc.new{ |_, agent| agent =~ /safari/i && agent !~ /((chrome)|(chromium))/i }, /(.+Version\/)([a-z0-9.]+)/i],
199
- ].collect { |browser| ::Brauser::Definition.send(:new, *browser) })
198
+ [:safari, "Apple Safari", Proc.new{ |_, agent| disambiguate_browser(agent, /safari/i, /((chrome)|(chromium))/i) }, /(.+Version\/)([a-z0-9.]+)/i],
199
+ ].map { |browser| ::Brauser::Definition.send(:new, *browser) })
200
200
  end
201
201
 
202
202
  # Registers definitions for MSIE browsers.
@@ -209,8 +209,8 @@ module Brauser
209
209
  version[0] = version[0].to_integer + 4
210
210
  version.join(".")
211
211
  }],
212
- [:msie, "Microsoft Internet Explorer", Proc.new{ |_, agent| agent =~ /msie/i && agent !~ /opera/i }, /(.+MSIE )([a-z0-9.]+)/i],
213
- ].collect { |browser| ::Brauser::Definition.send(:new, *browser) })
212
+ [:msie, "Microsoft Internet Explorer", Proc.new{ |_, agent| disambiguate_browser(agent, /msie/i, /opera/i) }, /(.+MSIE )([a-z0-9.]+)/i],
213
+ ].map { |browser| ::Brauser::Definition.send(:new, *browser) })
214
214
  end
215
215
 
216
216
  # Registers the least common desktop browsers.
@@ -221,7 +221,7 @@ module Brauser
221
221
  [:quicktime, "Apple QuickTime", /quicktime/i, /(.+((QuickTime\/)|(qtver=)))([a-z0-9.]+)/i],
222
222
  [:webkit, "WebKit Browser", /webkit/i, /(.+WebKit\/)([a-z0-9.]+)/i],
223
223
  [:gecko, "Gecko Browser", /gecko/i, /(.+rv:|Gecko\/)([a-z0-9.]+)/i],
224
- ].collect { |browser| ::Brauser::Definition.send(:new, *browser) })
224
+ ].map { |browser| ::Brauser::Definition.send(:new, *browser) })
225
225
  end
226
226
 
227
227
  # Register the most common mobile and console browsers.
@@ -232,8 +232,8 @@ module Brauser
232
232
  [:coremedia, "Apple CoreMedia", /coremedia/i, /.+CoreMedia v([a-z0-9.]+)/i],
233
233
 
234
234
  [:opera_mobile, "Opera Mobile", /opera mobi/i, /.+Opera Mobi.+((.+Opera )|(Version\/))([a-z0-9.]+)/i],
235
- [:opera, "Opera", /opera/i, Proc.new{ |_, agent|
236
- version = ((agent !~ /wii/i) ? /((.+Opera )|(Version\/))(?<version>[a-z0-9.]+)/i : /(.+Nintendo Wii; U; ; )(?<version>[a-z0-9.]+)/i).match(agent)
235
+ [:opera, "Opera", /opera/i, Proc.new{ |_, a|
236
+ version = ((a !~ /wii/i) ? /((.+Opera )|(Version\/))(?<version>[a-z0-9.]+)/i : /(.+Nintendo Wii; U; ; )(?<version>[a-z0-9.]+)/i).match(a)
237
237
  version ? version["version"] : nil
238
238
  }],
239
239
 
@@ -250,7 +250,17 @@ module Brauser
250
250
  [:ipad, "Apple iPad", /ipad/i, /(.+Version\/)([a-z0-9.]+)/i],
251
251
 
252
252
  [:mobile, "Other Mobile Browser", /(mobile|symbian|midp|windows ce)/i, /.+\/([a-z0-9.]+)/i],
253
- ].collect { |browser| ::Brauser::Definition.send(:new, *browser) })
253
+ ].map { |browser| ::Brauser::Definition.send(:new, *browser) })
254
+ end
255
+
256
+ # Recognizes a browser disambiguating against another.
257
+ #
258
+ # @param agent [String] The agent to match.
259
+ # @param positive_matcher [Regexp] The expression to match.
260
+ # @param positive_matcher [Regexp] The expression NOT to match.
261
+ # @return [Boolean] `true` if matching succeeded, `false otherwise`.
262
+ def disambiguate_browser(agent, positive_matcher, negative_matcher)
263
+ agent =~ positive_matcher && agent !~ negative_matcher
254
264
  end
255
265
  end
256
266
  end
@@ -355,7 +365,7 @@ module Brauser
355
365
  # @return [String] A human-readable browser name.
356
366
  def readable_name
357
367
  parse_agent(@agent) if !@name
358
- ::Brauser::Browser.browsers[@name].try(:label) || "Unknown Browser"
368
+ ::Brauser::Browser.browsers.fetch(@name).label rescue "Unknown Browser"
359
369
  end
360
370
 
361
371
  # Gets a human-readable platform name.
@@ -397,10 +407,7 @@ module Brauser
397
407
  # @return [String|Array|nil] The browser name(s) or `nil`, if it was set to be skipped.
398
408
  def stringify_name(name, &block)
399
409
  if name then
400
- name = "" if name.is_a?(TrueClass)
401
- self.parse_agent(@agent) if !@name
402
- block ||= Proc.new {|n, *| n == :msie_compatibility ? [:msie_compatibility, :msie] : n }
403
-
410
+ name, block = prepare_name_stringification(name, block)
404
411
  names = block.call(@name, @version, @platform).ensure_array {|n| "#{name}#{n}" }
405
412
  names.length > 1 ? names : names.first
406
413
  else
@@ -408,6 +415,16 @@ module Brauser
408
415
  end
409
416
  end
410
417
 
418
+ # Prepare a name stringification
419
+ #
420
+ # @param name [Boolean] If non falsy, the string to prepend to the name. If falsy, the name information will not be included.
421
+ # @param block [Proc] A block to translate browser name.
422
+ # @return [Array] A name and a translator ready to use.
423
+ def prepare_name_stringification(name, block)
424
+ self.parse_agent(@agent) if !@name
425
+ [(name.is_a?(TrueClass) ? "" : name), block || Proc.new {|n, *| n == :msie_compatibility ? [:msie_compatibility, :msie] : n }]
426
+ end
427
+
411
428
  # Stringifies a browser version.
412
429
  #
413
430
  # @param version [String|NilClass] If non falsy, the string to prepend to the version. If falsy, the version information will not be included.
@@ -416,7 +433,7 @@ module Brauser
416
433
  version = "version-" if version.is_a?(TrueClass)
417
434
  tokens = @version.split(".")
418
435
 
419
- !version ? nil : tokens.inject([version + tokens.shift]) {|prev, current|
436
+ !version ? nil : tokens.reduce([version + tokens.shift]) {|prev, current|
420
437
  prev + [prev.last + "_" + current]
421
438
  }.flatten
422
439
  end
@@ -442,7 +459,7 @@ module Brauser
442
459
  # @param accept_language [String] The Accept-Language header.
443
460
  # @return [Array] The list of accepted languages.
444
461
  def parse_accept_language(accept_language = nil)
445
- accept_language.ensure_string.gsub(/;q=[\d.]+/, "").split(",").collect {|l| l.downcase.strip }.select{|l| l.present? }
462
+ accept_language.ensure_string.gsub(/;q=[\d.]+/, "").split(",").map {|l| l.downcase.strip }.select{|l| l.present? }
446
463
  end
447
464
 
448
465
  private
@@ -503,7 +520,8 @@ module Brauser
503
520
  # @see #on?
504
521
  #
505
522
  # @param names [Symbol|Array] A list of specific names to match. Also, this meta-names are supported: `:capable` and `:tablet`.
506
- # @param versions [String|Hash] A string in the form `operator version && ...` (example: `>= 7 && < 4`) or an hash with specific version to match against, in form `{:operator => version}`, where operator is one of `:lt, :lte, :eq, :gt, :gte`.
523
+ # @param versions [String|Hash] A string in the form `operator version && ...` (example: `>= 7 && < 4`) or an hash with specific version to match against,
524
+ # in form `{:operator => version}`, where operator is one of `:lt, :lte, :eq, :gt, :gte`.
507
525
  # @param platforms [Symbol|Array] A list of specific platform to match. Valid values are all those possible for the platform attribute.
508
526
  # @return [Query] A query which can evaluated for concatenation or result.
509
527
  def is(names = [], versions = {}, platforms = [])
@@ -522,7 +540,8 @@ module Brauser
522
540
 
523
541
  # Checks if the browser is a specific version.
524
542
  #
525
- # @param versions [String|Hash] A string in the form `operator version && ...` (example: `>= 7 && < 4`) or an hash with specific version to match against, in form `{:operator => version}`, where operator is one of `:lt, :lte, :eq, :gt, :gte`.
543
+ # @param versions [String|Hash] A string in the form `operator version && ...` (example: `>= 7 && < 4`) or an hash with specific version to match against,
544
+ # in form `{:operator => version}`, where operator is one of `:lt, :lte, :eq, :gt, :gte`.
526
545
  # @return [Query] A query which can evaluated for concatenation or result.
527
546
  def v(versions = {})
528
547
  parse_agent(@agent) if !@version
@@ -576,10 +595,11 @@ module Brauser
576
595
 
577
596
  # Parses a version query.
578
597
  #
579
- # @param versions [String|Hash] A string in the form `operator version && ...` (example: `>= 7 && < 4`) or an hash with specific version to match against, in form `{:operator => version}`, where operator is one of `:lt, :lte, :eq, :gt, :gte`.
598
+ # @param versions [String|Hash] A string in the form `operator version && ...` (example: `>= 7 && < 4`) or an hash with specific version to match
599
+ # against, in form `{:operator => version}`, where operator is one of `:lt, :lte, :eq, :gt, :gte`.
580
600
  # @return [Hash] The hash representation of the query.
581
601
  def parse_versions_query(versions)
582
- versions.is_a?(::Hash) ? versions : versions.ensure_string.split(/\s*&&\s*/).inject({}) do |prev, token|
602
+ versions.is_a?(::Hash) ? versions : versions.ensure_string.split(/\s*&&\s*/).reduce({}) do |prev, token|
583
603
  operator, version = parse_versions_query_component(token)
584
604
  prev[operator] = version if operator.present? && version.present?
585
605
  prev
@@ -591,7 +611,7 @@ module Brauser
591
611
  # @param token [String] The token to parse.
592
612
  # @return [Array] An operator and an argument.
593
613
  def parse_versions_query_component(token)
594
- operator, version = token.strip.split(/\s+/, 2).collect(&:strip)
614
+ operator, version = token.strip.split(/\s+/, 2).map(&:strip)
595
615
  [{"<" => :lt, "<=" => :lte, "=" => :eq, "==" => :eq, ">" => :gt, ">=" => :gte}.fetch(operator, nil), version]
596
616
  end
597
617
  end
@@ -604,7 +624,8 @@ module Brauser
604
624
  # @see #on?
605
625
  #
606
626
  # @param names [Symbol|Array] A list of specific names to match. Also, this meta-names are supported: `:capable` and `:tablet`.
607
- # @param versions [Hash] An hash with specific version to match against. Need to be in form `{:operator => version}`, where operator is one of `:lt, :lte, :eq, :gt, :gte`.
627
+ # @param versions [Hash] An hash with specific version to match against. Need to be in form `{:operator => version}`, where operator
628
+ # is one of `:lt, :lte, :eq, :gt, :gte`.
608
629
  # @param platforms [Symbol|Array] A list of specific platform to match. Valid values are all those possible for the platform attribute.
609
630
  # @return [Boolean] `true` if current browser matches, `false` otherwise.
610
631
  def is?(names = [], versions = {}, platforms = [])
@@ -613,7 +634,8 @@ module Brauser
613
634
 
614
635
  # Checks if the browser is a specific version.
615
636
  #
616
- # @param versions [String|Hash] A string in the form `operator version && ...` (example: `>= 7 && < 4`) or an hash with specific version to match against, in form `{:operator => version}`, where operator is one of `:lt, :lte, :eq, :gt, :gte`.
637
+ # @param versions [String|Hash] A string in the form `operator version && ...` (example: `>= 7 && < 4`) or an hash with specific version to match against,
638
+ # in form `{:operator => version}`, where operator is one of `:lt, :lte, :eq, :gt, :gte`.
617
639
  # @return [Boolean] `true` if current browser matches, `false` otherwise.
618
640
  def v?(versions = {})
619
641
  v(versions).result
@@ -634,6 +656,16 @@ module Brauser
634
656
  def accepts?(langs = [])
635
657
  accepts(langs).result
636
658
  end
659
+
660
+ # Check if the browser is supported.
661
+ #
662
+ # @param supported [Hash|String] A map of engines and minimum supported major version, or a path to YAML file containing the map.
663
+ # @return [Boolean] `true` if current browser is supported, `false` otherwise.
664
+ def supported?(supported)
665
+ supported = YAML.load_file(supported).symbolize_keys if supported.is_a?(String)
666
+ minimum = supported[name]
667
+ (minimum && v?(gte: minimum)).to_boolean
668
+ end
637
669
  end
638
670
  end
639
671
 
@@ -728,7 +760,7 @@ module Brauser
728
760
  # @param query [String] The query to issue. Use `__` to separate query and `_` in place of `.` in the version.
729
761
  # @return [Array] And array of `[method, arguments]` entries.
730
762
  def parse_query(query)
731
- query.gsub(/\?$/, "").gsub(/(_(v|on|is))/, " \\2").split(" ").collect do |part|
763
+ query.gsub(/\?$/, "").gsub(/(_(v|on|is))/, " \\2").split(" ").map do |part|
732
764
  parse_query_part(part)
733
765
  end
734
766
  end
@@ -763,7 +795,7 @@ module Brauser
763
795
  [/_?and_?/, " && "], # Parse &&
764
796
  ["_", "."], # Dot notation
765
797
  [/\s+/, " "]
766
- ].inject(version) { |current, parse| current.gsub(parse[0], parse[1])}.strip
798
+ ].reduce(version) { |current, parse| current.gsub(parse[0], parse[1])}.strip
767
799
  end
768
800
 
769
801
  # Executes a parsed query
@@ -771,7 +803,7 @@ module Brauser
771
803
  # @param query [Array] And array of `[method, arguments]` entries.
772
804
  # @return [Brauser::Query] The result of the query.
773
805
  def execute_query(query)
774
- query.inject(Brauser::Query.new(self, true)) { |rv, call|
806
+ query.reduce(Brauser::Query.new(self, true)) { |rv, call|
775
807
  break if !rv.result
776
808
  rv.send(call[0], *call[1])
777
809
  }