versionaire 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b35b90792f1bc9448598be77438f533e87a7ad04
4
+ data.tar.gz: a07469a9bd80e8ba46578d69c028329c31fcc6a9
5
+ SHA512:
6
+ metadata.gz: 2c0da5f8dae0567e5d40529c44d351dc2fd3361553187ff46e1441436679fe7cbf53b12c9a4624a3e79df571c5675ac28529589cdd29c8e6fde6b32653b8813e
7
+ data.tar.gz: 30235a347bdd70d65553ea29f6da8a9016fde40741497574b896562eadd180739669289d631aa2218764b65b136cb5dcc381d98e8517cc58dd4998c148981d7d
Binary file
Binary file
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2016 [Alchemists](https://www.alchemists.io).
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,216 @@
1
+ # Versionaire
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/versionaire.svg)](http://badge.fury.io/rb/versionaire)
4
+ [![Code Climate GPA](https://codeclimate.com/github/bkuhlmann/versionaire.svg)](https://codeclimate.com/github/bkuhlmann/versionaire)
5
+ [![Code Climate Coverage](https://codeclimate.com/github/bkuhlmann/versionaire/coverage.svg)](https://codeclimate.com/github/bkuhlmann/versionaire)
6
+ [![Gemnasium Status](https://gemnasium.com/bkuhlmann/versionaire.svg)](https://gemnasium.com/bkuhlmann/versionaire)
7
+ [![Travis CI Status](https://secure.travis-ci.org/bkuhlmann/versionaire.svg)](https://travis-ci.org/bkuhlmann/versionaire)
8
+ [![Patreon](https://img.shields.io/badge/patreon-donate-brightgreen.svg)](https://www.patreon.com/bkuhlmann)
9
+
10
+ Provides immutable, semantic versioning.
11
+
12
+ <!-- Tocer[start]: Auto-generated, don't remove. -->
13
+
14
+ # Table of Contents
15
+
16
+ - [Features](#features)
17
+ - [Screencasts](#screencasts)
18
+ - [Requirements](#requirements)
19
+ - [Setup](#setup)
20
+ - [Usage](#usage)
21
+ - [Basic](#basic)
22
+ - [Math](#math)
23
+ - [Add](#add)
24
+ - [Subtract](#subtract)
25
+ - [Comparisons](#comparisons)
26
+ - [Equality](#equality)
27
+ - [Identity](#identity)
28
+ - [Implicit Conversions](#implicit-conversions)
29
+ - [Explicit Conversions](#explicit-conversions)
30
+ - [Conversions (Casting)](#conversions-casting)
31
+ - [Tests](#tests)
32
+ - [Versioning](#versioning)
33
+ - [Code of Conduct](#code-of-conduct)
34
+ - [Contributions](#contributions)
35
+ - [License](#license)
36
+ - [History](#history)
37
+ - [Credits](#credits)
38
+
39
+ <!-- Tocer[finish]: Auto-generated, don't remove. -->
40
+
41
+ # Features
42
+
43
+ - Provides [Semantic Versioning](http://semver.org).
44
+ - Provides immutable version instances.
45
+ - Provides conversions (casts) from a `String`, `Array`, `Hash`, or `Version` to a new `Version`.
46
+ - Provides impicit conversion to a `String`.
47
+ - Provides explicit conversions to a `String`, `Array`, and a `Hash`.
48
+
49
+ # Screencasts
50
+
51
+ TBD
52
+
53
+ # Requirements
54
+
55
+ 0. [MRI 2.3.0](https://www.ruby-lang.org)
56
+
57
+ # Setup
58
+
59
+ For a secure install, type the following (recommended):
60
+
61
+ gem cert --add <(curl --location --silent https://www.alchemists.io/gem-public.pem)
62
+ gem install versionaire --trust-policy MediumSecurity
63
+
64
+ NOTE: A HighSecurity trust policy would be best but MediumSecurity enables signed gem verification while
65
+ allowing the installation of unsigned dependencies since they are beyond the scope of this gem.
66
+
67
+ For an insecure install, type the following (not recommended):
68
+
69
+ gem install versionaire
70
+
71
+ Add the following to your Gemfile:
72
+
73
+ gem "versionaire"
74
+
75
+ # Usage
76
+
77
+ ## Basic
78
+
79
+ A new version can be initialized in a variety of ways:
80
+
81
+ Versionaire::Version.new # "0.0.0"
82
+ Versionaire::Version.new major: 1 # "1.0.0"
83
+ Versionaire::Version.new major: 1, minor: 2 # "1.2.0"
84
+ Versionaire::Version.new major: 1, minor: 2, maintenance: 3 # "1.2.3"
85
+
86
+ ## Math
87
+
88
+ Versions can be added and subtracted from each other.
89
+
90
+ ### Add
91
+
92
+ version_1 = Versionaire::Version.new major: 1, minor: 2, maintenance: 3
93
+ version_2 = Versionaire::Version.new major: 2, minor: 5, maintenance: 7
94
+ version_1 + version_2 # "3.7.10"
95
+
96
+ ### Subtract
97
+
98
+ version_1 = Versionaire::Version.new major: 1, minor: 2, maintenance: 3
99
+ version_2 = Versionaire::Version.new major: 1, minor: 1, maintenance: 1
100
+ version_1 - version_2 # "0.1.2"
101
+
102
+ version_1 = Versionaire::Version.new major: 1
103
+ version_2 = Versionaire::Version.new major: 5
104
+ version_1 - version_2 # Fails with a Versionaire::Errors::NegativeNumber
105
+
106
+ ## Comparisons
107
+
108
+ Versions can be compared against other versions:
109
+
110
+ version_1 = Versionaire::Version.new major: 1
111
+ version_2 = Versionaire::Version.new major: 5
112
+
113
+ version_1 > version_2 # false
114
+ version_1 == version_2 # false
115
+ version_1 < version_2 # true
116
+
117
+ Versions can't be compared to similar objects:
118
+
119
+ version = Versionaire::Version.new major: 1
120
+
121
+ version == "1.0.0" # false
122
+ version == [1, 0, 0] # false
123
+ version == {major: 1, minor: 0, maintenance: 0} # false
124
+
125
+ ## Equality
126
+
127
+ Equality is based on the values that make up the version, not identity.
128
+
129
+ version = Versionaire::Version.new major: 1, minor: 2, maintenance: 3
130
+ identical = Versionaire::Version.new major: 1, minor: 2, maintenance: 3
131
+ different = Versionaire::Version.new major: 3
132
+
133
+ version == version # true
134
+ version == identical # true
135
+ version == different # false
136
+
137
+ This is the same behavior for `#eql?` method too.
138
+
139
+ ## Identity
140
+
141
+ Identity is composed of the values that make up the version plus the class:
142
+
143
+ version = Versionaire::Version.new major: 1, minor: 2, maintenance: 3
144
+ identical = Versionaire::Version.new major: 1, minor: 2, maintenance: 3
145
+ different = Versionaire::Version.new major: 3
146
+
147
+ version.hash # -4162833121614102126
148
+ identical.hash # -4162833121614102126
149
+ different.hash # -2082793513660996236
150
+
151
+ ## Implicit Conversions
152
+
153
+ Implicit conversion to a `String` is supported:
154
+
155
+ "1.0.0".match Versionaire::Version.new(major: 1) # <MatchData "1.0.0">
156
+
157
+ ## Explicit Conversions
158
+
159
+ Explicit converting to a `String`, `Array`, or `Hash` is supported:
160
+
161
+ version = Versionaire::Version.new
162
+
163
+ version.to_s # "0.0.0"
164
+ version.to_a # [0, 0, 0]
165
+ version.to_h # {major: 0, minor: 0, maintenance: 0}
166
+
167
+ ## Conversions (Casting)
168
+
169
+ The `Versionaire::Version` function is provided for explicit conversion (casting) to a new version:
170
+
171
+ version = Versionaire::Version.new major: 1
172
+
173
+ Versionaire::Version "1.0.0"
174
+ Versionaire::Version [1, 0, 0]
175
+ Versionaire::Version major: 1, minor: 0, maintenance: 0
176
+ Versionaire::Version version
177
+
178
+ Each of these conversions will result in a new version object that is equal to "1.0.0". When attempting to convert an
179
+ unsupported type, a `Versionaire::Errors::Conversion` exception will be thrown.
180
+
181
+ # Tests
182
+
183
+ To test, run:
184
+
185
+ bundle exec rake
186
+
187
+ # Versioning
188
+
189
+ Read [Semantic Versioning](http://semver.org) for details. Briefly, it means:
190
+
191
+ - Patch (x.y.Z) - Incremented for small, backwards compatible bug fixes.
192
+ - Minor (x.Y.z) - Incremented for new, backwards compatible public API enhancements and/or bug fixes.
193
+ - Major (X.y.z) - Incremented for any backwards incompatible public API changes.
194
+
195
+ # Code of Conduct
196
+
197
+ Please note that this project is released with a [CODE OF CONDUCT](CODE_OF_CONDUCT.md). By participating in this project
198
+ you agree to abide by its terms.
199
+
200
+ # Contributions
201
+
202
+ Read [CONTRIBUTING](CONTRIBUTING.md) for details.
203
+
204
+ # License
205
+
206
+ Copyright (c) 2016 [Alchemists](https://www.alchemists.io).
207
+ Read the [LICENSE](LICENSE.md) for details.
208
+
209
+ # History
210
+
211
+ Read the [CHANGELOG](CHANGELOG.md) for details.
212
+ Built with [Gemsmith](https://github.com/bkuhlmann/gemsmith).
213
+
214
+ # Credits
215
+
216
+ Developed by [Brooke Kuhlmann](https://www.alchemists.io) at [Alchemists](https://www.alchemists.io).
@@ -0,0 +1,7 @@
1
+ desc "Open IRB console for gem development environment"
2
+ task :console do
3
+ require "irb"
4
+ require "versionaire"
5
+ ARGV.clear
6
+ IRB.start
7
+ end
@@ -0,0 +1,6 @@
1
+ begin
2
+ require "rspec/core/rake_task"
3
+ RSpec::Core::RakeTask.new(:spec)
4
+ rescue LoadError => error
5
+ puts error.message
6
+ end
@@ -0,0 +1,6 @@
1
+ begin
2
+ require "rubocop/rake_task"
3
+ RuboCop::RakeTask.new
4
+ rescue LoadError => error
5
+ puts error.message
6
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "versionaire/errors/base"
4
+ require "versionaire/errors/conversion"
5
+ require "versionaire/errors/invalid_number"
6
+ require "versionaire/errors/negative_number"
7
+ require "versionaire/conversion"
8
+ require "versionaire/identity"
9
+ require "versionaire/version"
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The gem namespace.
4
+ module Versionaire
5
+ # Conversion function for casting (strict) a value into a version.
6
+ # rubocop:disable Style/MethodName
7
+ # rubocop:disable Metrics/MethodLength
8
+ # rubocop:disable Metrics/AbcSize
9
+ # rubocop:disable Metrics/CyclomaticComplexity
10
+ def Version value
11
+ case value
12
+ when String
13
+ fail(Errors::Conversion, Errors::Conversion.string_message) unless value =~ Version.format
14
+ Version.new Version.arguments(*value.tr("v", "").split(".").map(&:to_i))
15
+ when Array
16
+ fail(Errors::Conversion, Errors::Conversion.array_message) unless (0..3).cover?(value.size)
17
+ Version.new Version.arguments(*value.fill(0, value.size..2))
18
+ when Hash
19
+ valid = value.keys.all? { |key| Version.keys.include? key }
20
+ fail(Errors::Conversion, Errors::Conversion.hash_message) unless valid
21
+ Version.new value
22
+ when Version then value
23
+ else fail(Errors::Conversion, Errors::Conversion.primitive_message)
24
+ end
25
+ end
26
+
27
+ module_function :Version
28
+ end
@@ -0,0 +1,7 @@
1
+ module Versionaire
2
+ module Errors
3
+ # The base error class for all gem-related errors.
4
+ class Base < StandardError
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,22 @@
1
+ module Versionaire
2
+ module Errors
3
+ # Thrown when attempting to convert (cast) a primitive to a version.
4
+ class Conversion < Base
5
+ def self.string_message
6
+ %(Invalid string conversion. Use: "<major>.<minor>.<maintenance>" or "v<major>.<minor>.<maintenance>".)
7
+ end
8
+
9
+ def self.array_message
10
+ "Invalid array conversion. Use: [], [<major>], [<major>, <minor>], or [<major>, <minor>, <maintenance>]."
11
+ end
12
+
13
+ def self.hash_message
14
+ "Invalid hash conversion. Use: {major: <major>, minor: <minor>, maintenance: <maintenance>}."
15
+ end
16
+
17
+ def self.primitive_message
18
+ "Invalid conversion. Use: String, Array, or Hash."
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,10 @@
1
+ module Versionaire
2
+ module Errors
3
+ # Thrown when not using numbers.
4
+ class InvalidNumber < Base
5
+ def initialize message = "Major, minor, and maintenance must be a number."
6
+ super
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Versionaire
2
+ module Errors
3
+ # Thrown when numbers are negative.
4
+ class NegativeNumber < Base
5
+ def initialize message = "Major, minor, and maintenance must be a positive number."
6
+ super
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Versionaire
4
+ # Gem identity information.
5
+ module Identity
6
+ def self.name
7
+ "versionaire"
8
+ end
9
+
10
+ def self.label
11
+ "Versionaire"
12
+ end
13
+
14
+ def self.version
15
+ "0.1.0"
16
+ end
17
+
18
+ def self.version_label
19
+ "#{label} #{version}"
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Versionaire
4
+ # An immutable, semantic version value object.
5
+ class Version
6
+ include Comparable
7
+
8
+ attr_reader :major, :minor, :maintenance
9
+
10
+ def self.keys
11
+ %i(major minor maintenance)
12
+ end
13
+
14
+ def self.format
15
+ /\Av?\d{1,}\.\d{1,}\.\d{1,}\z/
16
+ end
17
+
18
+ def self.arguments major, minor, maintenance
19
+ Hash[keys.zip [major, minor, maintenance]]
20
+ end
21
+
22
+ def initialize major: 0, minor: 0, maintenance: 0
23
+ @major = major
24
+ @minor = minor
25
+ @maintenance = maintenance
26
+ validate
27
+ end
28
+
29
+ def + other
30
+ self.class.new self.class.arguments(*reduce(other, :+))
31
+ end
32
+
33
+ def - other
34
+ self.class.new self.class.arguments(*reduce(other, :-))
35
+ end
36
+
37
+ def == other
38
+ other.is_a?(Version) && to_s == other.to_s
39
+ end
40
+ alias eql? ==
41
+
42
+ def <=> other
43
+ to_s <=> other.to_s
44
+ end
45
+
46
+ def hash
47
+ [major, minor, maintenance, self.class].hash
48
+ end
49
+
50
+ def label
51
+ "v#{self}"
52
+ end
53
+
54
+ def to_s
55
+ "#{major}.#{minor}.#{maintenance}"
56
+ end
57
+ alias to_str to_s
58
+
59
+ def to_a
60
+ [major, minor, maintenance]
61
+ end
62
+
63
+ def to_h
64
+ {major: major, minor: minor, maintenance: maintenance}
65
+ end
66
+
67
+ private
68
+
69
+ def validate
70
+ fail(Errors::InvalidNumber) if to_a.any? { |number| !number.is_a? Integer }
71
+ fail(Errors::NegativeNumber) if to_a.any? { |number| number < 0 }
72
+ end
73
+
74
+ def reduce other, action
75
+ to_a.zip(other.to_a).map { |pair| pair.reduce(action) }
76
+ end
77
+ end
78
+ end
metadata ADDED
@@ -0,0 +1,305 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: versionaire
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Brooke Kuhlmann
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBBMQ8wDQYDVQQDDAZicm9v
14
+ a2UxGjAYBgoJkiaJk/IsZAEZFgphbGNoZW1pc3RzMRIwEAYKCZImiZPyLGQBGRYC
15
+ aW8wHhcNMTUwNzA1MTQ1MzExWhcNMTYwNzA0MTQ1MzExWjBBMQ8wDQYDVQQDDAZi
16
+ cm9va2UxGjAYBgoJkiaJk/IsZAEZFgphbGNoZW1pc3RzMRIwEAYKCZImiZPyLGQB
17
+ GRYCaW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzhOVcvLGBCceM
18
+ PppVpJLUKsnskWzc1VqBXmv30feKNw+MOxMQaDsIP421qwqGO/2JHY60Kuobssk+
19
+ 8/wqZkVFF/FFKxoQjuhlhc+VWLm8jWgXd4N1kwO2yytscQTzxc5qXarwA+36fqVH
20
+ RhBAHhjka+HdBI+6o3CXRHJoC47iav+QpR7u/wYl3gNq6MJO3MmTKqHegEDLjRN0
21
+ FJAr3bRAwq03ZtTuAVA2bdKLGThehe1RRRtJHJ/PHpmL2c203/GTXYtG6C8ILZIp
22
+ ZroTqQ8yglCJ+3hSOmodZqSAQ0Rj7GJgtuNH81qlSrHu5sTvoZjGmEqSIhvsSJ80
23
+ wKoPdZnFAgMBAAGjezB5MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
24
+ BBSUnF478a5lB4xuOBiktJdMJv6JmDAfBgNVHREEGDAWgRRicm9va2VAYWxjaGVt
25
+ aXN0cy5pbzAfBgNVHRIEGDAWgRRicm9va2VAYWxjaGVtaXN0cy5pbzANBgkqhkiG
26
+ 9w0BAQUFAAOCAQEAT7KtBXWsq1KA7NOSMeFEDeSvhrgdLwCG/37pIu0rjvx9iAW4
27
+ gncxV0MccqIUtaF+lekjlXkIO+rXAVjvdha23KtpFTW90dYXp4NLPnPlSdyvYzJy
28
+ FIAaWGvujOT8xEu4umd45q5aepE8li4bR071i5Z7F0trKNVYYrxjQFmH5SSKYRT/
29
+ fXtICtAh1de3z3SOSK58IMPwjuoApYBxiqlmx0Uhla7mrzCE5+NmLPit3hLH6JFK
30
+ aSif+qBc6oHD7EQWPF5cZkzkIURuwNwPBngZGxIKaMAgRhjGFXzUMAaq++r59cS9
31
+ xTfQ4k6fglKEgpnLAXiKdo2c8Ym+X4rIKFfedQ==
32
+ -----END CERTIFICATE-----
33
+ date: 2016-03-19 00:00:00.000000000 Z
34
+ dependencies:
35
+ - !ruby/object:Gem::Dependency
36
+ name: bundler
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '1.11'
42
+ type: :development
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '1.11'
49
+ - !ruby/object:Gem::Dependency
50
+ name: rake
51
+ requirement: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '10.0'
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '10.0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: gemsmith
65
+ requirement: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '7.4'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '7.4'
77
+ - !ruby/object:Gem::Dependency
78
+ name: pry
79
+ requirement: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ type: :development
85
+ prerelease: false
86
+ version_requirements: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ - !ruby/object:Gem::Dependency
92
+ name: pry-byebug
93
+ requirement: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ type: :development
99
+ prerelease: false
100
+ version_requirements: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ - !ruby/object:Gem::Dependency
106
+ name: pry-remote
107
+ requirement: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ type: :development
113
+ prerelease: false
114
+ version_requirements: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ - !ruby/object:Gem::Dependency
120
+ name: pry-state
121
+ requirement: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ type: :development
127
+ prerelease: false
128
+ version_requirements: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ - !ruby/object:Gem::Dependency
134
+ name: pry-rescue
135
+ requirement: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ type: :development
141
+ prerelease: false
142
+ version_requirements: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ - !ruby/object:Gem::Dependency
148
+ name: pry-stack_explorer
149
+ requirement: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ type: :development
155
+ prerelease: false
156
+ version_requirements: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ - !ruby/object:Gem::Dependency
162
+ name: rspec
163
+ requirement: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - "~>"
166
+ - !ruby/object:Gem::Version
167
+ version: '3.4'
168
+ type: :development
169
+ prerelease: false
170
+ version_requirements: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: '3.4'
175
+ - !ruby/object:Gem::Dependency
176
+ name: rb-fsevent
177
+ requirement: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ - !ruby/object:Gem::Dependency
190
+ name: guard-rspec
191
+ requirement: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
196
+ type: :development
197
+ prerelease: false
198
+ version_requirements: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: '0'
203
+ - !ruby/object:Gem::Dependency
204
+ name: terminal-notifier
205
+ requirement: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - ">="
208
+ - !ruby/object:Gem::Version
209
+ version: '0'
210
+ type: :development
211
+ prerelease: false
212
+ version_requirements: !ruby/object:Gem::Requirement
213
+ requirements:
214
+ - - ">="
215
+ - !ruby/object:Gem::Version
216
+ version: '0'
217
+ - !ruby/object:Gem::Dependency
218
+ name: terminal-notifier-guard
219
+ requirement: !ruby/object:Gem::Requirement
220
+ requirements:
221
+ - - ">="
222
+ - !ruby/object:Gem::Version
223
+ version: '0'
224
+ type: :development
225
+ prerelease: false
226
+ version_requirements: !ruby/object:Gem::Requirement
227
+ requirements:
228
+ - - ">="
229
+ - !ruby/object:Gem::Version
230
+ version: '0'
231
+ - !ruby/object:Gem::Dependency
232
+ name: rubocop
233
+ requirement: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - "~>"
236
+ - !ruby/object:Gem::Version
237
+ version: '0.37'
238
+ type: :development
239
+ prerelease: false
240
+ version_requirements: !ruby/object:Gem::Requirement
241
+ requirements:
242
+ - - "~>"
243
+ - !ruby/object:Gem::Version
244
+ version: '0.37'
245
+ - !ruby/object:Gem::Dependency
246
+ name: codeclimate-test-reporter
247
+ requirement: !ruby/object:Gem::Requirement
248
+ requirements:
249
+ - - ">="
250
+ - !ruby/object:Gem::Version
251
+ version: '0'
252
+ type: :development
253
+ prerelease: false
254
+ version_requirements: !ruby/object:Gem::Requirement
255
+ requirements:
256
+ - - ">="
257
+ - !ruby/object:Gem::Version
258
+ version: '0'
259
+ description: Provides immutable, semantic versioning.
260
+ email:
261
+ - brooke@alchemists.io
262
+ executables: []
263
+ extensions: []
264
+ extra_rdoc_files:
265
+ - README.md
266
+ - LICENSE.md
267
+ files:
268
+ - LICENSE.md
269
+ - README.md
270
+ - lib/tasks/console.rake
271
+ - lib/tasks/rspec.rake
272
+ - lib/tasks/rubocop.rake
273
+ - lib/versionaire.rb
274
+ - lib/versionaire/conversion.rb
275
+ - lib/versionaire/errors/base.rb
276
+ - lib/versionaire/errors/conversion.rb
277
+ - lib/versionaire/errors/invalid_number.rb
278
+ - lib/versionaire/errors/negative_number.rb
279
+ - lib/versionaire/identity.rb
280
+ - lib/versionaire/version.rb
281
+ homepage: https://github.com/bkuhlmann/versionaire
282
+ licenses:
283
+ - MIT
284
+ metadata: {}
285
+ post_install_message:
286
+ rdoc_options: []
287
+ require_paths:
288
+ - lib
289
+ required_ruby_version: !ruby/object:Gem::Requirement
290
+ requirements:
291
+ - - ">="
292
+ - !ruby/object:Gem::Version
293
+ version: '0'
294
+ required_rubygems_version: !ruby/object:Gem::Requirement
295
+ requirements:
296
+ - - ">="
297
+ - !ruby/object:Gem::Version
298
+ version: '0'
299
+ requirements: []
300
+ rubyforge_project:
301
+ rubygems_version: 2.6.2
302
+ signing_key:
303
+ specification_version: 4
304
+ summary: Provides immutable, semantic versioning.
305
+ test_files: []
@@ -0,0 +1,2 @@
1
+ _t{��`��Z;���5���W�CL�s�!$X�@Y*ȸ`��m�v��/�'�/ܕ4D����� �ŗ+�z��r�<m�VQ�[gD[yȶ�tqp̴r�%
2
+ ���x�������-����}�3�y���&��r��L�*��7��܈�z�&��������,!w�Y���G��'�(�&�O"~���5��U�_��\v-IW��_������ Se�3jIS����T�mi�����~n�|)�ء