class Raketeer::SemVer

Semantic Version

This is a non-strict version of Semantic Versioning v2.0.0.

@author Jonathan Bradley Whited @since 0.2.4 @see semver.org

Constants

REGEX
STRICT_REGEX

Attributes

build_meta[RW]
major[RW]
minor[RW]
patch[RW]
prerelease[RW]
version[RW]

Public Class Methods

new(major: nil,minor: nil,patch: nil,prerelease: nil,build_meta: nil) click to toggle source
# File lib/raketeer/sem_ver.rb, line 33
def initialize(major: nil,minor: nil,patch: nil,prerelease: nil,build_meta: nil)
  @build_meta = build_meta
  @major = major
  @minor = minor
  @patch = patch
  @prerelease = prerelease
  @version = nil
end
parse(str) click to toggle source
# File lib/raketeer/sem_ver.rb, line 55
def self.parse(str)
  # Parsing backwards makes the logic easier
  build_meta = str.split('+',2)
  prerelease = build_meta[0].split('-',2)
  numbers = prerelease[0].split('.',3)

  sem_ver = SemVer.new
  sem_ver.major = numbers[0].to_i # There must always be a major version

  if numbers.length >= 2
    minor = numbers[1].strip
    sem_ver.minor = minor.to_i unless minor.empty?

    if numbers.length == 3
      patch = numbers[2].strip
      sem_ver.patch = patch.to_i unless patch.empty?
    end
  end

  if prerelease.length == 2
    prerelease = prerelease[1].strip
    sem_ver.prerelease = prerelease unless prerelease.empty?
  end

  if build_meta.length == 2
    build_meta = build_meta[1].strip
    sem_ver.build_meta = build_meta unless build_meta.empty?
  end

  return sem_ver
end
parse_line(line,strict: false) click to toggle source
# File lib/raketeer/sem_ver.rb, line 87
def self.parse_line(line,strict: false)
  str = line[regex(strict)]

  return nil if str.nil? || (str = str.strip).empty?
  return parse(str)
end
regex(strict=false) click to toggle source
# File lib/raketeer/sem_ver.rb, line 103
def self.regex(strict=false)
  return strict ? STRICT_REGEX : REGEX
end

Public Instance Methods

empty?() click to toggle source
# File lib/raketeer/sem_ver.rb, line 94
def empty?
  return @build_meta.nil? &&
         @major.nil? &&
         @minor.nil? &&
         @patch.nil? &&
         @prerelease.nil? &&
         @version.nil?
end
initialize_copy(orig) click to toggle source
Calls superclass method
# File lib/raketeer/sem_ver.rb, line 42
def initialize_copy(orig)
  super(orig)

  copy = caller[0].to_s.include?('clone') ? :clone : :dup

  @build_meta = @build_meta.__send__(copy)
  @major = @major.__send__(copy)
  @minor = @minor.__send__(copy)
  @patch = @patch.__send__(copy)
  @prerelease = @prerelease.__send__(copy)
  @version = @version.__send__(copy)
end
to_s() click to toggle source
# File lib/raketeer/sem_ver.rb, line 107
def to_s
  s = ''.dup

  if !@version.nil?
    s << @version.to_s
  elsif !@major.nil?
    s << @major.to_s
    s << ".#{@minor}" unless @minor.nil?
    s << ".#{@patch}" unless @patch.nil?
    s << "-#{@prerelease}" unless @prerelease.nil?
    s << "+#{@build_meta}" unless @build_meta.nil?
  end

  return s
end