Class: Philiprehberger::Semver::Version

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/philiprehberger/semver/version.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(major, minor, patch, pre_release: nil, build_metadata: nil) ⇒ Version

Returns a new instance of Version.



10
11
12
13
14
15
16
17
# File 'lib/philiprehberger/semver/version.rb', line 10

def initialize(major, minor, patch, pre_release: nil, build_metadata: nil)
  @major = major.to_i
  @minor = minor.to_i
  @patch = patch.to_i
  @pre_release = pre_release
  @build_metadata = 
  freeze
end

Instance Attribute Details

#build_metadataObject (readonly)

Returns the value of attribute build_metadata.



8
9
10
# File 'lib/philiprehberger/semver/version.rb', line 8

def 
  @build_metadata
end

#majorObject (readonly)

Returns the value of attribute major.



8
9
10
# File 'lib/philiprehberger/semver/version.rb', line 8

def major
  @major
end

#minorObject (readonly)

Returns the value of attribute minor.



8
9
10
# File 'lib/philiprehberger/semver/version.rb', line 8

def minor
  @minor
end

#patchObject (readonly)

Returns the value of attribute patch.



8
9
10
# File 'lib/philiprehberger/semver/version.rb', line 8

def patch
  @patch
end

#pre_releaseObject (readonly)

Returns the value of attribute pre_release.



8
9
10
# File 'lib/philiprehberger/semver/version.rb', line 8

def pre_release
  @pre_release
end

Instance Method Details

#<=>(other) ⇒ Object



19
20
21
22
23
24
25
26
# File 'lib/philiprehberger/semver/version.rb', line 19

def <=>(other)
  return nil unless other.is_a?(Version)

  result = [major, minor, patch] <=> [other.major, other.minor, other.patch]
  return result unless result.zero?

  compare_pre_release(pre_release, other.pre_release)
end

#bump(level) ⇒ Object



28
29
30
31
32
33
34
35
# File 'lib/philiprehberger/semver/version.rb', line 28

def bump(level)
  case level
  when :major then self.class.new(major + 1, 0, 0)
  when :minor then self.class.new(major, minor + 1, 0)
  when :patch then self.class.new(major, minor, patch + 1)
  else raise Error, "unknown bump level: #{level}"
  end
end

#next_pre_release(label: 'alpha') ⇒ Version

Return a new Philiprehberger::Semver::Version with its pre-release identifier iterated.

When self is stable (no pre-release), the result is promoted to a pre-release using the given label with a numeric suffix of 1 (e.g. 1.2.3 with label: ‘alpha’ becomes 1.2.3-alpha.1).

When self is already a pre-release, the label keyword is ignored and the existing pre-release string is iterated:

  • if the last dot-separated token is numeric, that token is incremented (alpha.1 -> alpha.2, rc.4 -> rc.5)

  • otherwise .1 is appended (rc -> rc.1, alpha.beta -> alpha.beta.1)

build_metadata is preserved on the returned Philiprehberger::Semver::Version. self is not mutated.

Parameters:

  • label (String) (defaults to: 'alpha')

    pre-release label to use when promoting a stable version. Ignored when self is already a pre-release.

Returns:



56
57
58
59
60
61
62
63
64
65
# File 'lib/philiprehberger/semver/version.rb', line 56

def next_pre_release(label: 'alpha')
  new_pre_release =
    if pre_release.nil?
      "#{label}.1"
    else
      iterate_pre_release(pre_release)
    end

  self.class.new(major, minor, patch, pre_release: new_pre_release, build_metadata: )
end

#pre_release?Boolean

Returns:

  • (Boolean)


67
68
69
# File 'lib/philiprehberger/semver/version.rb', line 67

def pre_release?
  !@pre_release.nil?
end

#stable?Boolean

Returns:

  • (Boolean)


71
72
73
# File 'lib/philiprehberger/semver/version.rb', line 71

def stable?
  @pre_release.nil? && @major >= 1
end

#to_aObject



75
76
77
# File 'lib/philiprehberger/semver/version.rb', line 75

def to_a
  [@major, @minor, @patch]
end

#to_sObject



79
80
81
82
83
84
# File 'lib/philiprehberger/semver/version.rb', line 79

def to_s
  str = "#{major}.#{minor}.#{patch}"
  str = "#{str}-#{pre_release}" if pre_release
  str = "#{str}+#{}" if 
  str
end