Class: Dependabot::Maven::Package::PackageDetailsFetcher

Inherits:
Shared::SharedPackageDetailsFetcher show all
Extended by:
T::Sig
Defined in:
lib/dependabot/maven/package/package_details_fetcher.rb

Constant Summary

Constants inherited from Shared::SharedPackageDetailsFetcher

Shared::SharedPackageDetailsFetcher::AUTH_HEADERS_KEY, Shared::SharedPackageDetailsFetcher::DEFAULT_CENTRAL_REPO_URL, Shared::SharedPackageDetailsFetcher::HtmlVersionDetails, Shared::SharedPackageDetailsFetcher::MAVEN_METADATA_XML, Shared::SharedPackageDetailsFetcher::REPOSITORY_TYPE, Shared::SharedPackageDetailsFetcher::RepositoryDetails, Shared::SharedPackageDetailsFetcher::URL_KEY, Shared::SharedPackageDetailsFetcher::VersionDetails

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Shared::SharedPackageDetailsFetcher

#auth_headers, #auth_headers_finder, #central_repo_urls, #check_response, #credentials_repository_details, #dependency_base_url, #dependency_files_url, #dependency_metadata, #dependency_metadata_from_html, #dependency_metadata_url, #dependency_parts, #dependency_pom_url, #extract_metadata_from_xml, #extract_release_date_from_link, #extract_version_details_from_html, #extract_version_from_link, #fetch_dependency_metadata, #fetch_dependency_metadata_from_html, #forbidden_urls, #handle_registry_error, #released?, #repository_auth_headers, #repository_url, #version_class, #versions, #versions_details_from_xml, #versions_details_hash_from_html

Constructor Details

#initialize(dependency:, dependency_files:, credentials:) ⇒ PackageDetailsFetcher

Returns a new instance of PackageDetailsFetcher.



29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/dependabot/maven/package/package_details_fetcher.rb', line 29

def initialize(dependency:, dependency_files:, credentials:)
  @dependency = dependency
  @dependency_files = dependency_files
  @credentials = credentials

  @pom_repository_details = T.let(nil, T.nilable(T::Array[RepositoryDetails]))
  @repository_finder = T.let(nil, T.nilable(Maven::FileParser::RepositoriesFinder))
  @repositories_cache = T.let(nil, T.nilable(T::Array[RepositoryDetails]))
  @package_details = T.let(nil, T.nilable(Dependabot::Package::PackageDetails))
  @release_date_cache = T.let({}, T::Hash[String, T.nilable(Time)])
  @fallback_logged = T.let(false, T::Boolean)
end

Instance Attribute Details

#credentialsObject (readonly)

Returns the value of attribute credentials.



49
50
51
# File 'lib/dependabot/maven/package/package_details_fetcher.rb', line 49

def credentials
  @credentials
end

#dependencyObject (readonly)

Returns the value of attribute dependency.



43
44
45
# File 'lib/dependabot/maven/package/package_details_fetcher.rb', line 43

def dependency
  @dependency
end

#dependency_filesObject (readonly)

Returns the value of attribute dependency_files.



46
47
48
# File 'lib/dependabot/maven/package/package_details_fetcher.rb', line 46

def dependency_files
  @dependency_files
end

Instance Method Details

#central_repo_urlObject



111
112
113
# File 'lib/dependabot/maven/package/package_details_fetcher.rb', line 111

def central_repo_url
  repository_finder.central_repo_url
end

#fetchObject



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/dependabot/maven/package/package_details_fetcher.rb', line 52

def fetch
  return @package_details if @package_details

  releases = versions.map do |version_details|
    Dependabot::Package::PackageRelease.new(
      version: version_details.fetch(:version),
      released_at: version_details.fetch(:release_date, nil),
      url: version_details.fetch(:source_url)
    )
  end

  @package_details = Dependabot::Package::PackageDetails.new(
    dependency: dependency,
    releases: releases
  )

  @package_details
end

#fetch_release_metadata(release:) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/dependabot/maven/package/package_details_fetcher.rb', line 77

def (release:)
  return release if release.released_at

  url = release.url
  return release unless url

  cache_key = "#{url}\0#{release.version}"
  released_at = if @release_date_cache.key?(cache_key)
                  @release_date_cache[cache_key]
                else
                  @release_date_cache[cache_key] =
                    fetch_pom_last_modified(repository_url: url, version: release.version)
                end
  return release unless released_at

  build_release_with_date(release, released_at)
end

#releasesObject



72
73
74
# File 'lib/dependabot/maven/package/package_details_fetcher.rb', line 72

def releases
  fetch.releases
end

#repositoriesObject



97
98
99
100
101
102
103
104
105
106
107
# File 'lib/dependabot/maven/package/package_details_fetcher.rb', line 97

def repositories
  return @repositories_cache if @repositories_cache

  @repositories_cache = credentials_repository_details
  pom_repository_details.each do |repo|
    @repositories_cache << repo unless @repositories_cache.any? do |r|
      r[URL_KEY] == repo[URL_KEY]
    end
  end
  @repositories_cache
end