Class: Librarian::Manifest::PreReleaseVersion

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(prerelease) ⇒ PreReleaseVersion

Returns a new instance of PreReleaseVersion.



35
36
37
38
# File 'lib/librarian/manifest/pre_release_version.rb', line 35

def initialize(prerelease)
  @prerelease = prerelease
  @components = PreReleaseVersion.parse(prerelease)
end

Instance Attribute Details

#componentsObject (readonly)

Returns the value of attribute components.



33
34
35
# File 'lib/librarian/manifest/pre_release_version.rb', line 33

def components
  @components
end

Class Method Details

.compare_components(this_id, other_id) ⇒ Object

Compares pre-release component ids using Semver 2.0.0 spec



7
8
9
10
11
12
13
14
15
16
# File 'lib/librarian/manifest/pre_release_version.rb', line 7

def self.compare_components(this_id,other_id)
  case # Strings have higher precedence than numbers
    when (this_id.is_a?(Integer) and other_id.is_a?(String))
      -1
    when (this_id.is_a?(String) and other_id.is_a?(Integer))
      1
    else
      this_id <=> other_id
  end
end

.parse(prerelease) ⇒ Object

Parses pre-release components ‘a.b.c` into an array “[a,b,c]` Converts numeric components into Integer



20
21
22
23
24
25
26
27
28
29
# File 'lib/librarian/manifest/pre_release_version.rb', line 20

def self.parse(prerelease)
  if prerelease.nil?
    []
  else
    prerelease.split('.').collect do |id|
      id = Integer(id) if /^[0-9]+$/ =~ id
      id
    end
  end
end

Instance Method Details

#<=>(other) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/librarian/manifest/pre_release_version.rb', line 44

def <=>(other)
  # null-fill zip array to prevent loss of components
  z = Array.new([components.length,other.components.length])

  # Compare each component against the other
  comp = z.zip(components,other.components).collect do |ids|
    case # All components being equal, the version with more of them takes precedence
      when ids[1].nil? # Self has less elements, other wins
        -1
      when ids[2].nil? # Other has less elements, self wins
        1
      else
        PreReleaseVersion.compare_components(ids[1],ids[2])
    end
  end
  # Chose the first non-zero comparison or return 0
  comp.delete_if {|c| c == 0}[0] || 0
end

#to_sObject



40
41
42
# File 'lib/librarian/manifest/pre_release_version.rb', line 40

def to_s
  @prerelease
end