class Dependabot::MetadataFinders::Base

def changelog_text

def changelog_text
  @changelog_finder ||= T.let(
    ChangelogFinder.new(
      dependency: dependency,
      source: source,
      credentials: credentials,
      suggested_changelog_url: suggested_changelog_url
    ),
    T.nilable(ChangelogFinder)
  )
  @changelog_finder.changelog_text
end

def changelog_url

def changelog_url
  @changelog_finder ||= T.let(
    ChangelogFinder.new(
      dependency: dependency,
      source: source,
      credentials: credentials,
      suggested_changelog_url: suggested_changelog_url
    ),
    T.nilable(ChangelogFinder)
  )
  @changelog_finder.changelog_url
end

def commits

def commits
  @commits_finder ||= T.let(
    CommitsFinder.new(
      dependency: dependency,
      source: source,
      credentials: credentials
    ),
    T.nilable(CommitsFinder)
  )
  @commits_finder.commits
end

def commits_url

def commits_url
  @commits_finder ||= T.let(
    CommitsFinder.new(
      dependency: dependency,
      source: source,
      credentials: credentials
    ),
    T.nilable(CommitsFinder)
  )
  @commits_finder.commits_url
end

def homepage_url

def homepage_url
  source_url
end

def initialize(dependency:, credentials:)

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

def look_up_source

def look_up_source
  raise NotImplementedError
end

def maintainer_changes

def maintainer_changes
  nil
end

def releases_text

def releases_text
  @release_finder ||= T.let(
    ReleaseFinder.new(
      dependency: dependency,
      source: source,
      credentials: credentials
    ),
    T.nilable(ReleaseFinder)
  )
  @release_finder.releases_text
end

def releases_url

def releases_url
  @release_finder ||= T.let(
    ReleaseFinder.new(
      dependency: dependency,
      source: source,
      credentials: credentials
    ),
    T.nilable(ReleaseFinder)
  )
  @release_finder.releases_url
end

def reliable_source_directory?

def reliable_source_directory?
  MetadataFinders::Base::PACKAGE_MANAGERS_WITH_RELIABLE_DIRECTORIES
    .include?(dependency.package_manager)
end

def source

def source
  return @source if defined?(@source)
  @source = T.let(look_up_source, T.nilable(Dependabot::Source))
end

def source_url

def source_url
  if reliable_source_directory?
    source&.url_with_directory
  else
    source&.url
  end
end

def suggested_changelog_url

def suggested_changelog_url
  nil
end

def upgrade_guide_text

def upgrade_guide_text
  @changelog_finder ||= T.let(
    ChangelogFinder.new(
      dependency: dependency,
      source: source,
      credentials: credentials,
      suggested_changelog_url: suggested_changelog_url
    ),
    T.nilable(ChangelogFinder)
  )
  @changelog_finder.upgrade_guide_text
end

def upgrade_guide_url

def upgrade_guide_url
  @changelog_finder ||= T.let(
    ChangelogFinder.new(
      dependency: dependency,
      source: source,
      credentials: credentials,
      suggested_changelog_url: suggested_changelog_url
    ),
    T.nilable(ChangelogFinder)
  )
  @changelog_finder.upgrade_guide_url
end