class Dependabot::Composer::FileUpdater::ManifestUpdater

Attributes

dependencies[R]
manifest[R]

Public Class Methods

new(dependencies:, manifest:) click to toggle source
# File lib/dependabot/composer/file_updater/manifest_updater.rb, line 9
def initialize(dependencies:, manifest:)
  @dependencies = dependencies
  @manifest = manifest
end

Public Instance Methods

updated_manifest_content() click to toggle source
# File lib/dependabot/composer/file_updater/manifest_updater.rb, line 14
def updated_manifest_content
  dependencies.reduce(manifest.content.dup) do |content, dep|
    updated_content = content
    updated_requirements(dep).each do |new_req|
      old_req = old_requirement(dep, new_req).fetch(:requirement)
      updated_req = new_req.fetch(:requirement)

      regex =
        /
          "#{Regexp.escape(dep.name)}"\s*:\s*
          "#{Regexp.escape(old_req)}"
        /x

      updated_content = content.gsub(regex) do |declaration|
        declaration.gsub(%("#{old_req}"), %("#{updated_req}"))
      end

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

    updated_content
  end
end

Private Instance Methods

new_requirements(dependency) click to toggle source
# File lib/dependabot/composer/file_updater/manifest_updater.rb, line 42
def new_requirements(dependency)
  dependency.requirements.select { |r| r[:file] == manifest.name }
end
old_requirement(dependency, new_requirement) click to toggle source
# File lib/dependabot/composer/file_updater/manifest_updater.rb, line 46
def old_requirement(dependency, new_requirement)
  dependency.previous_requirements.
    select { |r| r[:file] == manifest.name }.
    find { |r| r[:groups] == new_requirement[:groups] }
end
requirement_changed?(file, dependency) click to toggle source
# File lib/dependabot/composer/file_updater/manifest_updater.rb, line 57
def requirement_changed?(file, dependency)
  changed_requirements =
    dependency.requirements - dependency.previous_requirements

  changed_requirements.any? { |f| f[:file] == file.name }
end
updated_requirements(dependency) click to toggle source
# File lib/dependabot/composer/file_updater/manifest_updater.rb, line 52
def updated_requirements(dependency)
  new_requirements(dependency).
    reject { |r| dependency.previous_requirements.include?(r) }
end