Class: DependencyTimelineAudit::GemInfo

Inherits:
Object
  • Object
show all
Defined in:
lib/dependency-timeline-audit/gem_info.rb

Overview

Define a class for interacting with the RubyGems API

Constant Summary collapse

API_URL =
'https://rubygems.org/api/v1/versions/'
@@gem_cache =
{}

Class Method Summary collapse

Class Method Details

.fetch_gem_data(gem_name) ⇒ Object

Method to fetch the gem data and cache it



11
12
13
14
15
16
17
18
19
20
21
# File 'lib/dependency-timeline-audit/gem_info.rb', line 11

def self.fetch_gem_data(gem_name)
  # Check if gem info is already cached
  unless @@gem_cache[gem_name]
    url = URI("#{API_URL}#{gem_name}.json")
    response = Net::HTTP.get(url)
    @@gem_cache[gem_name] = JSON.parse(response)
  end

  # Return cached gem info
  @@gem_cache[gem_name]
end

.latest_version(gem_name) ⇒ Object

Method to fetch the latest version and its created_at timestamp



24
25
26
27
28
29
30
# File 'lib/dependency-timeline-audit/gem_info.rb', line 24

def self.latest_version(gem_name)
  versions = fetch_gem_data(gem_name)
  latest = versions.first # The first entry is the latest version
  version_number = latest['number']
  created_at = latest['created_at']
  { version: version_number, created_at: created_at }
end

.version_created_at(gem_name, version) ⇒ Object

Method to fetch the created_at timestamp for a specific version



33
34
35
36
37
38
39
# File 'lib/dependency-timeline-audit/gem_info.rb', line 33

def self.version_created_at(gem_name, version)
  versions = fetch_gem_data(gem_name)
  # Find the version that matches the requested version string
  version_info = versions.find { |v| v['number'] == version }

  version_info.present? ? version_info['created_at'] : nil
end