Sha256: 40b18db064d92fb392723d6ff23be1b9f0d51f687f48d08e7f89c2762eb6a0de

Contents?: true

Size: 1.99 KB

Versions: 24

Compression:

Stored size: 1.99 KB

Contents

# frozen_string_literal: true

require "dependabot/file_updaters/elm/elm_package"

module Dependabot
  module FileUpdaters
    module Elm
      class ElmPackage
        class ElmPackageUpdater
          def initialize(elm_package_file:, dependencies:)
            @elm_package_file = elm_package_file
            @dependencies = dependencies
          end

          def updated_elm_package_file_content
            dependencies.
              select { |dep| requirement_changed?(elm_package_file, dep) }.
              reduce(elm_package_file.content.dup) do |content, dep|
                updated_content = content

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

                next updated_content unless content == updated_content

                raise "Expected content to change!"
              end
          end

          private

          attr_reader :elm_package_file, :dependencies

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

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

          def update_requirement(content:, filename:, dependency:)
            updated_req =
              dependency.requirements.
              find { |r| r.fetch(:file) == filename }.
              fetch(:requirement)

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

            return content unless old_req

            dep = dependency
            regex =
              /"#{Regexp.quote(dep.name)}"\s*:\s+"#{Regexp.quote(old_req)}"/

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

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
dependabot-core-0.81.1 lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb
dependabot-core-0.81.0 lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb
dependabot-core-0.80.1 lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb
dependabot-core-0.80.0 lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb
dependabot-core-0.79.4 lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb
dependabot-core-0.79.3 lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb
dependabot-core-0.79.2 lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb
dependabot-core-0.79.1 lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb
dependabot-core-0.79.0 lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb
dependabot-core-0.78.0 lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb
dependabot-core-0.77.2 lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb
dependabot-core-0.77.1 lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb
dependabot-core-0.77.0 lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb
dependabot-core-0.76.11 lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb
dependabot-core-0.76.10 lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb
dependabot-core-0.76.9 lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb
dependabot-core-0.76.8 lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb
dependabot-core-0.76.7 lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb
dependabot-core-0.76.6 lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb
dependabot-core-0.76.5 lib/dependabot/file_updaters/elm/elm_package/elm_package_updater.rb