Class: RunLoop::Version
- Inherits:
-
Object
- Object
- RunLoop::Version
- Defined in:
- lib/run_loop/version.rb
Overview
A model of a software release version that can be used to compare two versions.
Calabash and RunLoop try very hard to comply with Semantic Versioning rules. However, the semantic versioning spec is incompatible with RubyGem’s patterns for pre-release gems.
> “But returning to the practical: No release version of SemVer is compatible with Rubygems.” - _David Kellum_
Calabash and RunLoop version numbers will be in the form ‘<major>.<minor>.<patch>`.
Instance Attribute Summary collapse
-
#major ⇒ Integer
The major version.
-
#minor ⇒ Integer
The minor version.
-
#patch ⇒ Integer
The patch version.
-
#pre ⇒ Boolean
True if this is a pre-release version.
-
#pre_version ⇒ Integer
If this is a pre-release version, returns the pre-release version; otherwise this is nil.
Class Method Summary collapse
-
.compare(a, b) ⇒ Integer
Compare version ‘a` to version `b`.
Instance Method Summary collapse
-
#!=(other) ⇒ Boolean
Compare this version to another for inequality.
-
#<(other) ⇒ Boolean
Is this version less-than another version?.
-
#<=(other) ⇒ Boolean
Is this version less-than or equal to another version?.
-
#==(other) ⇒ Boolean
Compare this version to another for equality.
-
#>(other) ⇒ Boolean
Is this version greater-than another version?.
-
#>=(other) ⇒ Boolean
Is this version greater-than or equal to another version?.
-
#initialize(version) ⇒ Version
constructor
Creates a new Version instance with all the attributes set.
-
#to_s ⇒ String
Returns an string representation of this version.
Constructor Details
#initialize(version) ⇒ Version
Creates a new Version instance with all the attributes set.
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/run_loop/version.rb', line 59 def initialize(version) tokens = version.strip.split('.') count = tokens.count if tokens.empty? raise ArgumentError, "expected '#{version}' to be like 5, 6.1, 7.1.2, 8.2.3.pre1" end if count < 4 and tokens.any? { |elm| elm =~ /\D/ } raise ArgumentError, "expected '#{version}' to be like 5, 6.1, 7.1.2, 8.2.3.pre1" end if count == 4 @pre = tokens[3] pre_tokens = @pre.scan(/\D+|\d+/) @pre_version = pre_tokens[1].to_i if pre_tokens.count == 2 end @major, @minor, @patch = version.split('.').map(&:to_i) end |
Instance Attribute Details
#major ⇒ Integer
Returns the major version.
20 21 22 |
# File 'lib/run_loop/version.rb', line 20 def major @major end |
#minor ⇒ Integer
Returns the minor version.
24 25 26 |
# File 'lib/run_loop/version.rb', line 24 def minor @minor end |
#patch ⇒ Integer
Returns the patch version.
28 29 30 |
# File 'lib/run_loop/version.rb', line 28 def patch @patch end |
#pre ⇒ Boolean
Returns true if this is a pre-release version.
32 33 34 |
# File 'lib/run_loop/version.rb', line 32 def pre @pre end |
#pre_version ⇒ Integer
Returns if this is a pre-release version, returns the pre-release version; otherwise this is nil.
37 38 39 |
# File 'lib/run_loop/version.rb', line 37 def pre_version @pre_version end |
Class Method Details
.compare(a, b) ⇒ Integer
Compare version ‘a` to version `b`.
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/run_loop/version.rb', line 137 def self.compare(a, b) if a.major != b.major return a.major > b.major ? 1 : -1 end if a.minor != b.minor return a.minor.to_i > b.minor.to_i ? 1 : -1 end if a.patch != b.patch return a.patch.to_i > b.patch.to_i ? 1 : -1 end return -1 if a.pre and (not a.pre_version) and b.pre_version return 1 if a.pre_version and b.pre and (not b.pre_version) return -1 if a.pre and (not b.pre) return 1 if (not a.pre) and b.pre return -1 if a.pre_version and (not b.pre_version) return 1 if (not a.pre_version) and b.pre_version if a.pre_version != b.pre_version return a.pre_version.to_i > b.pre_version.to_i ? 1 : -1 end 0 end |
Instance Method Details
#!=(other) ⇒ Boolean
Compare this version to another for inequality.
97 98 99 |
# File 'lib/run_loop/version.rb', line 97 def != (other) Version.compare(self, other) != 0 end |
#<(other) ⇒ Boolean
Is this version less-than another version?
104 105 106 |
# File 'lib/run_loop/version.rb', line 104 def < (other) Version.compare(self, other) < 0 end |
#<=(other) ⇒ Boolean
Is this version less-than or equal to another version?
118 119 120 |
# File 'lib/run_loop/version.rb', line 118 def <= (other) Version.compare(self, other) <= 0 end |
#==(other) ⇒ Boolean
Compare this version to another for equality.
90 91 92 |
# File 'lib/run_loop/version.rb', line 90 def == (other) Version.compare(self, other) == 0 end |
#>(other) ⇒ Boolean
Is this version greater-than another version?
111 112 113 |
# File 'lib/run_loop/version.rb', line 111 def > (other) Version.compare(self, other) > 0 end |
#>=(other) ⇒ Boolean
Is this version greater-than or equal to another version?
125 126 127 |
# File 'lib/run_loop/version.rb', line 125 def >= (other) Version.compare(self, other) >= 0 end |
#to_s ⇒ String
Returns an string representation of this version.
81 82 83 84 85 |
# File 'lib/run_loop/version.rb', line 81 def to_s str = [major, minor, patch].compact.join('.') str = "#{str}.#{pre}" if pre str end |