class Vseries::SemanticVersion

Constants

DEFAULT_PRE_RELEASE_INITIAL_NUMBER
REGEXP

Attributes

major[RW]
minor[RW]
patch[RW]
pre_release[RW]

Public Class Methods

new(version, pre_release_initial_number: DEFAULT_PRE_RELEASE_INITIAL_NUMBER) click to toggle source
# File lib/vseries/semantic_version.rb, line 71
def initialize(version, pre_release_initial_number: DEFAULT_PRE_RELEASE_INITIAL_NUMBER)
  major, minor, patch, pre_release = version.match(REGEXP).captures

  @major = major.to_i
  @minor = minor.to_i
  @patch = patch.to_i
  @pre_release = PreRelease.new(pre_release)

  @pre_release_initial_number = pre_release_initial_number

  freeze
end

Public Instance Methods

<=>(other) click to toggle source
# File lib/vseries/semantic_version.rb, line 127
def <=>(other)
  return 1 if major > other.major
  return 1 if major == other.major && minor > other.minor
  return 1 if major == other.major && minor == other.minor && patch > other.patch
  return 1 if major == other.major && minor == other.minor && patch == other.patch && pre_release > other.pre_release
  return 0 if major == other.major && minor == other.minor && patch == other.patch && pre_release == other.pre_release

  -1
end
pre_release?() click to toggle source
# File lib/vseries/semantic_version.rb, line 123
def pre_release?
  pre_release.present?
end
release_version() click to toggle source
# File lib/vseries/semantic_version.rb, line 117
def release_version
  new_version = self.dup
  new_version.pre_release = PreRelease.empty
  new_version
end
to_s() click to toggle source
# File lib/vseries/semantic_version.rb, line 137
def to_s
  version = "#{@major}.#{@minor}.#{@patch}"
  version << @pre_release.to_s if @pre_release
  version
end
up(version_type) click to toggle source
# File lib/vseries/semantic_version.rb, line 84
def up(version_type)
  new_version = self.dup

  case version_type
  when :major
    new_version.major += 1
    new_version.minor = 0
    new_version.patch = 0
    new_version.pre_release.number = @pre_release_initial_number if pre_release?
  when :minor
    new_version.minor += 1
    new_version.patch = 0
    new_version.pre_release.number = @pre_release_initial_number if pre_release?
  when :patch
    new_version.patch += 1
    new_version.pre_release.number = @pre_release_initial_number if pre_release?
  when :pre_release
    new_version.pre_release = new_version.pre_release.up
  end

  new_version
end
with_pre_release(name) click to toggle source
# File lib/vseries/semantic_version.rb, line 107
def with_pre_release(name)
  new_version = self.dup

  return new_version if new_version.pre_release? && new_version.pre_release.name == name

  new_version.pre_release = PreRelease.with(name: name)

  new_version
end