Class: Philiprehberger::Semver::Version
- Inherits:
-
Object
- Object
- Philiprehberger::Semver::Version
- Includes:
- Comparable
- Defined in:
- lib/philiprehberger/semver/version.rb
Instance Attribute Summary collapse
-
#build_metadata ⇒ Object
readonly
Returns the value of attribute build_metadata.
-
#major ⇒ Object
readonly
Returns the value of attribute major.
-
#minor ⇒ Object
readonly
Returns the value of attribute minor.
-
#patch ⇒ Object
readonly
Returns the value of attribute patch.
-
#pre_release ⇒ Object
readonly
Returns the value of attribute pre_release.
Instance Method Summary collapse
- #<=>(other) ⇒ Object
- #bump(level) ⇒ Object
-
#initialize(major, minor, patch, pre_release: nil, build_metadata: nil) ⇒ Version
constructor
A new instance of Version.
-
#next_pre_release(label: 'alpha') ⇒ Version
Return a new Version with its pre-release identifier iterated.
- #pre_release? ⇒ Boolean
- #stable? ⇒ Boolean
- #to_a ⇒ Object
- #to_s ⇒ Object
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_metadata ⇒ Object (readonly)
Returns the value of attribute build_metadata.
8 9 10 |
# File 'lib/philiprehberger/semver/version.rb', line 8 def @build_metadata end |
#major ⇒ Object (readonly)
Returns the value of attribute major.
8 9 10 |
# File 'lib/philiprehberger/semver/version.rb', line 8 def major @major end |
#minor ⇒ Object (readonly)
Returns the value of attribute minor.
8 9 10 |
# File 'lib/philiprehberger/semver/version.rb', line 8 def minor @minor end |
#patch ⇒ Object (readonly)
Returns the value of attribute patch.
8 9 10 |
# File 'lib/philiprehberger/semver/version.rb', line 8 def patch @patch end |
#pre_release ⇒ Object (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
.1is appended (rc->rc.1,alpha.beta->alpha.beta.1)
build_metadata is preserved on the returned Philiprehberger::Semver::Version. self is not mutated.
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
67 68 69 |
# File 'lib/philiprehberger/semver/version.rb', line 67 def pre_release? !@pre_release.nil? end |
#stable? ⇒ Boolean
71 72 73 |
# File 'lib/philiprehberger/semver/version.rb', line 71 def stable? @pre_release.nil? && @major >= 1 end |
#to_a ⇒ Object
75 76 77 |
# File 'lib/philiprehberger/semver/version.rb', line 75 def to_a [@major, @minor, @patch] end |
#to_s ⇒ Object
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 |