Module: StillActive::VersionHelper

Extended by:
VersionHelper
Included in:
VersionHelper
Defined in:
lib/helpers/version_helper.rb

Instance Method Summary collapse

Instance Method Details

#find_version(versions:, version_string: nil, pre_release: false) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/helpers/version_helper.rb', line 9

def find_version(versions:, version_string: nil, pre_release: false)
  if version_string && pre_release
    versions&.find { |v| v["number"] == version_string && v["prerelease"] == pre_release }
  elsif !version_string.nil?
    versions&.find { |v| v["number"] == version_string }
  else
    # The "latest" of a kind: pick the highest by version rather than trust
    # the source's ordering. RubyGems happens to return newest-first, but
    # GitHub Packages and other sources don't, and a wrong "latest" cascades
    # into up_to_date and libyear.
    versions
      &.select { |v| v["prerelease"] == pre_release }
      &.max_by { |v| to_gem_version(v["number"]) || Gem::Version.new("0") }
  end
end

#gem_version(version_hash:) ⇒ Object



37
38
39
# File 'lib/helpers/version_helper.rb', line 37

def gem_version(version_hash:)
  version_hash&.dig("number")
end

#license(version_hash:) ⇒ Object

SPDX license identifier(s) from the RubyGems versions payload. Comma-joined when a gem declares more than one. nil when unknown.



49
50
51
52
53
54
# File 'lib/helpers/version_helper.rb', line 49

def license(version_hash:)
  licenses = version_hash&.dig("licenses")
  return if licenses.nil? || licenses.empty?

  licenses.join(", ")
end

#release_date(version_hash:) ⇒ Object



41
42
43
44
45
# File 'lib/helpers/version_helper.rb', line 41

def release_date(version_hash:)
  release_date = version_hash&.dig("created_at")

  Time.parse(release_date) unless release_date.nil?
end

#up_to_date(version_used:, latest_version: nil, latest_pre_release_version: nil) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
# File 'lib/helpers/version_helper.rb', line 25

def up_to_date(version_used:, latest_version: nil, latest_pre_release_version: nil)
  return if latest_version.nil? && latest_pre_release_version.nil?

  used = to_gem_version(version_used)
  return if used.nil?

  [latest_version, latest_pre_release_version]
    .compact
    .filter_map { |v| to_gem_version(v) }
    .any? { |v| used >= v }
end