Class: Mixlib::Versioning
- Inherits:
-
Object
- Object
- Mixlib::Versioning
- Defined in:
- lib/mixlib/versioning.rb,
lib/mixlib/versioning/format.rb,
lib/mixlib/versioning/version.rb,
lib/mixlib/versioning/exceptions.rb,
lib/mixlib/versioning/format/semver.rb,
lib/mixlib/versioning/format/rubygems.rb,
lib/mixlib/versioning/format/git_describe.rb,
lib/mixlib/versioning/format/opscode_semver.rb,
lib/mixlib/versioning/format/partial_semver.rb
Overview
Defined Under Namespace
Classes: Error, Format, ParseError, UnknownFormatError
Constant Summary collapse
- DEFAULT_FORMATS =
[ Mixlib::Versioning::Format::GitDescribe, Mixlib::Versioning::Format::OpscodeSemVer, Mixlib::Versioning::Format::SemVer, Mixlib::Versioning::Format::Rubygems, Mixlib::Versioning::Format::PartialSemVer, ].freeze
- VERSION =
"1.2.12"
Class Method Summary collapse
-
.find_target_version(all_versions, filter_version = nil, use_prerelease_versions = false, use_build_versions = false) ⇒ Object
Selects the most recent version from ‘all_versions` that satisfies the filtering constraints provided by `filter_version`, `use_prerelease_versions`, and `use_build_versions`.
-
.parse(version_string, format = nil) ⇒ Object
Create a new Format instance given a version string to parse, and an optional format type.
Class Method Details
.find_target_version(all_versions, filter_version = nil, use_prerelease_versions = false, use_build_versions = false) ⇒ Object
Selects the most recent version from ‘all_versions` that satisfies the filtering constraints provided by `filter_version`, `use_prerelease_versions`, and `use_build_versions`.
If ‘filter_version` specifies a release (e.g. 1.0.0), then the target version that is returned will be in the same “release line” (it will have the same major, minor, and patch versions), subject to filtering by `use_prerelease_versions` and `use_build_versions`.
If ‘filter_version` specifies a pre-release (e.g., 1.0.0-alpha.1), the returned target version will be in the same “pre-release line”, and will only be subject to further filtering by `use_build_versions`; that is, `use_prerelease_versions` is completely ignored.
If ‘filter_version` specifies a build version (whether it is a pre-release or not), no filtering is performed at all, and `filter_version` is the target version; `use_prerelease_versions` and `use_build_versions` are both ignored.
If ‘filter_version` is `nil`, then only `use_prerelease_versions` and `use_build_versions` are used for filtering.
In all cases, the returned Format is the most recent one in ‘all_versions` that satisfies the given constraints.
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
# File 'lib/mixlib/versioning.rb', line 131 def self.find_target_version(all_versions, 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.is_a?(Mixlib::Versioning::Format) filter_version = Mixlib::Versioning.parse(filter_version) end all_versions.map! do |v| if v.is_a?(Mixlib::Versioning::Format) v else Mixlib::Versioning.parse(v) end end if filter_version && filter_version.build # If we've requested a build (whether for a pre-release or release), # there's no sense doing any other filtering; just return that version filter_version elsif filter_version && filter_version.prerelease # 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 else filter_version end else # If we've gotten this far, we're either just interested in # variations on a specific release, or the latest of all versions # (depending on various combinations of prerelease and build status) all_versions.select do |v| # If we're given a version to filter by, then we're only # interested in other versions that share the same major, minor, # and patch versions. # # If we weren't given a version to filter by, then we don't # care, and we'll take everything in_release_line = if filter_version filter_version.in_same_release_line?(v) else true end in_release_line && if use_prerelease_versions && use_build_versions v.prerelease_build? elsif !use_prerelease_versions && use_build_versions v.release_build? elsif use_prerelease_versions && !use_build_versions v.prerelease? elsif !use_prerelease_versions && !use_build_versions v.release? end end.max # select the most recent version end # if end |
.parse(version_string, format = nil) ⇒ Object
Create a new Format instance given a version string to parse, and an optional format type.
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/mixlib/versioning.rb', line 57 def self.parse(version_string, format = nil) if version_string.is_a?(Mixlib::Versioning::Format) 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 formats.each do |version| begin break parsed_version = version.new(version_string) rescue Mixlib::Versioning::ParseError next end end parsed_version end end |