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