class EndOfLife::RubyVersion

Constants

DB_PATH
EOL_API_URL

Attributes

version[RW]

Public Class Methods

eol_versions_at(date) click to toggle source
# File lib/end_of_life/ruby_version.rb, line 16
def eol_versions_at(date)
  all_versions.filter { |version| version.eol_date <= date }
end
from_file(file_name:, content:, parser: Parser) click to toggle source
# File lib/end_of_life/ruby_version.rb, line 12
def from_file(file_name:, content:, parser: Parser)
  parser.parse_file(file_name: file_name, content: content)
end
latest_eol(at: Date.today) click to toggle source
# File lib/end_of_life/ruby_version.rb, line 20
def latest_eol(at: Date.today)
  eol_versions_at(at).max
end
new(version_string, eol_date: nil) click to toggle source
# File lib/end_of_life/ruby_version.rb, line 46
def initialize(version_string, eol_date: nil)
  @version = Gem::Version.new(version_string)
  @eol_date = eol_date

  freeze
end

Private Class Methods

all_versions() click to toggle source
# File lib/end_of_life/ruby_version.rb, line 29
def all_versions
  @all_versions ||= (fetch_end_of_life_api || load_file_fallback)
    .then { |json| JSON.parse(json, symbolize_names: true) }
    .map { |version| new(version[:latest], eol_date: Date.parse(version[:eol])) }
end
fetch_end_of_life_api() click to toggle source
# File lib/end_of_life/ruby_version.rb, line 35
def fetch_end_of_life_api
  Try { Net::HTTP.get URI(EOL_API_URL) }.value_or(nil)
end
load_file_fallback() click to toggle source
# File lib/end_of_life/ruby_version.rb, line 39
def load_file_fallback
  File.read(DB_PATH)
end

Public Instance Methods

<=>(other) click to toggle source
# File lib/end_of_life/ruby_version.rb, line 57
def <=>(other)
  @version <=> other.version
end
eol?(at: Date.today) click to toggle source
# File lib/end_of_life/ruby_version.rb, line 53
def eol?(at: Date.today)
  self <= RubyVersion.latest_eol(at: at)
end
to_s() click to toggle source
# File lib/end_of_life/ruby_version.rb, line 61
def to_s
  @version.to_s
end