class Dependabot::PullRequestUpdater

def azure_updater

def azure_updater
  Azure.new(
    source: source,
    base_commit: base_commit,
    old_commit: old_commit,
    files: files,
    credentials: credentials,
    pull_request_number: pull_request_number,
    author_details: author_details
  )
end

def github_updater

def github_updater
  Github.new(
    source: source,
    base_commit: base_commit,
    old_commit: old_commit,
    files: files,
    credentials: credentials,
    pull_request_number: pull_request_number,
    author_details: author_details,
    signature_key: signature_key
  )
end

def gitlab_updater

def gitlab_updater
  Gitlab.new(
    source: source,
    base_commit: base_commit,
    old_commit: old_commit,
    files: files,
    credentials: credentials,
    pull_request_number: pull_request_number,
    target_project_id: T.cast(provider_metadata[:target_project_id], T.nilable(Integer))
  )
end

def initialize(source:, base_commit:, old_commit:, files:,

def initialize(source:, base_commit:, old_commit:, files:,
               credentials:, pull_request_number:,
               author_details: nil, signature_key: nil,
               provider_metadata: {})
  @source              = source
  @base_commit         = base_commit
  @old_commit          = old_commit
  @files               = files
  @credentials         = credentials
  @pull_request_number = pull_request_number
  @author_details      = author_details
  @signature_key       = signature_key
  @provider_metadata   = provider_metadata
end

def update

def update
  case source.provider
  when "github" then github_updater.update
  when "gitlab" then gitlab_updater.update
  when "azure" then azure_updater.update
  else raise "Unsupported provider #{source.provider}"
  end
end