Class: Semverse::Version
- Inherits:
-
Object
- Object
- Semverse::Version
- Includes:
- Comparable
- Defined in:
- lib/semverse/version.rb
Instance Attribute Summary collapse
-
#build ⇒ Object
readonly
Returns the value of attribute build.
-
#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.
Class Method Summary collapse
-
.coerce(version_or_string) ⇒ Version
Convert the argument to a Version object if it isn’t one already.
- .split(version_string) ⇒ Array
Instance Method Summary collapse
- #<=>(other) ⇒ Integer
- #eql?(other) ⇒ Boolean
- #identifiers(release) ⇒ Array
- #identifiers_comparaison(other, release) ⇒ Integer
-
#initialize(*args) ⇒ Version
constructor
A new instance of Version.
- #inspect ⇒ Object
- #pre_release? ⇒ Boolean
- #pre_release_and_build_presence_score ⇒ Integer
- #to_s ⇒ Object
- #zero? ⇒ Boolean
Constructor Details
#initialize(version_array) ⇒ Version #initialize(version_string) ⇒ Version #initialize(version) ⇒ Version
Returns a new instance of Version.
77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/semverse/version.rb', line 77 def initialize(*args) if args.first.is_a?(Array) @major, @minor, @patch, @pre_release, @build = args.first else @major, @minor, @patch, @pre_release, @build = self.class.split(args.first.to_s) end @major ||= 0 @minor ||= 0 @patch ||= 0 @pre_release ||= nil @build ||= nil end |
Instance Attribute Details
#build ⇒ Object (readonly)
Returns the value of attribute build.
57 58 59 |
# File 'lib/semverse/version.rb', line 57 def build @build end |
#major ⇒ Object (readonly)
Returns the value of attribute major.
53 54 55 |
# File 'lib/semverse/version.rb', line 53 def major @major end |
#minor ⇒ Object (readonly)
Returns the value of attribute minor.
54 55 56 |
# File 'lib/semverse/version.rb', line 54 def minor @minor end |
#patch ⇒ Object (readonly)
Returns the value of attribute patch.
55 56 57 |
# File 'lib/semverse/version.rb', line 55 def patch @patch end |
#pre_release ⇒ Object (readonly)
Returns the value of attribute pre_release.
56 57 58 |
# File 'lib/semverse/version.rb', line 56 def pre_release @pre_release end |
Class Method Details
.coerce(version_or_string) ⇒ Version
Convert the argument to a Version object if it isn’t one already. Creating version objects from Strings involves expensive Regexp processing, so this improves performance when dealing with objects that may be instances of Version.
9 10 11 |
# File 'lib/semverse/version.rb', line 9 def coerce(object) object.is_a?(self) ? object : new(object) end |
.split(version_string) ⇒ Array
18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/semverse/version.rb', line 18 def split(version_string) case version_string.to_s when /^(\d+)\.(\d+)\.(\d+)(-([0-9a-z\-\.]+))?(\+([0-9a-z\-\.]+))?$/i [ $1.to_i, $2.to_i, $3.to_i, $5, $7 ] when /^(\d+)\.(\d+)\.(\d+)?$/ [ $1.to_i, $2.to_i, $3.to_i ] when /^(\d+)\.(\d+)?$/ [ $1.to_i, $2.to_i, 0 ] when /^(\d+)$/ [ $1.to_i, 0, 0 ] else raise InvalidVersionFormat.new(version_string) end end |
Instance Method Details
#<=>(other) ⇒ Integer
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/semverse/version.rb', line 94 def <=>(other) [:major, :minor, :patch].each do |release| ans = self.send(release) <=> other.send(release) return ans if ans != 0 end ans = pre_release_and_build_presence_score <=> other.pre_release_and_build_presence_score return ans if ans != 0 ans = identifiers_comparaison(other, :pre_release) return ans if ans != 0 if build && other.build return identifiers_comparaison(other, :build) else return build.to_s <=> other.build.to_s end 0 end |
#eql?(other) ⇒ Boolean
151 152 153 |
# File 'lib/semverse/version.rb', line 151 def eql?(other) other.is_a?(Version) && self == other end |
#identifiers(release) ⇒ Array
112 113 114 115 116 |
# File 'lib/semverse/version.rb', line 112 def identifiers(release) send(release).to_s.split('.').map do |str| str.to_i.to_s == str ? str.to_i : str end end |
#identifiers_comparaison(other, release) ⇒ Integer
134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/semverse/version.rb', line 134 def identifiers_comparaison(other, release) [identifiers(release).length, other.identifiers(release).length].max.times do |i| if identifiers(release)[i].class == other.identifiers(release)[i].class ans = identifiers(release)[i] <=> other.identifiers(release)[i] return ans if ans != 0 elsif identifiers(release)[i] && other.identifiers(release)[i] return identifiers(release)[i].class.to_s <=> other.identifiers(release)[i].class.to_s elsif identifiers(release)[i] || other.identifiers(release)[i] return other.identifiers(release)[i].class.to_s <=> identifiers(release)[i].class.to_s end end 0 end |
#inspect ⇒ Object
155 156 157 |
# File 'lib/semverse/version.rb', line 155 def inspect "#<#{self.class.to_s} #{to_s}>" end |
#pre_release? ⇒ Boolean
118 119 120 |
# File 'lib/semverse/version.rb', line 118 def pre_release? !!pre_release end |
#pre_release_and_build_presence_score ⇒ Integer
127 128 129 |
# File 'lib/semverse/version.rb', line 127 def pre_release_and_build_presence_score pre_release ? 0 : (build.nil? ? 1 : 2) end |
#to_s ⇒ Object
159 160 161 162 163 164 |
# File 'lib/semverse/version.rb', line 159 def to_s str = "#{major}.#{minor}.#{patch}" str += "-#{pre_release}" if pre_release str += "+#{build}" if build str end |
#zero? ⇒ Boolean
122 123 124 |
# File 'lib/semverse/version.rb', line 122 def zero? [major, minor, patch].all? { |n| n == 0 } end |