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) ⇒ 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`.
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
# File 'lib/run_loop/version.rb', line 158 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.
118 119 120 |
# File 'lib/run_loop/version.rb', line 118 def != (other) Version.compare(self, other) != 0 end |
#<(other) ⇒ Boolean
Is this version less-than another version?
125 126 127 |
# File 'lib/run_loop/version.rb', line 125 def < (other) Version.compare(self, other) < 0 end |
#<=(other) ⇒ Boolean
Is this version less-than or equal to another version?
139 140 141 |
# File 'lib/run_loop/version.rb', line 139 def <= (other) Version.compare(self, other) <= 0 end |
#==(other) ⇒ Boolean
Compare this version to another for equality.
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 another version?
132 133 134 |
# File 'lib/run_loop/version.rb', line 132 def > (other) Version.compare(self, other) > 0 end |
#>=(other) ⇒ Boolean
Is this version greater-than or equal to another version?
146 147 148 |
# File 'lib/run_loop/version.rb', line 146 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 |
# File 'lib/run_loop/version.rb', line 104 def hash to_s.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 |