lib/mixlib/versioning.rb in mixlib-versioning-1.0.0 vs lib/mixlib/versioning.rb in mixlib-versioning-1.1.0

- old
+ new

@@ -1,8 +1,8 @@ # -# Author:: Seth Chisamore (<schisamo@opscode.com>) -# Author:: Christopher Maier (<cm@opscode.com>) +# Author:: Seth Chisamore (<schisamo@chef.io>) +# Author:: Christopher Maier (<cm@chef.io>) # Copyright:: Copyright (c) 2013 Opscode, Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -19,50 +19,54 @@ require 'mixlib/versioning/exceptions' require 'mixlib/versioning/format' module Mixlib - # @author Seth Chisamore (<schisamo@opscode.com>) - # @author Christopher Maier (<cm@opscode.com>) + # @author Seth Chisamore (<schisamo@chef.io>) + # @author Christopher Maier (<cm@chef.io>) class Versioning + DEFAULT_FORMATS = [ + Mixlib::Versioning::Format::GitDescribe, + Mixlib::Versioning::Format::OpscodeSemVer, + Mixlib::Versioning::Format::SemVer, + Mixlib::Versioning::Format::Rubygems, + ].freeze # Create a new {Format} instance given a version string to parse, and an # optional format type. # # @example - # Mixlib::Versioning.parse("11.0.0") - # Mixlib::Versioning.parse("11.0.0", :semver) - # Mixlib::Versioning.parse("11.0.0", 'semver') - # Mixlib::Versioning.parse("11.0.0", Mixlib::Versioning::Format::SemVer) + # Mixlib::Versioning.parse('11.0.0') + # Mixlib::Versioning.parse('11.0.0', :semver) + # Mixlib::Versioning.parse('11.0.0', 'semver') + # Mixlib::Versioning.parse('11.0.0', Mixlib::Versioning::Format::SemVer) # # @param version_string [String] String representatin of the version to # parse - # @param format_type [String, Symbol, Mixlib::Versioning::Format] Optional + # @param format [String, Symbol, Mixlib::Versioning::Format, Array] Optional # format type to parse the version string as. If this is exluded all # version types will be attempted from most specific to most specific - # with a preference for SemVer formats - # + # with a preference for SemVer formats. If it is an array, only version + # types in that list will be considered # @raise [Mixlib::Versioning::ParseError] if the parse fails. # @raise [Mixlib::Versioning::UnknownFormatError] if the given format type # doesn't exist. # # @return # - def self.parse(version_string, format_type=nil) - if version_string.kind_of?(Mixlib::Versioning::Format) + def self.parse(version_string, format = nil) + if version_string.is_a?(Mixlib::Versioning::Format) return version_string - elsif format_type - return Mixlib::Versioning::Format.for(format_type).new(version_string) else + formats = if format + [format].flatten.map { |f| Mixlib::Versioning::Format.for(f) } + else + DEFAULT_FORMATS + end # Attempt to parse from the most specific formats first. parsed_version = nil - [ - Mixlib::Versioning::Format::GitDescribe, - Mixlib::Versioning::Format::OpscodeSemVer, - Mixlib::Versioning::Format::SemVer, - Mixlib::Versioning::Format::Rubygems - ].each do |version| + formats.each do |version| begin break parsed_version = version.new(version_string) rescue Mixlib::Versioning::ParseError next end @@ -101,11 +105,11 @@ # 11.0.0-rc.1 # 11.0.0 # 11.0.1 } # # Mixlib::Versioning.find_target_version(all, - # "11.0.1", + # '11.0.1', # true, # true) # # # @param all_versions [Array<String, Mixlib::Versioning::Format>] An array @@ -122,23 +126,23 @@ # @param use_build_versions [Boolean] If true, keep versions with build # version specifiers. When false, versions in `all_versions` that have a # build version specifier will be filtered out. # def self.find_target_version(all_versions, - filter_version=nil, - use_prerelease_versions=false, - use_build_versions=false) + filter_version = nil, + use_prerelease_versions = false, + use_build_versions = false) # attempt to parse a `Mixlib::Versioning::Format` instance if we were # passed a string unless filter_version.nil? || - filter_version.kind_of?(Mixlib::Versioning::Format) + filter_version.is_a?(Mixlib::Versioning::Format) filter_version = Mixlib::Versioning.parse(filter_version) end all_versions.map! do |v| - if v.kind_of?(Mixlib::Versioning::Format) + if v.is_a?(Mixlib::Versioning::Format) v else Mixlib::Versioning.parse(v) end end @@ -151,11 +155,11 @@ # If we've requested a prerelease version, we only need to see if we # want a build version or not. If so, keep only the build version for # that prerelease, and then take the most recent. Otherwise, just # return the specified prerelease version if use_build_versions - all_versions.select{|v| v.in_same_prerelease_line?(filter_version)}.max + all_versions.select { |v| v.in_same_prerelease_line?(filter_version) }.max else filter_version end else # If we've gotten this far, we're either just interested in @@ -187,8 +191,7 @@ v.release? end end.max # select the most recent version end # if end # self.find_target_version - end # Versioning end # Mixlib