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(

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