mixlib-versioning 1.1.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.expeditor/config.yml +14 -0
  3. data/.expeditor/update_version.sh +9 -0
  4. data/.github/CODEOWNERS +3 -0
  5. data/.travis.yml +20 -19
  6. data/CHANGELOG.md +21 -7
  7. data/Gemfile +4 -4
  8. data/README.md +48 -29
  9. data/Rakefile +20 -6
  10. data/VERSION +1 -0
  11. data/lib/mixlib/versioning.rb +10 -8
  12. data/lib/mixlib/versioning/format.rb +25 -22
  13. data/lib/mixlib/versioning/format/git_describe.rb +1 -1
  14. data/lib/mixlib/versioning/format/opscode_semver.rb +3 -3
  15. data/lib/mixlib/versioning/format/partial_semver.rb +62 -0
  16. data/lib/mixlib/versioning/format/rubygems.rb +9 -3
  17. data/lib/mixlib/versioning/format/semver.rb +1 -1
  18. data/lib/mixlib/versioning/version.rb +1 -1
  19. data/mixlib-versioning.gemspec +14 -14
  20. data/spec/mixlib/versioning/format/git_describe_spec.rb +51 -51
  21. data/spec/mixlib/versioning/format/opscode_semver_spec.rb +43 -43
  22. data/spec/mixlib/versioning/format/partial_semver_spec.rb +121 -0
  23. data/spec/mixlib/versioning/format/rubygems_spec.rb +40 -40
  24. data/spec/mixlib/versioning/format/semver_spec.rb +31 -31
  25. data/spec/mixlib/versioning/format_spec.rb +39 -12
  26. data/spec/mixlib/versioning/versioning_spec.rb +100 -100
  27. data/spec/spec_helper.rb +5 -6
  28. data/spec/support/shared_examples/basic_semver.rb +7 -7
  29. data/spec/support/shared_examples/behaviors/comparable.rb +14 -14
  30. data/spec/support/shared_examples/behaviors/comparable_types.rb +56 -0
  31. data/spec/support/shared_examples/behaviors/filterable.rb +11 -11
  32. data/spec/support/shared_examples/behaviors/parses_valid_version_strings.rb +1 -1
  33. data/spec/support/shared_examples/behaviors/rejects_invalid_version_strings.rb +1 -1
  34. data/spec/support/shared_examples/behaviors/serializable.rb +7 -7
  35. data/spec/support/shared_examples/behaviors/sortable.rb +9 -9
  36. data/spec/support/shared_examples/semver.rb +54 -54
  37. metadata +25 -18
  38. data/.rubocop.yml +0 -22
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 28ef6df6d8dc796e621f82bcee6b89aba96c33c5
4
- data.tar.gz: 3e245ccbd6e91f1580fb46b9cceb8beaef3f9571
3
+ metadata.gz: 75105073144a2c6b947409ff31f4fae6aaa4fb77
4
+ data.tar.gz: 27c19f85adc97a86c005da5233187ddfee957eee
5
5
  SHA512:
6
- metadata.gz: 5ad67861275ced52c5be0ef6f253a12417321b17c3f60211cc33e0a676224f0973270599fbc330be4ca67136f8f988128a67f25dc4dd98b3cf9e6108578a19e7
7
- data.tar.gz: cf522492b9b76fad90a08330b7c5038c9b80e734fb6a309ff4925c3ee60400c294a62bb0d10355ed984ff868432636566224fcecf9c8166ec962308071f576da
6
+ metadata.gz: d6affd7ced58f3caf0ebd9e091e7cdd96745c3cfb0c0e95ab0fc462af358194fb7142c61087acdad3c5934dddfebcf411d4afdb33433654ff3f66419dcd84581
7
+ data.tar.gz: cc5f16b52af8badc2e016a97f1d799e62e81e29548836b420bac1bf47a6b7282f5b6ef14d36b596e0e8f2970d57f0198c08f4ba296253d416b405da65aa0b43b
@@ -0,0 +1,14 @@
1
+ slack:
2
+ notify_channel: eng-services-alerts
3
+
4
+ github:
5
+ maintainer_group: chef/engineering-services
6
+ version_tag_format: v{{version}}
7
+
8
+ merge_actions:
9
+ built_in:bump_version:
10
+ ignore_labels: "Version: Skip Bump"
11
+ bash:.expeditor/update_version.sh:
12
+ only_if: built_in:bump_version
13
+ built_in:update_changelog:
14
+ ignore_labels: "Changelog: Skip Update"
@@ -0,0 +1,9 @@
1
+ #!/bin/bash
2
+ #
3
+ # After a PR merge, Chef Expeditor will bump the PATCH version in the VERSION file.
4
+ # It then executes this file to update any other files/components with that new version.
5
+ #
6
+
7
+ set -evx
8
+
9
+ sed -i -r "s/VERSION = \".+\"/VERSION = \"$(cat VERSION)\"/" lib/mixlib/versioning/version.rb
@@ -0,0 +1,3 @@
1
+ # Order is important. The last matching pattern has the most precedence.
2
+
3
+ * @chef/engineering-services
@@ -1,24 +1,25 @@
1
- rvm:
2
- - 1.9.3
3
- - 2.0.0
4
- - 2.1.0
5
-
6
- bundler_args: --jobs 7
1
+ sudo: false
2
+ language: ruby
3
+ cache: bundler
7
4
 
5
+ matrix:
6
+ include:
7
+ - rvm: 2.3.4
8
+ - rvm: 2.4.1
9
+ - rvm: ruby-head
10
+ allow_failures:
11
+ - rvm: ruby-head
8
12
  branches:
9
13
  only:
10
- - master
14
+ - master
15
+
16
+ bundler_args: --without changelog
11
17
 
12
- script: bundle exec rake travis:ci
18
+ before_install:
19
+ - gem install bundler
20
+ - bundle --version
21
+ - gem update --system
22
+ - gem --version
13
23
 
14
- notifications:
15
- hipchat:
16
- on_change: true
17
- on_failure: true
18
- on_success: false
19
- on_pull_requests: false
20
- rooms:
21
- # Build Statuses
22
- - secure: IycrY52k8dhilnU3B2c8mem9LzofQlMISUZSDk2tys0cvW0U3lnCQQiSvT5kTtiKztUABEiT2UqU2QYwUfeW/yYrO3NjB2OBqehRKnEn2oEaapcIugvtsQMySfYqJ7IsKpyh3vTMmgyKPw3OCKh5OJn26lMdHH2R91SXcbUezKI=
23
- # Release Engineering
24
- - secure: JJlujHzKxsY74bfJHNxH6fQOF5IULeJECXkxx6uU/T+CjxydINwAH5lQ1RUleLZlH0BmQDgxK+O46hiuWdYAyhgCJY9bQOBWG+aQusXIoLvV3qj+rU0dX1wvjEuO/NzkZTPZy7HMGqmCxTdmx/OawoNnpXU8qsI/OJqbISv2bGo=
24
+ script:
25
+ - bundle exec rake travis:ci
@@ -1,18 +1,32 @@
1
- v1.1.0 / 2015-06-15
2
- -------------------
1
+ # Mixlib::Versioning Changes
3
2
 
4
- ### New features
3
+ <!-- latest_release -->
4
+ ## [v1.2.1](https://github.com/chef/mixlib-versioning/tree/v1.2.1) (2017-07-24)
5
+
6
+ #### Merged Pull Requests
7
+ - Use Expeditor for version bumping and CHANGELOG generation [#23](https://github.com/chef/mixlib-versioning/pull/23) ([schisamo](https://github.com/schisamo))
8
+ <!-- latest_release -->
9
+
10
+ <!-- release_rollup -->
11
+ ### Changes since latest stable release
12
+
13
+ #### Merged Pull Requests
14
+ - Use Expeditor for version bumping and CHANGELOG generation [#23](https://github.com/chef/mixlib-versioning/pull/23) ([schisamo](https://github.com/schisamo)) <!-- 1.2.1 -->
15
+ <!-- release_rollup -->
16
+
17
+ ## [1.1.0](https://github.com/chef/mixlib-versioning/tree/v1.1.0) (2015-06-15)
18
+
19
+ #### New features
5
20
 
6
21
  * Allow parse to take a list of formats to choose from
7
22
  * Update to SemVer 2.0.0
8
23
 
9
- ### Improvements
24
+ #### Improvements
10
25
 
11
26
  * Add ability to compare directly with strings.
12
27
  * Lock to RuboCop 0.31.0 (also fix style errors)
13
28
 
14
29
 
15
- v1.0.0 / 2013-03-29
16
- -------------------
30
+ ## [1.0.0](https://github.com/chef/mixlib-versioning/tree/v1.0.0) (2013-03-29)
17
31
 
18
- * The initial release. Versioning parsing shouldn't suck.
32
+ * The initial release. Versioning parsing shouldn't suck.
data/Gemfile CHANGED
@@ -1,8 +1,8 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
  gemspec
3
3
 
4
4
  group :docs do
5
- gem 'yard', '~> 0.8'
6
- gem 'redcarpet', '~> 2.2'
7
- gem 'github-markup', '~> 0.7'
5
+ gem "yard", "~> 0.8"
6
+ gem "redcarpet", "~> 2.2"
7
+ gem "github-markup", "~> 0.7"
8
8
  end
data/README.md CHANGED
@@ -1,19 +1,16 @@
1
1
  # Mixlib::Versioning
2
2
 
3
- [![Build Status](https://travis-ci.org/chef/mixlib-versioning.png?branch=master)](https://travis-ci.org/chef/mixlib-versioning)
4
- [![Code Climate](https://codeclimate.com/github/chef/mixlib-versioning.png)](https://codeclimate.com/github/chef/mixlib-versioning)
3
+ [![Build Status](https://travis-ci.org/chef/mixlib-versioning.svg?branch=master)](https://travis-ci.org/chef/mixlib-versioning) [![Code Climate](https://codeclimate.com/github/chef/mixlib-versioning.svg)](https://codeclimate.com/github/chef/mixlib-versioning)
5
4
 
6
5
  This project is managed by the CHEF Release Engineering team. For more information on the Release Engineering team's contribution, triage, and release process, please consult the [CHEF Release Engineering OSS Management Guide](https://docs.google.com/a/chef.io/document/d/1oJB0vZb_3bl7_ZU2YMDBkMFdL-EWplW1BJv_FXTUOzg/edit).
7
6
 
8
- Versioning is hard! `mixlib-versioning` is a general Ruby library that allows
9
- you to parse, compare and manipulate version numbers in multiple formats.
10
- Currently the following version string formats are supported:
7
+ Versioning is hard! `mixlib-versioning` is a general Ruby library that allows you to parse, compare and manipulate version numbers in multiple formats. Currently the following version string formats are supported:
11
8
 
12
- ### SemVer 2.0.0
9
+ ## SemVer 2.0.0
13
10
 
14
11
  **Specification:**
15
12
 
16
- http://semver.org/
13
+ <http://semver.org/>
17
14
 
18
15
  **Supported Formats:**
19
16
 
@@ -23,10 +20,9 @@ MAJOR.MINOR.PATCH-PRERELEASE
23
20
  MAJOR.MINOR.PATCH-PRERELEASE+BUILD
24
21
  ```
25
22
 
26
- Not much to say here except: *YUNO USE SEMVER!* The specification is focused and
27
- brief, do yourself a favor and go read it.
23
+ Not much to say here except: _YUNO USE SEMVER!_ The specification is focused and brief, do yourself a favor and go read it.
28
24
 
29
- ### Opscode SemVer
25
+ ## Opscode SemVer
30
26
 
31
27
  **Supported Formats:**
32
28
 
@@ -43,11 +39,9 @@ MAJOR.MINOR.PATCH-beta.INDEX+YYYYMMDDHHMMSS.git.COMMITS_SINCE.SHA1
43
39
  MAJOR.MINOR.PATCH-rc.INDEX+YYYYMMDDHHMMSS.git.COMMITS_SINCE.SHA1
44
40
  ```
45
41
 
46
- All the fun of regular SemVer with some extra limits around what constitutes a
47
- valid pre-release or build version string.
42
+ All the fun of regular SemVer with some extra limits around what constitutes a valid pre-release or build version string.
48
43
 
49
- Valid prerelease version strings use the format: `PRERELEASE_STAGE.INDEX`.
50
- Valid prerelease stages include: `alpha`, `beta` and `rc`.
44
+ Valid prerelease version strings use the format: `PRERELEASE_STAGE.INDEX`. Valid prerelease stages include: `alpha`, `beta` and `rc`.
51
45
 
52
46
  All of the following are acceptable Opscode SemVer pre-release versions:
53
47
 
@@ -60,9 +54,7 @@ All of the following are acceptable Opscode SemVer pre-release versions:
60
54
  11.0.8-rc.2
61
55
  ```
62
56
 
63
- Build version strings are limited to timestamps (`YYYYMMDDHHMMSS`), git
64
- describe strings (`git.COMMITS_SINCE.SHA1`) or a combination of the two
65
- (`YYYYMMDDHHMMSS.git.COMMITS_SINCE.SHA1`).
57
+ Build version strings are limited to timestamps (`YYYYMMDDHHMMSS`), git describe strings (`git.COMMITS_SINCE.SHA1`) or a combination of the two (`YYYYMMDDHHMMSS.git.COMMITS_SINCE.SHA1`).
66
58
 
67
59
  All of the following are acceptable Opscode build versions:
68
60
 
@@ -79,13 +71,13 @@ And as is true with regular SemVer you can mix pre-release and build versions:
79
71
  11.0.8-alpha.2+20130308110833.git.2.94a1dde
80
72
  ```
81
73
 
82
- ### Rubygems
74
+ ## Rubygems
83
75
 
84
76
  **specification:**
85
77
 
86
- http://docs.rubygems.org/read/chapter/7
78
+ <http://docs.rubygems.org/read/chapter/7>
87
79
 
88
- http://guides.rubygems.org/patterns/
80
+ <http://guides.rubygems.org/patterns/>
89
81
 
90
82
  **Supported Formats:**
91
83
 
@@ -94,9 +86,7 @@ MAJOR.MINOR.PATCH
94
86
  MAJOR.MINOR.PATCH.PRERELEASE
95
87
  ```
96
88
 
97
- Rubygems is *almost* SemVer compliant but it separates the main version from
98
- the pre-release version using a "dot". It also does not have the notion of a
99
- build version like SemVer.
89
+ Rubygems is _almost_ SemVer compliant but it separates the main version from the pre-release version using a "dot". It also does not have the notion of a build version like SemVer.
100
90
 
101
91
  Examples of valid Rubygems version strings:
102
92
 
@@ -108,11 +98,11 @@ Examples of valid Rubygems version strings:
108
98
  10.1.1.rc.0
109
99
  ```
110
100
 
111
- ### Git Describe
101
+ ## Git Describe
112
102
 
113
103
  **Specification:**
114
104
 
115
- http://git-scm.com/docs/git-describe
105
+ <http://git-scm.com/docs/git-describe>
116
106
 
117
107
  **Supported Formats:**
118
108
 
@@ -132,19 +122,42 @@ Examples of valid Git Describe version strings:
132
122
  11.0.0-alpha.1-1-gcea071e
133
123
  ```
134
124
 
125
+
126
+ ## SemVer Partial
127
+
128
+
129
+ ```text
130
+ MAJOR
131
+ MAJOR.MINOR
132
+ ```
133
+
134
+ Examples of valid SemVer Partial version strings:
135
+
136
+ ```text
137
+ 1
138
+ 0.1
139
+ 1.0
140
+ ```
141
+
135
142
  ## Installation
136
143
 
137
144
  Add this line to your application's Gemfile:
138
145
 
139
- gem 'mixlib-versioning'
146
+ ```
147
+ gem 'mixlib-versioning'
148
+ ```
140
149
 
141
150
  And then execute:
142
151
 
143
- $ bundle
152
+ ```
153
+ $ bundle
154
+ ```
144
155
 
145
156
  Or install it yourself as:
146
157
 
147
- $ gem install mixlib-semver
158
+ ```
159
+ $ gem install mixlib-semver
160
+ ```
148
161
 
149
162
  ## Usage
150
163
 
@@ -336,15 +349,20 @@ All documentation is written using YARD. You can generate a by running:
336
349
  rake yard
337
350
  ```
338
351
 
352
+ ## Contributing
353
+
354
+ For information on contributing to this project see <https://github.com/chef/chef/blob/master/CONTRIBUTING.md>
355
+
339
356
  ## License
340
357
 
341
358
  | | |
342
359
  |:---------------------|:-----------------------------------------|
343
360
  | **Author:** | Seth Chisamore (schisamo@chef.io)
344
361
  | **Author:** | Christopher Maier (cm@chef.io)
345
- | **Copyright:** | Copyright (c) 2013 Opscode, Inc.
362
+ | **Copyright:** | Copyright (c) 2013-2017 Chef Software, Inc.
346
363
  | **License:** | Apache License, Version 2.0
347
364
 
365
+ ```text
348
366
  Licensed under the Apache License, Version 2.0 (the "License");
349
367
  you may not use this file except in compliance with the License.
350
368
  You may obtain a copy of the License at
@@ -356,3 +374,4 @@ distributed under the License is distributed on an "AS IS" BASIS,
356
374
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
357
375
  See the License for the specific language governing permissions and
358
376
  limitations under the License.
377
+ ```
data/Rakefile CHANGED
@@ -1,17 +1,31 @@
1
- require 'bundler/gem_tasks'
1
+ require "bundler/gem_tasks"
2
+
3
+ require "rspec/core/rake_task"
4
+ require "mixlib/versioning/version"
2
5
 
3
- require 'rspec/core/rake_task'
4
6
  RSpec::Core::RakeTask.new(:unit)
5
7
 
6
- require 'rubocop/rake_task'
7
- desc 'Run Ruby style checks'
8
+ require "chefstyle"
9
+ require "rubocop/rake_task"
10
+ desc "Run Ruby style checks"
8
11
  RuboCop::RakeTask.new(:style)
9
12
 
10
- require 'yard'
13
+ require "yard"
11
14
  YARD::Rake::YardocTask.new(:doc)
12
15
 
16
+ begin
17
+ require "github_changelog_generator/task"
18
+
19
+ GitHubChangelogGenerator::RakeTask.new :changelog do |config|
20
+ config.issues = false
21
+ config.future_release = Mixlib::Versioning::VERSION
22
+ end
23
+ rescue LoadError
24
+ puts "github_changelog_generator is not available. gem install github_changelog_generator to generate changelogs"
25
+ end
26
+
13
27
  namespace :travis do
14
- desc 'Run tests on Travis'
28
+ desc "Run tests on Travis"
15
29
  task ci: [:style, :unit]
16
30
  end
17
31
 
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.2.1
@@ -2,6 +2,7 @@
2
2
  # Author:: Seth Chisamore (<schisamo@chef.io>)
3
3
  # Author:: Christopher Maier (<cm@chef.io>)
4
4
  # Copyright:: Copyright (c) 2013 Opscode, Inc.
5
+ # Copyright:: Copyright (c) 2017 Chef Software Inc.
5
6
  # License:: Apache License, Version 2.0
6
7
  #
7
8
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,8 +18,8 @@
17
18
  # limitations under the License.
18
19
  #
19
20
 
20
- require 'mixlib/versioning/exceptions'
21
- require 'mixlib/versioning/format'
21
+ require "mixlib/versioning/exceptions"
22
+ require "mixlib/versioning/format"
22
23
 
23
24
  module Mixlib
24
25
  # @author Seth Chisamore (<schisamo@chef.io>)
@@ -29,6 +30,7 @@ module Mixlib
29
30
  Mixlib::Versioning::Format::OpscodeSemVer,
30
31
  Mixlib::Versioning::Format::SemVer,
31
32
  Mixlib::Versioning::Format::Rubygems,
33
+ Mixlib::Versioning::Format::PartialSemVer,
32
34
  ].freeze
33
35
 
34
36
  # Create a new {Format} instance given a version string to parse, and an
@@ -55,7 +57,7 @@ module Mixlib
55
57
  #
56
58
  def self.parse(version_string, format = nil)
57
59
  if version_string.is_a?(Mixlib::Versioning::Format)
58
- return version_string
60
+ version_string
59
61
  else
60
62
  formats = if format
61
63
  [format].flatten.map { |f| Mixlib::Versioning::Format.for(f) }
@@ -71,7 +73,7 @@ module Mixlib
71
73
  next
72
74
  end
73
75
  end
74
- return parsed_version
76
+ parsed_version
75
77
  end
76
78
  end
77
79
 
@@ -135,7 +137,7 @@ module Mixlib
135
137
  # attempt to parse a `Mixlib::Versioning::Format` instance if we were
136
138
  # passed a string
137
139
  unless filter_version.nil? ||
138
- filter_version.is_a?(Mixlib::Versioning::Format)
140
+ filter_version.is_a?(Mixlib::Versioning::Format)
139
141
  filter_version = Mixlib::Versioning.parse(filter_version)
140
142
  end
141
143
 
@@ -181,13 +183,13 @@ module Mixlib
181
183
  in_release_line && if use_prerelease_versions && use_build_versions
182
184
  v.prerelease_build?
183
185
  elsif !use_prerelease_versions &&
184
- use_build_versions
186
+ use_build_versions
185
187
  v.release_build?
186
188
  elsif use_prerelease_versions &&
187
- !use_build_versions
189
+ !use_build_versions
188
190
  v.prerelease?
189
191
  elsif !use_prerelease_versions &&
190
- !use_build_versions
192
+ !use_build_versions
191
193
  v.release?
192
194
  end
193
195
  end.max # select the most recent version
@@ -1,6 +1,7 @@
1
1
  #
2
2
  # Author:: Seth Chisamore (<schisamo@chef.io>)
3
3
  # Copyright:: Copyright (c) 2013 Opscode, Inc.
4
+ # Copyright:: Copyright (c) 2017 Chef Software Inc.
4
5
  # License:: Apache License, Version 2.0
5
6
  #
6
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,10 +17,11 @@
16
17
  # limitations under the License.
17
18
  #
18
19
 
19
- require 'mixlib/versioning/format/git_describe'
20
- require 'mixlib/versioning/format/opscode_semver'
21
- require 'mixlib/versioning/format/rubygems'
22
- require 'mixlib/versioning/format/semver'
20
+ require "mixlib/versioning/format/git_describe"
21
+ require "mixlib/versioning/format/opscode_semver"
22
+ require "mixlib/versioning/format/rubygems"
23
+ require "mixlib/versioning/format/semver"
24
+ require "mixlib/versioning/format/partial_semver"
23
25
 
24
26
  module Mixlib
25
27
  class Versioning
@@ -30,15 +32,15 @@ module Mixlib
30
32
  # @!attribute [r] minor
31
33
  # @return [Integer] minor identifier
32
34
  # @!attribute [r] patch
33
- # @return [Integer] patch identifier
35
+ # @return [Integer, nil] patch identifier
34
36
  # @!attribute [r] prerelease
35
- # @return [String] pre-release identifier
37
+ # @return [String, nil] pre-release identifier
36
38
  # @!attribute [r] build
37
- # @return [String] build identifier
39
+ # @return [String, nil] build identifier
38
40
  # @!attribute [r] iteration
39
- # @return [String] build interation
41
+ # @return [String, nil] build interation
40
42
  # @!attribute [r] input
41
- # @return [String] original input version string that was parsed
43
+ # @return [String, nil] original input version string that was parsed
42
44
  class Format
43
45
  include Comparable
44
46
 
@@ -60,17 +62,18 @@ module Mixlib
60
62
  #
61
63
  def self.for(format_type)
62
64
  if format_type.is_a?(Class) &&
63
- format_type.ancestors.include?(Mixlib::Versioning::Format)
65
+ format_type.ancestors.include?(Mixlib::Versioning::Format)
64
66
  format_type
65
67
  else
66
68
  case format_type.to_s
67
- when 'semver' then Mixlib::Versioning::Format::SemVer
68
- when 'opscode_semver' then Mixlib::Versioning::Format::OpscodeSemVer
69
- when 'git_describe' then Mixlib::Versioning::Format::GitDescribe
70
- when 'rubygems' then Mixlib::Versioning::Format::Rubygems
69
+ when "semver" then Mixlib::Versioning::Format::SemVer
70
+ when "opscode_semver" then Mixlib::Versioning::Format::OpscodeSemVer
71
+ when "git_describe" then Mixlib::Versioning::Format::GitDescribe
72
+ when "rubygems" then Mixlib::Versioning::Format::Rubygems
73
+ when "partial_semver" then Mixlib::Versioning::Format::PartialSemVer
71
74
  else
72
75
  msg = "'#{format_type}' is not a supported Mixlib::Versioning format"
73
- fail Mixlib::Versioning::UnknownFormatError, msg
76
+ raise Mixlib::Versioning::UnknownFormatError, msg
74
77
  end
75
78
  end
76
79
  end
@@ -90,7 +93,7 @@ module Mixlib
90
93
  # @param version_string [String] string representation of the version
91
94
  # @raise [Mixlib::Versioning::ParseError] raised if parsing fails
92
95
  def parse(_version_string)
93
- fail Error, 'You must override the #parse'
96
+ raise Error, "You must override the #parse"
94
97
  end
95
98
 
96
99
  # @return [Boolean] Whether or not this is a release version
@@ -153,7 +156,7 @@ module Mixlib
153
156
  vars = instance_variables.map do |n|
154
157
  "#{n}=#{instance_variable_get(n).inspect}"
155
158
  end
156
- format('#<%s:0x%x %s>', self.class, object_id, vars.join(', '))
159
+ format("#<%s:0x%x %s>", self.class, object_id, vars.join(", "))
157
160
  end
158
161
 
159
162
  # Returns SemVer compliant string representation of this {Format}
@@ -167,7 +170,7 @@ module Mixlib
167
170
  # {Format} instance
168
171
  # @todo create a proper serialization abstraction
169
172
  def to_semver_string
170
- s = [@major, @minor, @patch].join('.')
173
+ s = [@major, @minor, @patch].map(&:to_i).join(".")
171
174
  s += "-#{@prerelease}" if @prerelease
172
175
  s += "+#{@build}" if @build
173
176
  s
@@ -184,7 +187,7 @@ module Mixlib
184
187
  # {Format} instance
185
188
  # @todo create a proper serialization abstraction
186
189
  def to_rubygems_string
187
- s = [@major, @minor, @patch].join('.')
190
+ s = [@major, @minor, @patch].map(&:to_i).join(".")
188
191
  s += ".#{@prerelease}" if @prerelease
189
192
  s
190
193
  end
@@ -269,7 +272,7 @@ module Mixlib
269
272
  end
270
273
 
271
274
  def hash
272
- [@major, @minor, @patch, @prerelease, @build].compact.join('.').hash
275
+ [@major, @minor, @patch, @prerelease, @build].compact.join(".").hash
273
276
  end
274
277
 
275
278
  #########################################################################
@@ -303,8 +306,8 @@ module Mixlib
303
306
  # Both `a_item` and `b_item` should be Strings; `nil` is not a
304
307
  # valid input.
305
308
  def compare_dot_components(a_item, b_item)
306
- a_components = a_item.split('.')
307
- b_components = b_item.split('.')
309
+ a_components = a_item.split(".")
310
+ b_components = b_item.split(".")
308
311
 
309
312
  max_length = [a_components.length, b_components.length].max
310
313