class NuGetVersions::SemanticVersion
A strict SemVer implementation Based on: NuGet.Client/NuGet.Core/NuGet.Versioning/SemanticVersion.cs from the NuGet source code.
Attributes
major[R]
metadata[R]
minor[R]
patch[R]
release_labels[R]
Public Class Methods
copy_of(version)
click to toggle source
Creates a SemanticVersion
from an existing SemanticVersion
Parameters:
-
version: Version to clone.
# File lib/nuget_versions/semantic_version.rb, line 8 def self.copy_of(version) return SemanticVersion.new(version.major, version.minor, version.patch, version.release_labels, version.metadata) end
new(major, minor, patch, release_labels = nil, metadata = nil)
click to toggle source
Creates a SemanticVersion
X.Y.Z, X.Y.Z-alpha, X.Y.Z-alpha+metadata. Parameters:
-
major: X.y.z
-
minor: x.Y.z
-
patch: x.y.Z
-
release_labels
: Prerelease label -
metadata: Build metadata
# File lib/nuget_versions/semantic_version.rb, line 19 def initialize(major, minor, patch, release_labels = nil, metadata = nil) @major = Integer(major, major.is_a?(String) ? 10 : 0) @minor = Integer(minor, minor.is_a?(String) ? 10 : 0) @patch = Integer(patch, patch.is_a?(String) ? 10 : 0) if !release_labels.nil? release_labels = release_labels.to_s.split('.') if !release_labels.kind_of? Array SemanticVersion.validate_identifiers release_labels @release_labels = release_labels end SemanticVersion.validate_identifier metadata if !metadata.nil? @metadata = metadata end
parse(value)
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 121 def self.parse(value) ver = self.try_parse(value) raise "Invalid semantic version value" if ver.nil? ver end
try_parse(value)
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 128 def self.try_parse(value) return nil if value.nil? value = value.to_s if !value.is_a? String return nil if value.empty? value = value.split("+", 2) metadata = (value.length == 2) ? value.last : nil value = value.first.split("-", 2) return nil if value.empty? release_labels = (value.length == 2) ? value.last.split('.') : nil parts = value.first.split(".") return nil if parts.length != 3 return nil if release_labels && !SemanticVersion.try_validate_identifiers(release_labels) return nil if metadata && !SemanticVersion.try_validate_identifier(metadata) begin major = Integer(parts[0], 10) minor = (parts.length >= 2) ? Integer(parts[1], 10) : 0 patch = (parts.length >= 3) ? Integer(parts[2], 10) : 0 rescue return nil end return SemanticVersion.new(major, minor, patch, release_labels, metadata) end
Protected Class Methods
try_validate_identifier(identifier)
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 175 def self.try_validate_identifier(identifier) return identifier.count("^A-Za-z0-9-").zero? end
try_validate_identifiers(array)
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 171 def self.try_validate_identifiers(array) array.all? { |identifier| try_validate_identifier(identifier) } end
validate_identifier(identifier)
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 167 def self.validate_identifier(identifier) raise "Invalid semantic version identifier: #{identifier}" if !try_validate_identifier(identifier) end
validate_identifiers(array)
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 163 def self.validate_identifiers(array) array.each { |identifier| validate_identifier(identifier) } end
Public Instance Methods
!=(other)
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 97 def !=(other) !(self == other) end
<(other)
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 101 def <(other) VersionComparer.compare(self, other) == -1 end
<=(other)
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 109 def <=(other) !(other < self) end
<=>(other)
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 117 def <=>(other) VersionComparer.compare(self, other) end
==(other)
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 93 def ==(other) VersionComparer.compare(self, other) == 0 end
>(other)
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 105 def >(other) other < self end
>=(other)
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 113 def >=(other) !(self < other) end
has_metadata?()
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 81 def has_metadata? !@metadata.nil? && !@metadata.empty? end
is_prerelease?()
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 77 def is_prerelease? !@release_labels.nil? && !@release_labels.all?(&:empty?) end
major=(new_value)
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 40 def major=(new_value) @major = Integer(new_value, new_value.is_a?(String) ? 10 : 0) end
metadata=(new_value)
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 59 def metadata=(new_value) return @metadata = nil if new_value.nil? SemanticVersion.validate_identifier new_value @metadata = new_value end
minor=(new_value)
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 44 def minor=(new_value) @minor = Integer(new_value, new_value.is_a?(String) ? 10 : 0) end
patch=(new_value)
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 48 def patch=(new_value) @patch = Integer(new_value, new_value.is_a?(String) ? 10 : 0) end
release()
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 65 def release return nil if @release_labels.nil? @release_labels.join('.') end
release=(new_value)
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 70 def release=(new_value) return @release_labels = nil if new_value.nil? new_value = new_value.split('.') SemanticVersion.validate_identifiers new_value @release_labels = new_value end
release_labels=(new_value)
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 52 def release_labels=(new_value) return @release_labels = nil if new_value.nil? new_value = new_value.to_s.split('.') if !new_value.kind_of? Array SemanticVersion.validate_identifiers new_value @release_labels = new_value end
to_s()
click to toggle source
# File lib/nuget_versions/semantic_version.rb, line 85 def to_s version = "#{@major}.#{@minor}.#{@patch}" version += "-#{release}" if is_prerelease? version += "+#{metadata}" if has_metadata? version end