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