mixlib-versioning 1.0.0 → 1.2.12
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.
- checksums.yaml +7 -0
- data/lib/mixlib/versioning.rb +41 -37
- data/lib/mixlib/versioning/exceptions.rb +2 -2
- data/lib/mixlib/versioning/format.rb +42 -38
- data/lib/mixlib/versioning/format/git_describe.rb +5 -7
- data/lib/mixlib/versioning/format/opscode_semver.rb +8 -19
- data/lib/mixlib/versioning/format/partial_semver.rb +62 -0
- data/lib/mixlib/versioning/format/rubygems.rb +14 -10
- data/lib/mixlib/versioning/format/semver.rb +9 -11
- data/lib/mixlib/versioning/version.rb +3 -3
- metadata +15 -87
- data/.gitignore +0 -18
- data/.yardopts +0 -7
- data/CHANGELOG.md +0 -3
- data/CONTRIBUTING.md +0 -188
- data/Gemfile +0 -9
- data/README.md +0 -364
- data/Rakefile +0 -6
- data/mixlib-versioning.gemspec +0 -22
- data/spec/mixlib/versioning/format/git_describe_spec.rb +0 -178
- data/spec/mixlib/versioning/format/opscode_semver_spec.rb +0 -113
- data/spec/mixlib/versioning/format/rubygems_spec.rb +0 -142
- data/spec/mixlib/versioning/format/semver_spec.rb +0 -107
- data/spec/mixlib/versioning/format_spec.rb +0 -69
- data/spec/mixlib/versioning/versioning_spec.rb +0 -259
- data/spec/spec_helper.rb +0 -43
- data/spec/support/shared_examples/basic_semver.rb +0 -42
- data/spec/support/shared_examples/behaviors/filterable.rb +0 -66
- data/spec/support/shared_examples/behaviors/parses_valid_version_strings.rb +0 -32
- data/spec/support/shared_examples/behaviors/rejects_invalid_version_strings.rb +0 -32
- data/spec/support/shared_examples/behaviors/serializable.rb +0 -51
- data/spec/support/shared_examples/behaviors/sortable.rb +0 -45
- data/spec/support/shared_examples/semver.rb +0 -105
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: 2be21e4975d6fa956538a0eb98cfe608f423a0b34aee5763e627ec31112c66b5
         | 
| 4 | 
            +
              data.tar.gz: f7909f08f54a4d094516186f68747b96500a62cdcc8677fe6d631947d0d017c6
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: 9b8554a17dc71628a23c83aeee7b7932733476d1b7769d9e83e5a27f0d884bfc18313a28a27348ca407dc5ac537df9f5a87d521debd45eca6b860b6cd83ba04f
         | 
| 7 | 
            +
              data.tar.gz: 66d72d18122c944855affd93d57a8ad81f74aedbf8009305d9bd425fd46979b1e41d69cfc8e28d96492957f7ed1df7228a5178e31bfdef0173bcec9825b60972
         | 
    
        data/lib/mixlib/versioning.rb
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            #
         | 
| 2 | 
            -
            # Author:: Seth Chisamore (<schisamo@ | 
| 3 | 
            -
            # Author:: Christopher Maier (<cm@ | 
| 4 | 
            -
            # Copyright:: Copyright (c) 2013  | 
| 2 | 
            +
            # Author:: Seth Chisamore (<schisamo@chef.io>)
         | 
| 3 | 
            +
            # Author:: Christopher Maier (<cm@chef.io>)
         | 
| 4 | 
            +
            # Copyright:: Copyright (c) 2013-2018 Chef Software Inc.
         | 
| 5 5 | 
             
            # License:: Apache License, Version 2.0
         | 
| 6 6 | 
             
            #
         | 
| 7 7 | 
             
            # Licensed under the Apache License, Version 2.0 (the "License");
         | 
| @@ -17,57 +17,62 @@ | |
| 17 17 | 
             
            # limitations under the License.
         | 
| 18 18 | 
             
            #
         | 
| 19 19 |  | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 20 | 
            +
            require_relative "versioning/exceptions"
         | 
| 21 | 
            +
            require_relative "versioning/format"
         | 
| 22 22 |  | 
| 23 23 | 
             
            module Mixlib
         | 
| 24 | 
            -
              # @author Seth Chisamore (<schisamo@ | 
| 25 | 
            -
              # @author Christopher Maier (<cm@ | 
| 24 | 
            +
              # @author Seth Chisamore (<schisamo@chef.io>)
         | 
| 25 | 
            +
              # @author Christopher Maier (<cm@chef.io>)
         | 
| 26 26 | 
             
              class Versioning
         | 
| 27 | 
            +
                DEFAULT_FORMATS = [
         | 
| 28 | 
            +
                  Mixlib::Versioning::Format::GitDescribe,
         | 
| 29 | 
            +
                  Mixlib::Versioning::Format::OpscodeSemVer,
         | 
| 30 | 
            +
                  Mixlib::Versioning::Format::SemVer,
         | 
| 31 | 
            +
                  Mixlib::Versioning::Format::Rubygems,
         | 
| 32 | 
            +
                  Mixlib::Versioning::Format::PartialSemVer,
         | 
| 33 | 
            +
                ].freeze
         | 
| 27 34 |  | 
| 28 35 | 
             
                # Create a new {Format} instance given a version string to parse, and an
         | 
| 29 36 | 
             
                # optional format type.
         | 
| 30 37 | 
             
                #
         | 
| 31 38 | 
             
                # @example
         | 
| 32 | 
            -
                #   Mixlib::Versioning.parse( | 
| 33 | 
            -
                #   Mixlib::Versioning.parse( | 
| 34 | 
            -
                #   Mixlib::Versioning.parse( | 
| 35 | 
            -
                #   Mixlib::Versioning.parse( | 
| 39 | 
            +
                #   Mixlib::Versioning.parse('11.0.0')
         | 
| 40 | 
            +
                #   Mixlib::Versioning.parse('11.0.0', :semver)
         | 
| 41 | 
            +
                #   Mixlib::Versioning.parse('11.0.0', 'semver')
         | 
| 42 | 
            +
                #   Mixlib::Versioning.parse('11.0.0', Mixlib::Versioning::Format::SemVer)
         | 
| 36 43 | 
             
                #
         | 
| 37 44 | 
             
                # @param version_string [String] String representatin of the version to
         | 
| 38 45 | 
             
                #   parse
         | 
| 39 | 
            -
                # @param  | 
| 46 | 
            +
                # @param format [String, Symbol, Mixlib::Versioning::Format, Array] Optional
         | 
| 40 47 | 
             
                #   format type to parse the version string as. If this is exluded all
         | 
| 41 48 | 
             
                #   version types will be attempted from most specific to most specific
         | 
| 42 | 
            -
                #   with a preference for SemVer formats
         | 
| 43 | 
            -
                #
         | 
| 49 | 
            +
                #   with a preference for SemVer formats. If it is an array, only version
         | 
| 50 | 
            +
                #   types in that list will be considered
         | 
| 44 51 | 
             
                # @raise [Mixlib::Versioning::ParseError] if the parse fails.
         | 
| 45 52 | 
             
                # @raise [Mixlib::Versioning::UnknownFormatError] if the given format type
         | 
| 46 53 | 
             
                #   doesn't exist.
         | 
| 47 54 | 
             
                #
         | 
| 48 55 | 
             
                # @return
         | 
| 49 56 | 
             
                #
         | 
| 50 | 
            -
                def self.parse(version_string,  | 
| 51 | 
            -
                  if version_string. | 
| 52 | 
            -
                     | 
| 53 | 
            -
                  elsif format_type
         | 
| 54 | 
            -
                    return Mixlib::Versioning::Format.for(format_type).new(version_string)
         | 
| 57 | 
            +
                def self.parse(version_string, format = nil)
         | 
| 58 | 
            +
                  if version_string.is_a?(Mixlib::Versioning::Format)
         | 
| 59 | 
            +
                    version_string
         | 
| 55 60 | 
             
                  else
         | 
| 61 | 
            +
                    formats = if format
         | 
| 62 | 
            +
                                [format].flatten.map { |f| Mixlib::Versioning::Format.for(f) }
         | 
| 63 | 
            +
                              else
         | 
| 64 | 
            +
                                DEFAULT_FORMATS
         | 
| 65 | 
            +
                              end
         | 
| 56 66 | 
             
                    # Attempt to parse from the most specific formats first.
         | 
| 57 67 | 
             
                    parsed_version = nil
         | 
| 58 | 
            -
                     | 
| 59 | 
            -
                      Mixlib::Versioning::Format::GitDescribe,
         | 
| 60 | 
            -
                      Mixlib::Versioning::Format::OpscodeSemVer,
         | 
| 61 | 
            -
                      Mixlib::Versioning::Format::SemVer,
         | 
| 62 | 
            -
                      Mixlib::Versioning::Format::Rubygems
         | 
| 63 | 
            -
                    ].each do |version|
         | 
| 68 | 
            +
                    formats.each do |version|
         | 
| 64 69 | 
             
                      begin
         | 
| 65 70 | 
             
                        break parsed_version = version.new(version_string)
         | 
| 66 71 | 
             
                      rescue Mixlib::Versioning::ParseError
         | 
| 67 72 | 
             
                        next
         | 
| 68 73 | 
             
                      end
         | 
| 69 74 | 
             
                    end
         | 
| 70 | 
            -
                     | 
| 75 | 
            +
                    parsed_version
         | 
| 71 76 | 
             
                  end
         | 
| 72 77 | 
             
                end
         | 
| 73 78 |  | 
| @@ -103,7 +108,7 @@ module Mixlib | |
| 103 108 | 
             
                #             11.0.1 }
         | 
| 104 109 | 
             
                #
         | 
| 105 110 | 
             
                #   Mixlib::Versioning.find_target_version(all,
         | 
| 106 | 
            -
                #                                           | 
| 111 | 
            +
                #                                          '11.0.1',
         | 
| 107 112 | 
             
                #                                          true,
         | 
| 108 113 | 
             
                #                                          true)
         | 
| 109 114 | 
             
                #
         | 
| @@ -124,19 +129,19 @@ module Mixlib | |
| 124 129 | 
             
                #   build version specifier will be filtered out.
         | 
| 125 130 | 
             
                #
         | 
| 126 131 | 
             
                def self.find_target_version(all_versions,
         | 
| 127 | 
            -
                                             filter_version=nil,
         | 
| 128 | 
            -
                                             use_prerelease_versions=false,
         | 
| 129 | 
            -
                                             use_build_versions=false)
         | 
| 132 | 
            +
                                             filter_version = nil,
         | 
| 133 | 
            +
                                             use_prerelease_versions = false,
         | 
| 134 | 
            +
                                             use_build_versions = false)
         | 
| 130 135 |  | 
| 131 136 | 
             
                  # attempt to parse a `Mixlib::Versioning::Format` instance if we were
         | 
| 132 137 | 
             
                  # passed a string
         | 
| 133 138 | 
             
                  unless filter_version.nil? ||
         | 
| 134 | 
            -
             | 
| 139 | 
            +
                      filter_version.is_a?(Mixlib::Versioning::Format)
         | 
| 135 140 | 
             
                    filter_version = Mixlib::Versioning.parse(filter_version)
         | 
| 136 141 | 
             
                  end
         | 
| 137 142 |  | 
| 138 143 | 
             
                  all_versions.map! do |v|
         | 
| 139 | 
            -
                    if v. | 
| 144 | 
            +
                    if v.is_a?(Mixlib::Versioning::Format)
         | 
| 140 145 | 
             
                      v
         | 
| 141 146 | 
             
                    else
         | 
| 142 147 | 
             
                      Mixlib::Versioning.parse(v)
         | 
| @@ -153,7 +158,7 @@ module Mixlib | |
| 153 158 | 
             
                    # that prerelease, and then take the most recent. Otherwise, just
         | 
| 154 159 | 
             
                    # return the specified prerelease version
         | 
| 155 160 | 
             
                    if use_build_versions
         | 
| 156 | 
            -
                      all_versions.select{|v| v.in_same_prerelease_line?(filter_version)}.max
         | 
| 161 | 
            +
                      all_versions.select { |v| v.in_same_prerelease_line?(filter_version) }.max
         | 
| 157 162 | 
             
                    else
         | 
| 158 163 | 
             
                      filter_version
         | 
| 159 164 | 
             
                    end
         | 
| @@ -177,18 +182,17 @@ module Mixlib | |
| 177 182 | 
             
                      in_release_line && if use_prerelease_versions && use_build_versions
         | 
| 178 183 | 
             
                                           v.prerelease_build?
         | 
| 179 184 | 
             
                                         elsif !use_prerelease_versions &&
         | 
| 180 | 
            -
             | 
| 185 | 
            +
                                             use_build_versions
         | 
| 181 186 | 
             
                                           v.release_build?
         | 
| 182 187 | 
             
                                         elsif use_prerelease_versions &&
         | 
| 183 | 
            -
             | 
| 188 | 
            +
                                             !use_build_versions
         | 
| 184 189 | 
             
                                           v.prerelease?
         | 
| 185 190 | 
             
                                         elsif !use_prerelease_versions &&
         | 
| 186 | 
            -
             | 
| 191 | 
            +
                                             !use_build_versions
         | 
| 187 192 | 
             
                                           v.release?
         | 
| 188 193 | 
             
                                         end
         | 
| 189 194 | 
             
                    end.max # select the most recent version
         | 
| 190 195 | 
             
                  end # if
         | 
| 191 196 | 
             
                end # self.find_target_version
         | 
| 192 | 
            -
             | 
| 193 197 | 
             
              end # Versioning
         | 
| 194 198 | 
             
            end # Mixlib
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            #
         | 
| 2 | 
            -
            # Author:: Seth Chisamore (<schisamo@ | 
| 3 | 
            -
            # Copyright:: Copyright (c) 2013  | 
| 2 | 
            +
            # Author:: Seth Chisamore (<schisamo@chef.io>)
         | 
| 3 | 
            +
            # Copyright:: Copyright (c) 2013-2018 Chef Software, Inc.
         | 
| 4 4 | 
             
            # License:: Apache License, Version 2.0
         | 
| 5 5 | 
             
            #
         | 
| 6 6 | 
             
            # Licensed under the Apache License, Version 2.0 (the "License");
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            #
         | 
| 2 | 
            -
            # Author:: Seth Chisamore (<schisamo@ | 
| 3 | 
            -
            # Copyright:: Copyright (c) 2013  | 
| 2 | 
            +
            # Author:: Seth Chisamore (<schisamo@chef.io>)
         | 
| 3 | 
            +
            # Copyright:: Copyright (c) 2013-2018 Chef Software, Inc.
         | 
| 4 4 | 
             
            # License:: Apache License, Version 2.0
         | 
| 5 5 | 
             
            #
         | 
| 6 6 | 
             
            # Licensed under the Apache License, Version 2.0 (the "License");
         | 
| @@ -16,30 +16,30 @@ | |
| 16 16 | 
             
            # limitations under the License.
         | 
| 17 17 | 
             
            #
         | 
| 18 18 |  | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 19 | 
            +
            require_relative "format/git_describe"
         | 
| 20 | 
            +
            require_relative "format/opscode_semver"
         | 
| 21 | 
            +
            require_relative "format/rubygems"
         | 
| 22 | 
            +
            require_relative "format/semver"
         | 
| 23 | 
            +
            require_relative "format/partial_semver"
         | 
| 23 24 |  | 
| 24 25 | 
             
            module Mixlib
         | 
| 25 26 | 
             
              class Versioning
         | 
| 26 | 
            -
             | 
| 27 | 
            -
                # @author Seth Chisamore (<schisamo@opscode.com>)
         | 
| 27 | 
            +
                # @author Seth Chisamore (<schisamo@chef.io>)
         | 
| 28 28 | 
             
                #
         | 
| 29 29 | 
             
                # @!attribute [r] major
         | 
| 30 30 | 
             
                #   @return [Integer] major identifier
         | 
| 31 31 | 
             
                # @!attribute [r] minor
         | 
| 32 32 | 
             
                #   @return [Integer] minor identifier
         | 
| 33 33 | 
             
                # @!attribute [r] patch
         | 
| 34 | 
            -
                #   @return [Integer] patch identifier
         | 
| 34 | 
            +
                #   @return [Integer, nil] patch identifier
         | 
| 35 35 | 
             
                # @!attribute [r] prerelease
         | 
| 36 | 
            -
                #   @return [String] pre-release identifier
         | 
| 36 | 
            +
                #   @return [String, nil] pre-release identifier
         | 
| 37 37 | 
             
                # @!attribute [r] build
         | 
| 38 | 
            -
                #   @return [String] build identifier
         | 
| 38 | 
            +
                #   @return [String, nil] build identifier
         | 
| 39 39 | 
             
                # @!attribute [r] iteration
         | 
| 40 | 
            -
                #   @return [String] build interation
         | 
| 40 | 
            +
                #   @return [String, nil] build interation
         | 
| 41 41 | 
             
                # @!attribute [r] input
         | 
| 42 | 
            -
                #   @return [String] original input version string that was parsed
         | 
| 42 | 
            +
                #   @return [String, nil] original input version string that was parsed
         | 
| 43 43 | 
             
                class Format
         | 
| 44 44 | 
             
                  include Comparable
         | 
| 45 45 |  | 
| @@ -60,17 +60,18 @@ module Mixlib | |
| 60 60 | 
             
                  # @return [Class] the {Mixlib::Versioning::Format} class
         | 
| 61 61 | 
             
                  #
         | 
| 62 62 | 
             
                  def self.for(format_type)
         | 
| 63 | 
            -
                    if format_type. | 
| 64 | 
            -
             | 
| 63 | 
            +
                    if format_type.is_a?(Class) &&
         | 
| 64 | 
            +
                        format_type.ancestors.include?(Mixlib::Versioning::Format)
         | 
| 65 65 | 
             
                      format_type
         | 
| 66 66 | 
             
                    else
         | 
| 67 67 | 
             
                      case format_type.to_s
         | 
| 68 | 
            -
                      when  | 
| 69 | 
            -
                      when  | 
| 70 | 
            -
                      when  | 
| 71 | 
            -
                      when  | 
| 68 | 
            +
                      when "semver" then Mixlib::Versioning::Format::SemVer
         | 
| 69 | 
            +
                      when "opscode_semver" then Mixlib::Versioning::Format::OpscodeSemVer
         | 
| 70 | 
            +
                      when "git_describe" then Mixlib::Versioning::Format::GitDescribe
         | 
| 71 | 
            +
                      when "rubygems" then Mixlib::Versioning::Format::Rubygems
         | 
| 72 | 
            +
                      when "partial_semver" then Mixlib::Versioning::Format::PartialSemVer
         | 
| 72 73 | 
             
                      else
         | 
| 73 | 
            -
                        msg = "'#{format_type | 
| 74 | 
            +
                        msg = "'#{format_type}' is not a supported Mixlib::Versioning format"
         | 
| 74 75 | 
             
                        raise Mixlib::Versioning::UnknownFormatError, msg
         | 
| 75 76 | 
             
                      end
         | 
| 76 77 | 
             
                    end
         | 
| @@ -90,7 +91,7 @@ module Mixlib | |
| 90 91 | 
             
                  #
         | 
| 91 92 | 
             
                  # @param version_string [String] string representation of the version
         | 
| 92 93 | 
             
                  # @raise [Mixlib::Versioning::ParseError] raised if parsing fails
         | 
| 93 | 
            -
                  def parse( | 
| 94 | 
            +
                  def parse(_version_string)
         | 
| 94 95 | 
             
                    raise Error, "You must override the #parse"
         | 
| 95 96 | 
             
                  end
         | 
| 96 97 |  | 
| @@ -101,22 +102,22 @@ module Mixlib | |
| 101 102 |  | 
| 102 103 | 
             
                  # @return [Boolean] Whether or not this is a pre-release version
         | 
| 103 104 | 
             
                  def prerelease?
         | 
| 104 | 
            -
                     | 
| 105 | 
            +
                    !@prerelease.nil? && @build.nil?
         | 
| 105 106 | 
             
                  end
         | 
| 106 107 |  | 
| 107 108 | 
             
                  # @return [Boolean] Whether or not this is a release build version
         | 
| 108 109 | 
             
                  def release_build?
         | 
| 109 | 
            -
                     | 
| 110 | 
            +
                    @prerelease.nil? && !@build.nil?
         | 
| 110 111 | 
             
                  end
         | 
| 111 112 |  | 
| 112 113 | 
             
                  # @return [Boolean] Whether or not this is a pre-release build version
         | 
| 113 114 | 
             
                  def prerelease_build?
         | 
| 114 | 
            -
                     | 
| 115 | 
            +
                    !@prerelease.nil? && !@build.nil?
         | 
| 115 116 | 
             
                  end
         | 
| 116 117 |  | 
| 117 118 | 
             
                  # @return [Boolean] Whether or not this is a build version
         | 
| 118 119 | 
             
                  def build?
         | 
| 119 | 
            -
                     | 
| 120 | 
            +
                    !@build.nil?
         | 
| 120 121 | 
             
                  end
         | 
| 121 122 |  | 
| 122 123 | 
             
                  # Returns `true` if `other` and this {Format} share the same `major`,
         | 
| @@ -126,8 +127,8 @@ module Mixlib | |
| 126 127 | 
             
                  # @return [Boolean]
         | 
| 127 128 | 
             
                  def in_same_release_line?(other)
         | 
| 128 129 | 
             
                    @major == other.major &&
         | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 130 | 
            +
                      @minor == other.minor &&
         | 
| 131 | 
            +
                      @patch == other.patch
         | 
| 131 132 | 
             
                  end
         | 
| 132 133 |  | 
| 133 134 | 
             
                  # Returns `true` if `other` an share the same
         | 
| @@ -137,9 +138,9 @@ module Mixlib | |
| 137 138 | 
             
                  # @return [Boolean]
         | 
| 138 139 | 
             
                  def in_same_prerelease_line?(other)
         | 
| 139 140 | 
             
                    @major == other.major &&
         | 
| 140 | 
            -
             | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 141 | 
            +
                      @minor == other.minor &&
         | 
| 142 | 
            +
                      @patch == other.patch &&
         | 
| 143 | 
            +
                      @prerelease == other.prerelease
         | 
| 143 144 | 
             
                  end
         | 
| 144 145 |  | 
| 145 146 | 
             
                  # @return [String] String representation of this {Format} instance
         | 
| @@ -154,7 +155,7 @@ module Mixlib | |
| 154 155 | 
             
                    vars = instance_variables.map do |n|
         | 
| 155 156 | 
             
                      "#{n}=#{instance_variable_get(n).inspect}"
         | 
| 156 157 | 
             
                    end
         | 
| 157 | 
            -
                    "#<%s:0x%x %s>"  | 
| 158 | 
            +
                    format("#<%s:0x%x %s>", self.class, object_id, vars.join(", "))
         | 
| 158 159 | 
             
                  end
         | 
| 159 160 |  | 
| 160 161 | 
             
                  # Returns SemVer compliant string representation of this {Format}
         | 
| @@ -168,7 +169,7 @@ module Mixlib | |
| 168 169 | 
             
                  #   {Format} instance
         | 
| 169 170 | 
             
                  # @todo create a proper serialization abstraction
         | 
| 170 171 | 
             
                  def to_semver_string
         | 
| 171 | 
            -
                    s = [@major, @minor, @patch].join(".")
         | 
| 172 | 
            +
                    s = [@major, @minor, @patch].map(&:to_i).join(".")
         | 
| 172 173 | 
             
                    s += "-#{@prerelease}" if @prerelease
         | 
| 173 174 | 
             
                    s += "+#{@build}" if @build
         | 
| 174 175 | 
             
                    s
         | 
| @@ -185,7 +186,7 @@ module Mixlib | |
| 185 186 | 
             
                  #   {Format} instance
         | 
| 186 187 | 
             
                  # @todo create a proper serialization abstraction
         | 
| 187 188 | 
             
                  def to_rubygems_string
         | 
| 188 | 
            -
                    s = [@major, @minor, @patch].join(".")
         | 
| 189 | 
            +
                    s = [@major, @minor, @patch].map(&:to_i).join(".")
         | 
| 189 190 | 
             
                    s += ".#{@prerelease}" if @prerelease
         | 
| 190 191 | 
             
                    s
         | 
| 191 192 | 
             
                  end
         | 
| @@ -197,6 +198,10 @@ module Mixlib | |
| 197 198 | 
             
                  # @return [Integer] -1, 0, or 1 depending on whether the this version is
         | 
| 198 199 | 
             
                  #   less than, equal to, or greater than the other version
         | 
| 199 200 | 
             
                  def <=>(other)
         | 
| 201 | 
            +
                    # Check whether the `other' is a String and if so, then get an
         | 
| 202 | 
            +
                    # instance of *this* class (e.g., GitDescribe, OpscodeSemVer,
         | 
| 203 | 
            +
                    # SemVer, Rubygems, etc.), so we can compare against it.
         | 
| 204 | 
            +
                    other = self.class.new(other) if other.is_a?(String)
         | 
| 200 205 |  | 
| 201 206 | 
             
                    # First, perform comparisons based on major, minor, and patch
         | 
| 202 207 | 
             
                    # versions.  These are always presnt and always non-nil
         | 
| @@ -251,7 +256,7 @@ module Mixlib | |
| 251 256 | 
             
                    end
         | 
| 252 257 |  | 
| 253 258 | 
             
                    # If we get down here, they're both equal
         | 
| 254 | 
            -
                     | 
| 259 | 
            +
                    0
         | 
| 255 260 | 
             
                  end
         | 
| 256 261 |  | 
| 257 262 | 
             
                  # @param other [Mixlib::Versioning::Format]
         | 
| @@ -305,7 +310,7 @@ module Mixlib | |
| 305 310 |  | 
| 306 311 | 
             
                    max_length = [a_components.length, b_components.length].max
         | 
| 307 312 |  | 
| 308 | 
            -
                    (0..(max_length-1)).each do |i|
         | 
| 313 | 
            +
                    (0..(max_length - 1)).each do |i|
         | 
| 309 314 | 
             
                      # Convert the ith component into a number if possible
         | 
| 310 315 | 
             
                      a = maybe_int(a_components[i])
         | 
| 311 316 | 
             
                      b = maybe_int(b_components[i])
         | 
| @@ -323,7 +328,7 @@ module Mixlib | |
| 323 328 | 
             
                      # Now we need to compare appropriately based on type.
         | 
| 324 329 | 
             
                      #
         | 
| 325 330 | 
             
                      # Numbers have lower precedence than strings; therefore, if
         | 
| 326 | 
            -
                      # the components are of  | 
| 331 | 
            +
                      # the components are of different types (String vs. Integer),
         | 
| 327 332 | 
             
                      # we just return -1 for the numeric one and we're done.
         | 
| 328 333 | 
             
                      #
         | 
| 329 334 | 
             
                      # If both are the same type (Integer vs. Integer, or String
         | 
| @@ -343,9 +348,8 @@ module Mixlib | |
| 343 348 |  | 
| 344 349 | 
             
                    # We've compared all components of both strings; if we've gotten
         | 
| 345 350 | 
             
                    # down here, they're totally the same
         | 
| 346 | 
            -
                     | 
| 351 | 
            +
                    0
         | 
| 347 352 | 
             
                  end
         | 
| 348 | 
            -
             | 
| 349 353 | 
             
                end # Format
         | 
| 350 354 | 
             
              end # Versioning
         | 
| 351 355 | 
             
            end # Mixlib
         | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            #
         | 
| 2 | 
            -
            # Author:: Seth Chisamore (<schisamo@ | 
| 3 | 
            -
            # Author:: Christopher Maier (<cm@ | 
| 4 | 
            -
            # Copyright:: Copyright (c) 2013  | 
| 2 | 
            +
            # Author:: Seth Chisamore (<schisamo@chef.io>)
         | 
| 3 | 
            +
            # Author:: Christopher Maier (<cm@chef.io>)
         | 
| 4 | 
            +
            # Copyright:: Copyright (c) 2013-2018 Chef Software, Inc.
         | 
| 5 5 | 
             
            # License:: Apache License, Version 2.0
         | 
| 6 6 | 
             
            #
         | 
| 7 7 | 
             
            # Licensed under the Apache License, Version 2.0 (the "License");
         | 
| @@ -41,10 +41,9 @@ module Mixlib | |
| 41 41 | 
             
                  # 11.0.0-alpha.1-1-gcea071e
         | 
| 42 42 | 
             
                  # ```
         | 
| 43 43 | 
             
                  #
         | 
| 44 | 
            -
                  # @author Seth Chisamore (<schisamo@ | 
| 45 | 
            -
                  # @author Christopher Maier (<cm@ | 
| 44 | 
            +
                  # @author Seth Chisamore (<schisamo@chef.io>)
         | 
| 45 | 
            +
                  # @author Christopher Maier (<cm@chef.io>)
         | 
| 46 46 | 
             
                  class GitDescribe < Format
         | 
| 47 | 
            -
             | 
| 48 47 | 
             
                    GIT_DESCRIBE_REGEX = /^(\d+)\.(\d+)\.(\d+)(?:\-|\.)?(.+)?\-(\d+)\-g([a-f0-9]{7,40})(?:\-)?(\d+)?$/
         | 
| 49 48 |  | 
| 50 49 | 
             
                    attr_reader :commits_since, :commit_sha
         | 
| @@ -64,7 +63,6 @@ module Mixlib | |
| 64 63 | 
             
                      # we'll store our internal information in that format
         | 
| 65 64 | 
             
                      @build = "#{@commits_since}.g#{@commit_sha}.#{@iteration}"
         | 
| 66 65 | 
             
                    end
         | 
| 67 | 
            -
             | 
| 68 66 | 
             
                  end # class GitDescribe
         | 
| 69 67 | 
             
                end # class Format
         | 
| 70 68 | 
             
              end # module Versioning
         | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            #
         | 
| 2 | 
            -
            # Author:: Seth Chisamore (<schisamo@ | 
| 3 | 
            -
            # Author:: Christopher Maier (<cm@ | 
| 4 | 
            -
            # Copyright:: Copyright (c) 2013  | 
| 2 | 
            +
            # Author:: Seth Chisamore (<schisamo@chef.io>)
         | 
| 3 | 
            +
            # Author:: Christopher Maier (<cm@chef.io>)
         | 
| 4 | 
            +
            # Copyright:: Copyright (c) 2013-2018 Chef Software, Inc.
         | 
| 5 5 | 
             
            # License:: Apache License, Version 2.0
         | 
| 6 6 | 
             
            #
         | 
| 7 7 | 
             
            # Licensed under the Apache License, Version 2.0 (the "License");
         | 
| @@ -17,7 +17,7 @@ | |
| 17 17 | 
             
            # limitations under the License.
         | 
| 18 18 | 
             
            #
         | 
| 19 19 |  | 
| 20 | 
            -
             | 
| 20 | 
            +
            require_relative "semver"
         | 
| 21 21 |  | 
| 22 22 | 
             
            module Mixlib
         | 
| 23 23 | 
             
              class Versioning
         | 
| @@ -51,10 +51,9 @@ module Mixlib | |
| 51 51 | 
             
                  # 11.0.0-alpha1+20121218164140.git.207.694b062
         | 
| 52 52 | 
             
                  # ```
         | 
| 53 53 | 
             
                  #
         | 
| 54 | 
            -
                  # @author Seth Chisamore (<schisamo@ | 
| 55 | 
            -
                  # @author Christopher Maier (<cm@ | 
| 54 | 
            +
                  # @author Seth Chisamore (<schisamo@chef.io>)
         | 
| 55 | 
            +
                  # @author Christopher Maier (<cm@chef.io>)
         | 
| 56 56 | 
             
                  class OpscodeSemVer < SemVer
         | 
| 57 | 
            -
             | 
| 58 57 | 
             
                    # The pattern is: `YYYYMMDDHHMMSS.git.COMMITS_SINCE.SHA1`
         | 
| 59 58 | 
             
                    OPSCODE_BUILD_REGEX = /^\d{14}(\.git\.\d+\.[a-f0-9]{7})?$/
         | 
| 60 59 |  | 
| @@ -72,19 +71,9 @@ module Mixlib | |
| 72 71 | 
             
                    def parse(version_string)
         | 
| 73 72 | 
             
                      super(version_string)
         | 
| 74 73 |  | 
| 75 | 
            -
                      unless @prerelease.nil?
         | 
| 76 | 
            -
             | 
| 77 | 
            -
                          raise Mixlib::Versioning::ParseError, "'#{@prerelease}' is not a valid Opscode pre-release signifier!"
         | 
| 78 | 
            -
                        end
         | 
| 79 | 
            -
                      end
         | 
| 80 | 
            -
             | 
| 81 | 
            -
                      unless @build.nil?
         | 
| 82 | 
            -
                        unless @build.match(OPSCODE_BUILD_REGEX)
         | 
| 83 | 
            -
                          raise Mixlib::Versioning::ParseError, "'#{@build}' is not a valid Opscode build signifier!"
         | 
| 84 | 
            -
                        end
         | 
| 85 | 
            -
                      end
         | 
| 74 | 
            +
                      raise Mixlib::Versioning::ParseError, "'#{@prerelease}' is not a valid Opscode pre-release signifier!" unless @prerelease.nil? || @prerelease.match(OPSCODE_PRERELEASE_REGEX)
         | 
| 75 | 
            +
                      raise Mixlib::Versioning::ParseError, "'#{@build}' is not a valid Opscode build signifier!" unless @build.nil? || @build.match(OPSCODE_BUILD_REGEX)
         | 
| 86 76 | 
             
                    end
         | 
| 87 | 
            -
             | 
| 88 77 | 
             
                  end # class OpscodeSemVer
         | 
| 89 78 | 
             
                end # class Format
         | 
| 90 79 | 
             
              end # module Versioning
         |