class SemanticRange::PreRelease

Attributes

parts[R]

Public Class Methods

new(input) click to toggle source
# File lib/semantic_range/pre_release.rb, line 5
def initialize(input)
  @parts = parse(input)
end

Public Instance Methods

<=>(other) click to toggle source
# File lib/semantic_range/pre_release.rb, line 37
def <=>(other)
  return unless other.is_a?(self.class)

  return -1 if parts.any? && !other.parts.any?
  return 1 if !parts.any? && other.parts.any?
  return 0 if !parts.any? && !other.parts.any?

  i = 0
  while true
    a = parts[i]
    b = other.parts[i]

    if a.nil? && b.nil?
      return 0
    elsif b.nil?
      return 1
    elsif a.nil?
      return -1
    elsif a == b

    else
      return Version.compare_identifiers(a, b)
    end
    i += 1
  end
end
clear!() click to toggle source
# File lib/semantic_range/pre_release.rb, line 29
def clear!
  @parts = []
end
convert(str) click to toggle source
# File lib/semantic_range/pre_release.rb, line 13
def convert(str)
  str.match(/^[0-9]+$/) ? str.to_i : str
end
empty?() click to toggle source
# File lib/semantic_range/pre_release.rb, line 21
def empty?
  parts.empty?
end
increment!(identifier = nil) click to toggle source
# File lib/semantic_range/pre_release.rb, line 68
def increment!(identifier = nil)
  if empty?
    zero!
  else
    if last_number_index
      @parts[last_number_index] += 1
    else
      @parts << 0
    end
  end

  if identifier
    # 1.2.0-beta.1 bumps to 1.2.0-beta.2,
    # 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
    if parts[0] == identifier
      unless parts[1].kind_of?(Integer)
        @parts = [identifier, 0]
      end
    else
      @parts = [identifier, 0]
    end
  end
end
last_number_index() click to toggle source
# File lib/semantic_range/pre_release.rb, line 64
def last_number_index
  parts.rindex { |e| e.is_a? Integer }
end
length() click to toggle source
# File lib/semantic_range/pre_release.rb, line 17
def length
  parts.length
end
parse(str) click to toggle source
# File lib/semantic_range/pre_release.rb, line 9
def parse(str)
  str.to_s.split('.').map { |id| convert(id) }
end
to_s() click to toggle source
# File lib/semantic_range/pre_release.rb, line 25
def to_s
  parts.join '.'
end
zero!() click to toggle source
# File lib/semantic_range/pre_release.rb, line 33
def zero!
  @parts = [0]
end