Sha256: 187cdaa633e53c600739aa48e4cd2638649c2f903544316cff1e2933cb458c5b

Contents?: true

Size: 1.95 KB

Versions: 49

Compression:

Stored size: 1.95 KB

Contents

# typed: true
# 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
        attr_reader :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

49 entries across 49 versions & 1 rubygems

Version Path
dependabot-composer-0.297.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.296.3 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.296.2 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.296.1 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.296.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.295.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.294.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.293.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.292.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.291.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.290.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.289.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.288.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.287.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.286.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.285.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.284.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.283.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.282.0 lib/dependabot/composer/file_updater/manifest_updater.rb
dependabot-composer-0.281.0 lib/dependabot/composer/file_updater/manifest_updater.rb