browserino 4.2.3 → 4.3.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
- SHA1:
3
- metadata.gz: 6fea195ef7e07ff27c218fe70dbc5c58e4d8e33d
4
- data.tar.gz: d54446680900ffd3f572824db6ca424a7f527974
2
+ SHA256:
3
+ metadata.gz: efdb55a48625acb66a20129309cf291e9ea6603670a255cb8a2be98b9aa15827
4
+ data.tar.gz: d2aa4e55754f89785fef2ff1c0377a18ed722a54a7a5fa43d99f0db2f8cd44f4
5
5
  SHA512:
6
- metadata.gz: c0f0958e93d0aec69a9a0be73d6951fe4298192a7683b8e7bf34d8b4afc9dde7cb7ca4b4a4163043704c93b996d3c36225f328966a2ff4db47c34cfe3f2e63c2
7
- data.tar.gz: 4429f8015e122e8616014ac8cafd7c2cd8ec60d772a67677f5adf8364973347a38c839e19c7986d22cee42306b5d94eaa56b7c79cbee7f101cacaa0812cab52a
6
+ metadata.gz: 784017fbefd8446103ac5543c7738e4a5162eeb7ed440466e50ac505fd7a9f38964fcf1c1a4b235ef4846432b91cc0be80e520d2f8fc7448bf2116d63076eb53
7
+ data.tar.gz: 6e0938abf8f8f0572c2936be82c9f9bce3d031b7ef4f1022f756b29e790d0236e045f5d8bd1f9323edc2cfd308352ada7fe2fddc60b1eeaa03b7a091dbf35605
data/.gitignore CHANGED
@@ -10,3 +10,4 @@
10
10
  .DS_Store
11
11
  *.swp
12
12
  Session.vim
13
+ tags
data/.travis.yml CHANGED
@@ -7,8 +7,7 @@ rvm:
7
7
  - 2.2.0
8
8
  - 2.3.0
9
9
  - 2.4.0
10
+ - 2.5.0
10
11
  before_install: gem update bundler
11
12
  script:
12
13
  - bundle exec rspec spec
13
- - bundle exec codeclimate-test-reporter
14
- - bundle exec rubocop
data/CHANGELOG.md CHANGED
@@ -1,6 +1,17 @@
1
1
  # Changelog
2
2
  _dates are in dd-mm-yyyy format_
3
3
 
4
+ ### 11-06-2017 VERSION 4.2.1
5
+
6
+ - Fixed a bug which caused arguments in the form of `version: v` to return true by default
7
+ - Added 174 additional clients
8
+ - Added some global properties
9
+ - `smarttv?` and `tablet?` in addition to `mobile?`
10
+ - Added device detection using `device? :namOfDevice`
11
+ - Added `not` method that allows calling `client.not.firefox?`. It simply inverts the original result
12
+ - Added `not?` method which is the opposite of `is?`
13
+ - Added `:mediaplayer` type
14
+
4
15
  ### 30-04-2017 VERSION 4.1.0
5
16
 
6
17
  - Changed some internal naming
data/README.md CHANGED
@@ -1,12 +1,9 @@
1
1
  Browserino
2
2
  ---
3
3
 
4
- Browserino has been completely rewritten! While some components remain backwards compatible, the inner workings of Browserino have completely changed.
5
- It has taken on a DSL-like form to allow for easy addition of features and more detection in general. This allowed me to clean up lots of constants and other messy constructions I've built to add things such as aliasses for instance. The test suite had also become a quite cumbersome task to maintain, it was hard to read and all the test data was structured using Ruby, again using structures more complex than they could and should be.
6
-
7
- In the new version, test data is written in YAML format and then parsed to usable test data in the respective spec. Each spec generates their own tests based on what is present in the YAML, this helped test a lot of the methods added using `define_singleton_method` upon instantiation of a `Browserino::Client` object. Don't let this scare you into submitting your own tests tho, as all you'll have to do is write the YAML and the tests will simply be generated for you :)
8
-
9
- The below sections will explain how the new Browserino works, enjoy!
4
+ Browserino is a tool that parses a user agent string into a convenient object to work with.
5
+ This allows developers to gather information about the system of a user on a website without having to ask countless questions
6
+ about their browser / OS versions.
10
7
 
11
8
  ## Status
12
9
 
@@ -15,73 +12,85 @@ The below sections will explain how the new Browserino works, enjoy!
15
12
  [![Issues](https://img.shields.io/github/issues/SidOfc/browserino.svg)](https://github.com/SidOfc/browserino/issues)
16
13
  [![Build Status](https://img.shields.io/travis/SidOfc/browserino.svg)](https://travis-ci.org/SidOfc/browserino)
17
14
  [![Coverage Status](https://img.shields.io/coveralls/SidOfc/browserino.svg)](https://coveralls.io/github/SidOfc/browserino?branch=master)
18
- [![Code Climate](https://img.shields.io/codeclimate/github/SidOfc/browserino.svg)](https://img.shields.io/codeclimate/github/SidOfc/browserino)
19
-
20
- ## TOC
21
-
22
- - [Status](#status)
23
- - [TOC](#toc)
24
- - [Sources](#sources)
25
- - [Changelog](#changelog)
26
- - [12-10-2017 VERSION 4.2.2](#12-10-2017-version-422)
27
- - [11-06-2017 VERSION 4.2.1](#11-06-2017-version-421)
28
- - [30-04-2017 VERSION 4.1.0](#30-04-2017-version-410)
29
- - [Installation](#installation)
30
- - [Usage](#usage)
31
- - [Rails (>= 3.2.0)](#rails--320)
32
- - [Initializer](#initializer)
33
- - [General](#general)
34
- - [Client](#client)
35
- - [Formatting](#formatting)
36
- - [Non version-like properties](#non-version-like-properties)
37
- - [Version-like properties](#version-like-properties)
38
- - [Config](#config)
39
- - [Matchers](#matchers)
40
- - [Aliasses](#aliasses)
41
- - [Labels](#labels)
42
- - [Methods](#methods)
43
- - [\#name](#name)
44
- - [\#name?(sym, opts = {})](#namesym-opts--)
45
- - [\#version](#version)
46
- - [\#version?(version)](#versionversion)
47
- - [\#engine](#engine)
48
- - [\#engine?(sym, opts = {})](#enginesym-opts--)
49
- - [\#engine_version](#engine_version)
50
- - [\#engine_version?(version)](#engine_versionversion)
51
- - [\#platform](#platform)
52
- - [\#platform?(sym, opts = {})](#platformsym-opts--)
53
- - [\#platform_label](#platform_label)
54
- - [\#platform_version](#platform_version)
55
- - [\#platform_version?(version)](#platform_versionversion)
56
- - [\#device](#device)
57
- - [\#device?(sym)](#devicesym)
58
- - [\#architecture](#architecture)
59
- - [\#architecture?(sym)](#architecturesym)
60
- - [\#x64?](#x64)
61
- - [\#x32?](#x32)
62
- - [\#mobile and #mobile?](#mobile-and-mobile)
63
- - [\#type](#type)
64
- - [\#type?(sym)](#typesym)
65
- - [\#like](#like)
66
- - [\#like?(sym, opts = {})](#likesym-opts--)
67
- - [\#is?(sym, opts = {})](#issym-opts--)
68
- - [\#not](#not)
69
- - [\#not?(sym, opts = {})](#notsym-opts--)
70
- - [Magic methods](#magic-methods)
71
- - [Names](#names)
72
- - [Aliasses](#aliasses-1)
73
- - [Supported](#supported)
74
- - [Browsers](#browsers)
75
- - [Bots](#bots)
76
- - [Validators](#validators)
77
- - [Libraries](#libraries)
78
- - [Email Clients](#email-clients)
79
- - [RSS](#rss)
80
- - [Platforms](#platforms)
81
- - [Android](#android)
82
- - [Windows](#windows)
83
- - [Macintosh](#macintosh)
84
- - [Devices](#devices)
15
+
16
+ ## Table of Contents
17
+
18
+ <details>
19
+ <summary>Click to expand Table of Contents</summary>
20
+ <ul>
21
+ <li><a href="#status">Status</a></li>
22
+ <li><a href="#table-of-contents">Table of Contents</a></li>
23
+ <li><a href="#sources">Sources</a></li>
24
+ <li><a href="#changelog">Changelog</a><ul>
25
+ <li><a href="#23-06-2018-version-424">23-06-2018 VERSION 4.2.4</a></li>
26
+ <li><a href="#24-12-2017-version-423">24-12-2017 VERSION 4.2.3</a></li>
27
+ <li><a href="#12-10-2017-version-422">12-10-2017 VERSION 4.2.2</a></li>
28
+ </ul></li>
29
+ <li><a href="#installation">Installation</a></li>
30
+ <li><a href="#usage">Usage</a><ul>
31
+ <li><a href="#rails--320">Rails (>= 3.2.0)</a><ul>
32
+ <li><a href="#initializer">Initializer</a></li>
33
+ </ul></li>
34
+ <li><a href="#general">General</a><ul>
35
+ <li><a href="#client">Client</a></li>
36
+ <li><a href="#formatting">Formatting</a><ul>
37
+ <li><a href="#non-version-like-properties">Non version-like properties</a></li>
38
+ <li><a href="#version-like-properties">Version-like properties</a></li>
39
+ </ul></li>
40
+ <li><a href="#config">Config</a><ul>
41
+ <li><a href="#matchers">Matchers</a></li>
42
+ <li><a href="#aliasses">Aliasses</a></li>
43
+ <li><a href="#labels">Labels</a></li>
44
+ </ul></li>
45
+ <li><a href="#methods">Methods</a><ul>
46
+ <li><a href="#name">\#name</a></li>
47
+ <li><a href="#namesym-opts--">\#name?(sym, opts = {})</a></li>
48
+ <li><a href="#version">\#version</a></li>
49
+ <li><a href="#versionversion">\#version?(version)</a></li>
50
+ <li><a href="#engine">\#engine</a></li>
51
+ <li><a href="#enginesym-opts--">\#engine?(sym, opts = {})</a></li>
52
+ <li><a href="#engine_version">\#engine_version</a></li>
53
+ <li><a href="#engine_versionversion">\#engine_version?(version)</a></li>
54
+ <li><a href="#platform">\#platform</a></li>
55
+ <li><a href="#platformsym-opts--">\#platform?(sym, opts = {})</a></li>
56
+ <li><a href="#platform_label">\#platform_label</a></li>
57
+ <li><a href="#platform_version">\#platform_version</a></li>
58
+ <li><a href="#platform_versionversion">\#platform_version?(version)</a></li>
59
+ <li><a href="#device">\#device</a></li>
60
+ <li><a href="#devicesym">\#device?(sym)</a></li>
61
+ <li><a href="#architecture">\#architecture</a></li>
62
+ <li><a href="#architecturesym">\#architecture?(sym)</a></li>
63
+ <li><a href="#x64">\#x64?</a></li>
64
+ <li><a href="#x32">\#x32?</a></li>
65
+ <li><a href="#mobile-and-mobile">\#mobile and #mobile?</a></li>
66
+ <li><a href="#type">\#type</a></li>
67
+ <li><a href="#typesym">\#type?(sym)</a></li>
68
+ <li><a href="#like">\#like</a></li>
69
+ <li><a href="#likesym-opts--">\#like?(sym, opts = {})</a></li>
70
+ <li><a href="#issym-opts--">\#is?(sym, opts = {})</a></li>
71
+ <li><a href="#not">\#not</a></li>
72
+ <li><a href="#notsym-opts--">\#not?(sym, opts = {})</a></li>
73
+ </ul></li>
74
+ <li><a href="#magic-methods">Magic methods</a><ul>
75
+ <li><a href="#names">Names</a></li>
76
+ <li><a href="#aliasses-1">Aliasses</a></li>
77
+ </ul></li></ul></li></ul></li>
78
+ <li><a href="#supported">Supported</a><ul>
79
+ <li><a href="#browsers">Browsers</a></li>
80
+ <li><a href="#bots">Bots</a></li>
81
+ <li><a href="#validators">Validators</a></li>
82
+ <li><a href="#libraries">Libraries</a></li>
83
+ <li><a href="#email-clients">Email Clients</a></li>
84
+ <li><a href="#rss">RSS</a></li>
85
+ <li><a href="#platforms">Platforms</a><ul>
86
+ <li><a href="#android">Android</a></li>
87
+ <li><a href="#windows">Windows</a></li>
88
+ <li><a href="#macintosh">Macintosh</a></li>
89
+ </ul></li>
90
+ <li><a href="#devices">Devices</a></li>
91
+ </ul></li></ul></li>
92
+ </ul>
93
+ </details>
85
94
 
86
95
  ## Sources
87
96
 
@@ -103,6 +112,11 @@ Many thanks to the creators and maintainers of the following sources of user age
103
112
  _dates are in dd-mm-yyyy format_
104
113
  older changes can be found in the [changelog](/projects/browserino/changelog/)
105
114
 
115
+ ### 23-06-2018 VERSION 4.2.4
116
+
117
+ - Add macOS `mojave` label
118
+ - Add generic `android_*` labels for android versions `p` through `z`.
119
+
106
120
  ### 24-12-2017 VERSION 4.2.3
107
121
 
108
122
  - Loosened some Android label version ranges
@@ -112,17 +126,6 @@ older changes can be found in the [changelog](/projects/browserino/changelog/)
112
126
 
113
127
  - Added support for `high_sierra`
114
128
 
115
- ### 11-06-2017 VERSION 4.2.1
116
-
117
- - Fixed a bug which caused arguments in the form of `version: v` to return true by default
118
- - Added 174 additional clients
119
- - Added some global properties
120
- - `smarttv?` and `tablet?` in addition to `mobile?`
121
- - Added device detection using `device? :namOfDevice`
122
- - Added `not` method that allows calling `client.not.firefox?`. It simply inverts the original result
123
- - Added `not?` method which is the opposite of `is?`
124
- - Added `:mediaplayer` type
125
-
126
129
  ## Installation
127
130
 
128
131
  Add this line to your application's Gemfile:
@@ -1283,7 +1286,21 @@ Below are a list of versions the agent can identify so far
1283
1286
 
1284
1287
  Regular: `:android`
1285
1288
 
1286
- `:android`, `:cupcake`, `:eclair`, `:froyo`, `:gingerbread`, `:honeycomb`, `:ice_cream_sandwich`, `:jelly_bean`, `:kitkat`, `:lollipop`, `:marshmallow`, `:nougat`
1289
+ `:android`, `:cupcake`, `:eclair`, `:froyo`, `:gingerbread`, `:honeycomb`, `:ice_cream_sandwich`, `:jelly_bean`, `:kitkat`, `:lollipop`, `:marshmallow`, `:nougat`, `oreo`
1290
+
1291
+ Since android version releases follow the alphabet and since every new version since android `5` is contained within a single major version number,
1292
+ additional methods are defined for all "future" android releases e.g:
1293
+
1294
+ ```ruby
1295
+ label :android_p, for: :android, version: '9'..'9.9.9'
1296
+ label :android_q, for: :android, version: '10'..'10.9.9'
1297
+ # ... snipped ...
1298
+ label :android_y, for: :android, version: '18'..'18.9.9'
1299
+ label :android_z, for: :android, version: '19'..'19.9.9'
1300
+ ```
1301
+
1302
+ So for every unreleased version of android, you can identify it by using `:android_` followed by the letter for that version: `client.android_p?`.
1303
+ This method will stay supported even after the name is known (the actual name will be added too). Since some android versions are already known, this system is supported from the letter `p` up to and including `z`.
1287
1304
 
1288
1305
  #### Windows
1289
1306
 
@@ -1291,11 +1308,15 @@ Regular: `:windows`
1291
1308
 
1292
1309
  `:dos`, `:windows98`, `:windows2000`, `:xp`, `:vista`, `:windows7`, `:windows8`, `:windows10`
1293
1310
 
1311
+ **NOTE:** Windows 10 will be the last major version bump for Windows (for now, at least).
1312
+
1294
1313
  #### Macintosh
1295
1314
 
1296
1315
  Regular: `:macintosh`
1297
1316
 
1298
- `:cheetah`, `:puma`, `:jaguar`, `:panther`, `:tiger`, `:leopard`, `:snow_leopard`, `:lion`, `:mountain_lion`, `:mavericks`, `:yosemite`, `:el_capitan`, `:sierra`
1317
+ `:cheetah`, `:puma`, `:jaguar`, `:panther`, `:tiger`, `:leopard`, `:snow_leopard`, `:lion`, `:mountain_lion`, `:mavericks`, `:yosemite`, `:el_capitan`, `:sierra`, `:high_sierra`, `:mojave`
1318
+
1319
+ **NOTE:** macOS version 10 and up increment the _minor version_ instead of the _major version_ in a new major release.
1299
1320
 
1300
1321
  ### Devices
1301
1322
 
@@ -48,9 +48,9 @@ module Browserino
48
48
  invertable(@arm ||= architecture == :arm)
49
49
  end
50
50
 
51
- def is?(sm, opts = {})
52
- return invertable send("#{sm}?", opts[:version]) if opts && opts[:version]
53
- invertable send("#{sm}?")
51
+ def is?(sym, opt = {})
52
+ return invertable send("#{sym}?", opt[:version]) if opt && opt[:version]
53
+ invertable send("#{sym}?")
54
54
  end
55
55
 
56
56
  def not?(sym, opts = {})
@@ -81,7 +81,7 @@ module Browserino
81
81
  end
82
82
 
83
83
  def to_json(*args)
84
- @json ||= properties.each_with_object({}) do |(prop, val), hsh|
84
+ @to_json ||= properties.each_with_object({}) do |(prop, val), hsh|
85
85
  hsh[prop] = val.is_a?(Version) && val.full || val
86
86
  end.to_json(*args)
87
87
  end
@@ -93,9 +93,9 @@ module Browserino
93
93
  end
94
94
 
95
95
  def to_s
96
- @str ||= %i[name engine platform device].each_with_object([]) do |prop, a|
97
- a << properties[prop].to_s.strip
98
- a << label_or_version_name(prop)
96
+ @to_s ||= %i[name engine platform device].each_with_object([]) do |pr, a|
97
+ a << properties[pr].to_s.strip
98
+ a << label_or_version_name(pr)
99
99
  end.compact.reject(&:empty?).uniq.join ' '
100
100
  end
101
101
 
@@ -112,13 +112,13 @@ module Browserino
112
112
  end
113
113
 
114
114
  # scary, I know, but a falsy value is all we need to return if some
115
- # property isn't known or true as any property can be defined on the Client
116
- def method_missing(_, *__, &___)
115
+ # property isn't known as any property can be defined on the Client
116
+ def method_missing(*)
117
117
  invertable nil
118
118
  end
119
119
 
120
120
  # always respond to missing, read method_missing comment
121
- def respond_to_missing?(_, *__, &___)
121
+ def respond_to_missing?(*)
122
122
  true
123
123
  end
124
124
 
@@ -24,7 +24,16 @@ Browserino.config.define do
24
24
  label :lollipop, for: :android, range: '5'..'5.9.9'
25
25
  label :marshmallow, for: :android, range: '6'..'6.9.9'
26
26
  label :nougat, for: :android, range: '7'..'7.9.9'
27
- label :oreo, for: :android, range: '8.0'..'8.9.9'
27
+ label :oreo, for: :android, range: '8'..'8.9.9'
28
+
29
+ # support android up to the letter Z by following their version scheme which
30
+ # uses versions X.0.0 up to X.9.9. the callable methods will be named like
31
+ # android_[LETTER] where letter can be anything between 'p' and 'z' inclusive
32
+ (:p..:z).reduce 9 do |vnum, letter|
33
+ label "android_#{letter}".to_sym, for: :android,
34
+ range: vnum.to_s.."#{vnum}.9.9"
35
+ vnum + 1
36
+ end
28
37
 
29
38
  label :cheetah, for: :macintosh, range: '10.0'..'10.0.9'
30
39
  label :puma, for: :macintosh, range: '10.1'..'10.1.9'
@@ -40,6 +49,7 @@ Browserino.config.define do
40
49
  label :el_capitan, for: :macintosh, range: '10.11'..'10.11.9'
41
50
  label :sierra, for: :macintosh, range: '10.12'..'10.12.9'
42
51
  label :high_sierra, for: :macintosh, range: '10.13'..'10.13.9'
52
+ label :mojave, for: :macintosh, range: '10.14'..'10.14.9'
43
53
 
44
54
  label :dos, for: :windows, range: '3.1'..'4.0'
45
55
  label :windows98, for: :windows, range: '98'..'98.9.9'
@@ -49,7 +49,7 @@ module Browserino
49
49
  @properties[sym]
50
50
  end
51
51
 
52
- def respond_to_missing?(_, *__, &___)
52
+ def respond_to_missing?(*)
53
53
  true
54
54
  end
55
55
  end
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Browserino
4
- def self.analyze(ua, matcher = nil)
4
+ def self.analyze(uas, matcher = nil)
5
5
  @defaults ||= config.global_matchers.map(&:properties).reduce(&:merge)
6
6
 
7
7
  props = @defaults.merge(matcher && matcher.properties || {})
8
8
  like = props.delete :like
9
- props = mass_collect props, ua
10
- like = Client.new props.merge(like_attrs(props, like, ua)) if like
9
+ props = mass_collect props, uas
10
+ like = Client.new props.merge(like_attrs(props, like, uas)) if like
11
11
 
12
12
  Client.new props, like
13
13
  end
@@ -75,15 +75,15 @@ module Browserino
75
75
  Regexp.new pat, get_flags(*detect[:flags].to_a)
76
76
  end
77
77
 
78
- def self.mass_collect(props, ua)
79
- props = collect props, ua
80
- props = collect_with_smart_watchers props, ua
78
+ def self.mass_collect(props, uas)
79
+ props = collect props, uas
80
+ props = collect_with_smart_watchers props, uas
81
81
  with_labels props
82
82
  end
83
83
 
84
- def self.collect(properties, ua)
84
+ def self.collect(properties, uas)
85
85
  properties.each_with_object({}) do |(n, v), r|
86
- r[n] = convert (v.is_a?(Regexp) ? v.match(ua).to_a[1] : v), format: n
86
+ r[n] = convert (v.is_a?(Regexp) ? v.match(uas).to_a[1] : v), format: n
87
87
  end
88
88
  end
89
89
 
@@ -6,12 +6,12 @@ module Browserino
6
6
  @options = options
7
7
  end
8
8
 
9
- def method_missing(sym, *args, &___)
9
+ def method_missing(sym, *args)
10
10
  return @options[opt(sym)] == args.first if args.any?
11
11
  @options[opt(sym)]
12
12
  end
13
13
 
14
- def respond_to_missing?(sym, *_, &___)
14
+ def respond_to_missing?(sym, *)
15
15
  option? sym
16
16
  end
17
17
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Browserino
4
- def self.version(current = '4.2.3')
4
+ def self.version(current = '4.3.0')
5
5
  @version ||= Version.new current
6
6
  end
7
7
 
@@ -22,7 +22,7 @@ module Browserino
22
22
  end
23
23
 
24
24
  def to_s
25
- @str ||= join '.'
25
+ @to_s ||= join '.'
26
26
  end
27
27
 
28
28
  def <(other)
@@ -72,13 +72,13 @@ module Browserino
72
72
  end.map(&:to_i)
73
73
  end
74
74
 
75
- def compare(op, other)
75
+ def compare(opr, other)
76
76
  other = Version.new other unless other.is_a? Version
77
77
  subsize = [size, other.size].min
78
78
 
79
79
  return if subsize.zero? && size > 0
80
80
 
81
- (self[0...subsize] <=> other[0...subsize]).send op, 0
81
+ (self[0...subsize] <=> other[0...subsize]).send opr, 0
82
82
  end
83
83
  end
84
84
  end
data/lib/browserino.rb CHANGED
@@ -15,11 +15,11 @@ require_relative 'browserino/definitions/filters'
15
15
  require_relative 'browserino/definitions/labels'
16
16
 
17
17
  module Browserino
18
- def self.parse(ua)
19
- config.before_parse.each { |b| ua = b.call ua } if config.before_parse.any?
18
+ def self.parse(uas)
19
+ config.before_parse.each { |b| uas = b.call uas }
20
20
  config.matchers.each do |matcher|
21
- return analyze ua, matcher if matcher.matches? ua
21
+ return analyze uas, matcher if matcher.matches? uas
22
22
  end
23
- analyze ua
23
+ analyze uas
24
24
  end
25
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: browserino
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.3
4
+ version: 4.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sidney Liebrand
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-24 00:00:00.000000000 Z
11
+ date: 2018-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -173,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
173
173
  version: '0'
174
174
  requirements: []
175
175
  rubyforge_project:
176
- rubygems_version: 2.6.11
176
+ rubygems_version: 2.7.6
177
177
  signing_key:
178
178
  specification_version: 4
179
179
  summary: A browser identification gem with command line and Rails (>= 3.2.0) integration