module VersionUtils

Public Class Methods

compare(v1, v2) click to toggle source
# File lib/version_compare.rb, line 4
def self.compare(v1, v2)

  v1 = self.parse(v1)
  v2 = self.parse(v2)

  compare_major = self.compare_segment(v1[:major], v2[:major])
  if compare_major != 0
    return compare_major
  end

  compare_minor = self.compare_segment(v1[:minor], v2[:minor])
  if compare_minor != 0
    return compare_minor
  end

  compare_patch = self.compare_segment(v1[:patch], v2[:patch])
  if compare_patch != 0
    return compare_patch
  end

  return self.compare_pre_releae(v1[:pre_release], v2[:pre_release])

end
compare_pre_releae(pr1, pr2) click to toggle source
# File lib/version_compare.rb, line 50
def self.compare_pre_releae(pr1, pr2)

  if pr1 == nil && pr2 == nil
    return 0
  end

  if pr1 == nil && pr2 != nil
    return 1
  end

  if pr1 != nil && pr2 == nil
    return -1
  end

  pr1 = pr1.gsub(".", "")
  pr2 = pr2.gsub(".", "")

  if pr1 == pr2
    return 0
  end

  if pr1 > pr2
    return 1
  end

  if pr1 < pr2
    return -1
  end
end
compare_segment(s1, s2) click to toggle source
# File lib/version_compare.rb, line 28
def self.compare_segment(s1, s2)
  if s1 == nil
    return -1
  end

  if s2 == nil
    return 1
  end

  if s1 == s2
    return 0
  end

  if s1 < s2
    return -1
  end

  if s1 > s2
    return 1
  end
end
format(parts) click to toggle source
# File lib/version_format.rb, line 2
def self.format(parts)
  version = []
  version = version + [parts[:major]]

  if parts[:minor] != nil
    version = version + [parts[:minor]]
  end

  if parts[:patch] != nil
    version = version + [parts[:patch]]
  end

  version = version.join(".")

  if parts[:pre_release] != nil
    version = version + "-" + parts[:pre_release]
  end

  if parts[:metadata] != nil
    version = version + "+" + parts[:metadata]
  end

  return version.force_encoding("utf-8")
end
parse(version) click to toggle source
# File lib/version_parse.rb, line 2
def self.parse(version)

  result = {}

  if version.split("+").length > 1
    metadata = version.split("+")[1]
    result[:metadata] = metadata
    version = version.split("+")[0]
  end

  if version.split("-").length > 1
    part_post_segments = version.split("-")[1]
    pre_release = part_post_segments.split("+")[0]
    result[:pre_release] = pre_release
    version = version.split("-")[0]

  end

  segments = version.split(".")

  result[:major] = Integer(segments[0])

  if segments.length > 1
    result[:minor] = Integer(segments[1])
  else
    result[:minor] = nil
  end

  if segments.length > 2
    result[:patch] = Integer(segments[2])
  else
    result[:patch] = nil
  end

  return result
end
update_metadata(version, update_build_version) click to toggle source
# File lib/version_manipulation.rb, line 58
def self.update_metadata(version, update_build_version)
  if update_build_version
    begin
      build_version = Integer(version[:metadata])
      version[:metadata] = (build_version + 1).to_s
    rescue
      version[:metadata] = nil
    end
  else
    version[:metadata] = nil
  end
  return version
end
update_patch(version) click to toggle source
# File lib/version_manipulation.rb, line 46
def self.update_patch(version)
  if version[:patch] != nil
    version[:patch] = 0
  end
  return version
end
update_pre_release(version) click to toggle source
# File lib/version_manipulation.rb, line 53
def self.update_pre_release(version)
  version[:pre_release] = nil
  return version
end
upgrade_major( version, update_build_version: false) click to toggle source
# File lib/version_manipulation.rb, line 2
def self.upgrade_major(
    version,
    update_build_version: false)

  version = self.parse(version)

  version[:major] += 1

  if version[:minor] != nil
    version[:minor] = 0
  end

  version = self.update_patch(version)
  version = self.update_pre_release(version)
  version = self.update_metadata(version, update_build_version)

  return self.format(version)
end
upgrade_minor( version, update_build_version: false) click to toggle source
# File lib/version_manipulation.rb, line 21
def self.upgrade_minor(
    version,
    update_build_version: false)
  version = self.parse(version)

  version[:minor] += 1

  version = self.update_patch(version)
  version = self.update_pre_release(version)
  version = self.update_metadata(version, update_build_version)
  return self.format(version)
end
upgrade_patch( version, update_build_version: false) click to toggle source
# File lib/version_manipulation.rb, line 34
def self.upgrade_patch(
    version,
    update_build_version: false)
  version = self.parse(version)

  version[:patch] += 1

  version = self.update_pre_release(version)
  version = self.update_metadata(version, update_build_version)
  return self.format(version)
end