class Dependabot::Hex::FileUpdater::MixfileUpdater

Attributes

dependencies[R]
mixfile[R]

Public Class Methods

new(mixfile:, dependencies:) click to toggle source
# File lib/dependabot/hex/file_updater/mixfile_updater.rb, line 11
def initialize(mixfile:, dependencies:)
  @mixfile = mixfile
  @dependencies = dependencies
end

Public Instance Methods

updated_mixfile_content() click to toggle source
# File lib/dependabot/hex/file_updater/mixfile_updater.rb, line 16
def updated_mixfile_content
  dependencies.
    select { |dep| requirement_changed?(mixfile, dep) }.
    reduce(mixfile.content.dup) do |content, dep|
      updated_content = content

      updated_content = update_requirement(
        content: updated_content,
        filename: mixfile.name,
        dependency: dep
      )

      updated_content = update_git_pin(
        content: updated_content,
        filename: mixfile.name,
        dependency: dep
      )

      raise "Expected content to change!" if content == updated_content

      updated_content
    end
end

Private Instance Methods

requirement_changed?(file, dependency) click to toggle source
# File lib/dependabot/hex/file_updater/mixfile_updater.rb, line 44
def requirement_changed?(file, dependency)
  changed_requirements =
    dependency.requirements - dependency.previous_requirements

  changed_requirements.any? { |f| f[:file] == file.name }
end
update_git_pin(content:, filename:, dependency:) click to toggle source
# File lib/dependabot/hex/file_updater/mixfile_updater.rb, line 71
def update_git_pin(content:, filename:, dependency:)
  updated_pin =
    dependency.requirements.find { |r| r[:file] == filename }&.
    dig(:source, :ref)

  old_pin =
    dependency.previous_requirements.
    find { |r| r[:file] == filename }&.
    dig(:source, :ref)

  return content unless old_pin
  return content if old_pin == updated_pin

  MixfileGitPinUpdater.new(
    dependency_name: dependency.name,
    mixfile_content: content,
    previous_pin: old_pin,
    updated_pin: updated_pin
  ).updated_content
end
update_requirement(content:, filename:, dependency:) click to toggle source
# File lib/dependabot/hex/file_updater/mixfile_updater.rb, line 51
def update_requirement(content:, filename:, dependency:)
  updated_req =
    dependency.requirements.find { |r| r[:file] == filename }.
    fetch(:requirement)

  old_req =
    dependency.previous_requirements.
    find { |r| r[:file] == filename }.
    fetch(:requirement)

  return content unless old_req

  MixfileRequirementUpdater.new(
    dependency_name: dependency.name,
    mixfile_content: content,
    previous_requirement: old_req,
    updated_requirement: updated_req
  ).updated_content
end