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 +5 -5
- data/.gitignore +1 -0
- data/.travis.yml +1 -2
- data/CHANGELOG.md +11 -0
- data/README.md +107 -86
- data/lib/browserino/client.rb +10 -10
- data/lib/browserino/definitions/labels.rb +11 -1
- data/lib/browserino/matcher.rb +1 -1
- data/lib/browserino/methods.rb +8 -8
- data/lib/browserino/options.rb +2 -2
- data/lib/browserino/version.rb +4 -4
- data/lib/browserino.rb +4 -4
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: efdb55a48625acb66a20129309cf291e9ea6603670a255cb8a2be98b9aa15827
|
4
|
+
data.tar.gz: d2aa4e55754f89785fef2ff1c0377a18ed722a54a7a5fa43d99f0db2f8cd44f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 784017fbefd8446103ac5543c7738e4a5162eeb7ed440466e50ac505fd7a9f38964fcf1c1a4b235ef4846432b91cc0be80e520d2f8fc7448bf2116d63076eb53
|
7
|
+
data.tar.gz: 6e0938abf8f8f0572c2936be82c9f9bce3d031b7ef4f1022f756b29e790d0236e045f5d8bd1f9323edc2cfd308352ada7fe2fddc60b1eeaa03b7a091dbf35605
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
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
|
5
|
-
|
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
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
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
|
|
data/lib/browserino/client.rb
CHANGED
@@ -48,9 +48,9 @@ module Browserino
|
|
48
48
|
invertable(@arm ||= architecture == :arm)
|
49
49
|
end
|
50
50
|
|
51
|
-
def is?(
|
52
|
-
return invertable send("#{
|
53
|
-
invertable send("#{
|
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
|
-
@
|
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
|
-
@
|
97
|
-
a << properties[
|
98
|
-
a << label_or_version_name(
|
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
|
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
|
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'
|
data/lib/browserino/matcher.rb
CHANGED
data/lib/browserino/methods.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Browserino
|
4
|
-
def self.analyze(
|
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,
|
10
|
-
like = Client.new props.merge(like_attrs(props, 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,
|
79
|
-
props = collect props,
|
80
|
-
props = collect_with_smart_watchers props,
|
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,
|
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(
|
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
|
|
data/lib/browserino/options.rb
CHANGED
@@ -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
|
|
data/lib/browserino/version.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Browserino
|
4
|
-
def self.version(current = '4.
|
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
|
-
@
|
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(
|
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
|
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(
|
19
|
-
config.before_parse.each { |b|
|
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
|
21
|
+
return analyze uas, matcher if matcher.matches? uas
|
22
22
|
end
|
23
|
-
analyze
|
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.
|
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:
|
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
|
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
|