Sha256: d5d6d8de7b9b26d7c8cc6752a57966408140f34c65aa338b716cfd8a7df0754f

Contents?: true

Size: 1.91 KB

Versions: 861

Compression:

Stored size: 1.91 KB

Contents

# frozen_string_literal: true

require "dependabot/composer/file_updater"

module Dependabot
  module Composer
    class FileUpdater
      class ManifestUpdater
        def initialize(dependencies:, manifest:)
          @dependencies = dependencies
          @manifest = manifest
        end

        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

        attr_reader :dependencies, :manifest

        def new_requirements(dependency)
          dependency.requirements.select { |r| r[:file] == manifest.name }
        end

        def old_requirement(dependency, new_requirement)
          dependency.previous_requirements.
            select { |r| r[:file] == manifest.name }.
            find { |r| r[:groups] == new_requirement[:groups] }
        end

        def updated_requirements(dependency)
          new_requirements(dependency).
            reject { |r| dependency.previous_requirements.include?(r) }
        end

        def requirement_changed?(file, dependency)
          changed_requirements =
            dependency.requirements - dependency.previous_requirements

          changed_requirements.any? { |f| f[:file] == file.name }
        end
      end
    end
  end
end

Version data entries

861 entries across 861 versions & 1 rubygems

Version Path
dependabot-composer-0.230.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.229.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.228.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.227.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.226.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.225.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.224.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.223.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.222.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.221.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.220.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.219.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.218.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.217.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.216.2 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.216.1 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.216.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.215.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.214.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.213.0 lib/dependabot/composer/file_updater/manifest_updater.rb