Module: Vers::OpenSSLVersion

Extended by:
OpenSSLVersion
Included in:
OpenSSLVersion
Defined in:
lib/vers/special_version.rb

Defined Under Namespace

Classes: Parsed

Instance Method Summary collapse

Instance Method Details

#compare(left, right) ⇒ Object



204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
# File 'lib/vers/special_version.rb', line 204

def compare(left, right)
  parsed_left = parse(left)
  parsed_right = parse(right)
  return Version.compare(left, right) unless parsed_left && parsed_right
  return SemverVersion.compare(left, right) if version_three_or_newer?(parsed_left, parsed_right)

  parsed_left.core.zip(parsed_right.core).each do |left_part, right_part|
    comparison = VersionComparison.compare_numbers(left_part, right_part)
    return comparison unless comparison.zero?
  end

  left_prerelease = prerelease_patch?(parsed_left.patch)
  right_prerelease = prerelease_patch?(parsed_right.patch)
  return -1 if left_prerelease && !right_prerelease
  return 1 if !left_prerelease && right_prerelease

  parsed_left.patch <=> parsed_right.patch
end

#normalize(value) ⇒ Object



247
248
249
# File 'lib/vers/special_version.rb', line 247

def normalize(value)
  value.to_s.strip
end

#parse(value) ⇒ Object



223
224
225
226
227
228
229
230
231
232
# File 'lib/vers/special_version.rb', line 223

def parse(value)
  parts = value.to_s.split(".", 3)
  return nil unless parts.length == 3
  return nil unless parts[0].match?(/\A\d+\z/) && parts[1].match?(/\A\d+\z/)

  match = /\A(\d+)(.*)\z/.match(parts[2])
  return nil unless match

  Parsed.new([parts[0], parts[1], match[1]].freeze, match[2])
end

#prerelease?(value) ⇒ Boolean

Returns:

  • (Boolean)


251
252
253
254
255
256
257
258
259
260
# File 'lib/vers/special_version.rb', line 251

def prerelease?(value)
  parsed = parse(value.to_s.strip)
  return false unless parsed

  if VersionComparison.compare_numbers(parsed.core[0], "3") >= 0
    parsed.patch.start_with?("-")
  else
    prerelease_patch?(parsed.patch)
  end
end

#prerelease_patch?(patch) ⇒ Boolean

Returns:

  • (Boolean)


239
240
241
# File 'lib/vers/special_version.rb', line 239

def prerelease_patch?(patch)
  patch.start_with?("-alpha", "-beta")
end

#valid?(value) ⇒ Boolean

Returns:

  • (Boolean)


243
244
245
# File 'lib/vers/special_version.rb', line 243

def valid?(value)
  !parse(value.to_s.strip).nil?
end

#version_three_or_newer?(left, right) ⇒ Boolean

Returns:

  • (Boolean)


234
235
236
237
# File 'lib/vers/special_version.rb', line 234

def version_three_or_newer?(left, right)
  VersionComparison.compare_numbers(left.core[0], "3") >= 0 &&
    VersionComparison.compare_numbers(right.core[0], "3") >= 0
end