Class: Dependabot::Hex::Package::PackageDetailsFetcher

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/dependabot/hex/package/package_details_fetcher.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(dependency:) ⇒ PackageDetailsFetcher



27
28
29
30
31
# File 'lib/dependabot/hex/package/package_details_fetcher.rb', line 27

def initialize(dependency:)
  @dependency = dependency

  @dependency_url = T.let("https://hex.pm/api/packages/#{dependency.name}", T.nilable(String))
end

Instance Attribute Details

#dependencyObject (readonly)

Returns the value of attribute dependency.



34
35
36
# File 'lib/dependabot/hex/package/package_details_fetcher.rb', line 34

def dependency
  @dependency
end

Instance Method Details

#fetch_package_releasesObject



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/dependabot/hex/package/package_details_fetcher.rb', line 37

def fetch_package_releases
  releases = T.let([], T::Array[Dependabot::Package::PackageRelease])

  begin
    Dependabot.logger.info("Fetching package (hex) info for #{@dependency.name}")

    response = Dependabot::RegistryClient.get(url: T.must(@dependency_url))
    return releases unless response.status == 200

     = JSON.parse(response.body)&.fetch("releases", []) || []
    .each do |release|
      releases << Dependabot::Package::PackageRelease.new(
        version: Hex::Version.new(release["version"]),
        released_at: release["inserted_at"] ? Time.new(release["inserted_at"]) : nil,
        url: release["url"]
      )
    end

    releases
  rescue StandardError => e
    Dependabot.logger.error("Error while fetching package info for hex packages: #{e.message}")
    releases
  end
end