class Safedep::Policy::SemVer

Attributes

major[R]
minor[R]
patch[R]
suffix[R]
version[R]

Public Class Methods

new(version) click to toggle source
# File lib/safedep/policy/sem_ver.rb, line 10
def initialize(version)
  @version = if version.is_a?(Gem::Version)
               version
             else
               Gem::Version.new(version)
             end

  decompose_version
end
version_specifiers(version) click to toggle source
# File lib/safedep/policy/sem_ver.rb, line 6
def self.version_specifiers(version)
  new(version).version_specifiers
end

Public Instance Methods

version_specifiers() click to toggle source
# File lib/safedep/policy/sem_ver.rb, line 20
def version_specifiers
  specifiers = ['~> ' + [major, minor].join('.')]
  return specifiers if satisfy_specifiers?(specifiers)

  specifiers = [">= #{version}", "< #{major.to_i + 1}"]
  return specifiers if satisfy_specifiers?(specifiers)

  nil
end

Private Instance Methods

decompose_version() click to toggle source
# File lib/safedep/policy/sem_ver.rb, line 32
def decompose_version
  elements =  version.to_s.split('.')

  %i[major minor patch].each do |role|
    if elements.first && elements.first.match(/^\d+$/)
      instance_variable_set("@#{role}", elements.shift)
    else
      instance_variable_set("@#{role}", '0')
    end
  end

  @suffix = elements.shift if elements.first && !elements.first.match(/^\d+$/)
end
satisfy_specifiers?(specifiers) click to toggle source
# File lib/safedep/policy/sem_ver.rb, line 46
def satisfy_specifiers?(specifiers)
  requirement = Gem::Requirement.new(*specifiers)
  requirement.satisfied_by?(version)
end