versionaire 0.1.0

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.
@@ -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�|)�ء