Class: Librarian::Manifest::Version

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/librarian/manifest/version.rb

Constant Summary collapse

@@SEMANTIC_VERSION_PATTERN =
/^([0-9]+\.[0-9]+(?:\.[0-9]+)?)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ Version

Returns a new instance of Version.



11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/librarian/manifest/version.rb', line 11

def initialize(*args)
  args = initialize_normalize_args(args)
  semver = Version.parse_semver(*args)
  if semver
    self.backing  = Gem::Version.new(semver[:version])
    @prerelease   = semver[:prerelease]
    @full_version = semver[:full_version]
  else
    self.backing  = Gem::Version.new(*args)
    @full_version = to_gem_version.to_s
  end
end

Instance Attribute Details

#prereleaseObject (readonly)

Returns the value of attribute prerelease.



9
10
11
# File 'lib/librarian/manifest/version.rb', line 9

def prerelease
  @prerelease
end

Class Method Details

.parse_semver(version_string) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
# File 'lib/librarian/manifest/version.rb', line 54

def self.parse_semver(version_string)
  parsed = @@SEMANTIC_VERSION_PATTERN.match(version_string.strip)
  if parsed
    {
      :full_version => parsed[0],
      :version => parsed[1],
      :prerelease => (PreReleaseVersion.new(parsed[2]) if parsed[2]),
      :build => parsed[3]
    }
  end
end

Instance Method Details

#<=>(other) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/librarian/manifest/version.rb', line 28

def <=>(other)
  cmp = to_gem_version <=> other.to_gem_version

  # Should compare pre-release versions?
  if cmp == 0 and not (prerelease.nil? and other.prerelease.nil?)
    case # Versions without prerelease take precedence
      when (prerelease.nil? and not other.prerelease.nil?)
        1
      when (not prerelease.nil? and other.prerelease.nil?)
        -1
      else
        prerelease <=> other.prerelease
    end
  else
    cmp
  end
end

#inspectObject



50
51
52
# File 'lib/librarian/manifest/version.rb', line 50

def inspect
  "#<#{self.class} #{to_s}>"
end

#to_gem_versionObject



24
25
26
# File 'lib/librarian/manifest/version.rb', line 24

def to_gem_version
  backing
end

#to_sObject



46
47
48
# File 'lib/librarian/manifest/version.rb', line 46

def to_s
  @full_version
end