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>`.
TODO Expand to handle versions with more than 1 “.” and no “.” ^ Needs to handle arbitrary versions from Info.plists. In particular it
needs to handle a unix timestamp - found the DeviceAgent-Runner.app.
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) ⇒ Integer
Compare version ‘a` to version `b`.
-
#==(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?.
-
#eql?(other) ⇒ Boolean
Compare this version to another for object equality.
-
#hash ⇒ Object
The hash method for this instance.
-
#initialize(version) ⇒ Version
constructor
Creates a new Version instance with all the attributes set.
- #inspect ⇒ Object
-
#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.
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/run_loop/version.rb', line 64 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.
25 26 27 |
# File 'lib/run_loop/version.rb', line 25 def major @major end |
#minor ⇒ Integer
Returns the minor version.
29 30 31 |
# File 'lib/run_loop/version.rb', line 29 def minor @minor end |
#patch ⇒ Integer
Returns the patch version.
33 34 35 |
# File 'lib/run_loop/version.rb', line 33 def patch @patch end |
#pre ⇒ Boolean
Returns true if this is a pre-release version.
37 38 39 |
# File 'lib/run_loop/version.rb', line 37 def pre @pre end |
#pre_version ⇒ Integer
Returns if this is a pre-release version, returns the pre-release version; otherwise this is nil.
42 43 44 |
# File 'lib/run_loop/version.rb', line 42 def pre_version @pre_version end |
Class Method Details
.compare(a, b) ⇒ Integer
Compare version ‘a` to version `b`.
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 |
# File 'lib/run_loop/version.rb', line 178 def self.compare(a, b) if a.major != b.major return a.major.to_i > b.major.to_i ? 1 : -1 end a_minor = a.minor ? a.minor.to_i : 0 b_minor = b.minor ? b.minor.to_i : 0 if a_minor != b_minor return a_minor > b_minor.to_i ? 1 : -1 end a_patch = a.patch ? a.patch.to_i : 0 b_patch = b.patch ? b.patch.to_i : 0 if a_patch != b_patch return a_patch.to_i > b_patch.to_i ? 1 : -1 end return -1 if a.pre && (!a.pre_version) && b.pre_version return 1 if a.pre_version && b.pre && (!b.pre_version) return -1 if a.pre && (!b.pre) return 1 if (!a.pre) && b.pre return -1 if a.pre_version && (!b.pre_version) return 1 if (!a.pre_version) && 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.
126 127 128 |
# File 'lib/run_loop/version.rb', line 126 def != (other) Version.compare(self, other) != 0 end |
#<(other) ⇒ Boolean
Is this version less-than another version?
133 134 135 |
# File 'lib/run_loop/version.rb', line 133 def < (other) Version.compare(self, other) < 0 end |
#<=(other) ⇒ Boolean
Is this version less-than or equal to another version?
147 148 149 |
# File 'lib/run_loop/version.rb', line 147 def <= (other) Version.compare(self, other) <= 0 end |
#<=>(other) ⇒ Integer
Compare version ‘a` to version `b`.
166 167 168 |
# File 'lib/run_loop/version.rb', line 166 def <=> (other) Version.compare(self, other) end |
#==(other) ⇒ Boolean
Compare this version to another for equality.
119 120 121 |
# File 'lib/run_loop/version.rb', line 119 def == (other) Version.compare(self, other) == 0 end |
#>(other) ⇒ Boolean
Is this version greater-than another version?
140 141 142 |
# File 'lib/run_loop/version.rb', line 140 def > (other) Version.compare(self, other) > 0 end |
#>=(other) ⇒ Boolean
Is this version greater-than or equal to another version?
154 155 156 |
# File 'lib/run_loop/version.rb', line 154 def >= (other) Version.compare(self, other) >= 0 end |
#eql?(other) ⇒ Boolean
Compare this version to another for object equality. This allows Version instances to be used as Hash keys.
99 100 101 |
# File 'lib/run_loop/version.rb', line 99 def eql?(other) hash == other.hash end |
#hash ⇒ Object
The hash method for this instance.
104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/run_loop/version.rb', line 104 def hash str = [major, minor, patch].map do |str| str ? str : "0" end.join(".") if pre str = "#{str}.#{pre}" end str.hash end |
#inspect ⇒ Object
92 93 94 |
# File 'lib/run_loop/version.rb', line 92 def inspect "#<Version #{to_s}>" end |
#to_s ⇒ String
Returns an string representation of this version.
86 87 88 89 90 |
# File 'lib/run_loop/version.rb', line 86 def to_s str = [major, minor, patch].compact.join('.') str = "#{str}.#{pre}" if pre str end |