Module: Vers::CargoVersion

Extended by:
CargoVersion
Included in:
CargoVersion
Defined in:
lib/vers/semver_version.rb

Instance Method Summary collapse

Instance Method Details

#compare(left, right) ⇒ Object



152
153
154
155
156
157
158
159
160
161
# File 'lib/vers/semver_version.rb', line 152

def compare(left, right)
  comparison = SemverVersion.compare(left, right)
  return comparison unless comparison.zero?

  parsed_left = SemverVersion.parse(left)
  parsed_right = SemverVersion.parse(right)
  return comparison unless parsed_left && parsed_right

  compare_build(parsed_left.build, parsed_right.build)
end

#compare_build(left, right) ⇒ Object



163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
# File 'lib/vers/semver_version.rb', line 163

def compare_build(left, right)
  return 0 if left == right
  return -1 if left.empty?
  return 1 if right.empty?

  left_parts = left.split(".", -1)
  right_parts = right.split(".", -1)
  left_parts.zip(right_parts).each do |left_part, right_part|
    return 1 if right_part.nil?

    comparison = compare_build_identifier(left_part, right_part)
    return comparison unless comparison.zero?
  end

  left_parts.length <=> right_parts.length
end

#compare_build_identifier(left, right) ⇒ Object



180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
# File 'lib/vers/semver_version.rb', line 180

def compare_build_identifier(left, right)
  left_numeric = VersionComparison.numeric?(left)
  right_numeric = VersionComparison.numeric?(right)
  return -1 if left_numeric && !right_numeric
  return 1 if !left_numeric && right_numeric
  return left <=> right unless left_numeric

  normalized_left = VersionComparison.normalize_number(left)
  normalized_right = VersionComparison.normalize_number(right)
  comparison = normalized_left.length <=> normalized_right.length
  return comparison unless comparison.zero?

  comparison = normalized_left <=> normalized_right
  return comparison unless comparison.zero?

  left.length <=> right.length
end

#normalize(value) ⇒ Object



202
203
204
# File 'lib/vers/semver_version.rb', line 202

def normalize(value)
  SemverVersion.normalize(value.to_s.strip)
end

#prerelease?(value) ⇒ Boolean

Returns:

  • (Boolean)


206
207
208
# File 'lib/vers/semver_version.rb', line 206

def prerelease?(value)
  SemverVersion.prerelease?(value.to_s.strip)
end

#valid?(value) ⇒ Boolean

Returns:

  • (Boolean)


198
199
200
# File 'lib/vers/semver_version.rb', line 198

def valid?(value)
  SemverVersion.valid?(value.to_s.strip)
end