class Dependabot::Maven::UpdateChecker::RequirementsUpdater

Attributes

latest_version[R]
properties_to_update[R]
requirements[R]
source_url[R]

Public Class Methods

new(requirements:, latest_version:, source_url:, properties_to_update:) click to toggle source
# File lib/dependabot/maven/update_checker/requirements_updater.rb, line 16
def initialize(requirements:, latest_version:, source_url:,
               properties_to_update:)
  @requirements = requirements
  @source_url = source_url
  @properties_to_update = properties_to_update
  return unless latest_version

  @latest_version = version_class.new(latest_version)
end

Public Instance Methods

updated_requirements() click to toggle source
# File lib/dependabot/maven/update_checker/requirements_updater.rb, line 26
def updated_requirements
  return requirements unless latest_version

  # NOTE: Order is important here. The FileUpdater needs the updated
  # requirement at index `i` to correspond to the previous requirement
  # at the same index.
  requirements.map do |req|
    next req if req.fetch(:requirement).nil?
    next req if req.fetch(:requirement).include?(",")

    property_name = req.dig(:metadata, :property_name)
    next req if property_name && !properties_to_update.include?(property_name)

    new_req = update_requirement(req[:requirement])
    req.merge(requirement: new_req, source: updated_source)
  end
end

Private Instance Methods

requirement_class() click to toggle source
# File lib/dependabot/maven/update_checker/requirements_updater.rb, line 78
def requirement_class
  Maven::Requirement
end
update_dynamic_requirement(req_string) click to toggle source

This is really only a Gradle thing, but Gradle relies on this RequirementsUpdater too

# File lib/dependabot/maven/update_checker/requirements_updater.rb, line 66
def update_dynamic_requirement(req_string)
  precision = req_string.split(".").take_while { |s| s != "+" }.count

  version_parts = latest_version.segments.first(precision)

  version_parts.join(".") + ".+"
end
update_exact_requirement(req_string) click to toggle source
# File lib/dependabot/maven/update_checker/requirements_updater.rb, line 58
def update_exact_requirement(req_string)
  old_version = requirement_class.new(req_string).
                requirements.first.last
  req_string.gsub(old_version.to_s, latest_version.to_s)
end
update_requirement(req_string) click to toggle source
# File lib/dependabot/maven/update_checker/requirements_updater.rb, line 49
def update_requirement(req_string)
  if req_string.include?(".+")
    update_dynamic_requirement(req_string)
  else
    # Since range requirements are excluded this must be exact
    update_exact_requirement(req_string)
  end
end
updated_source() click to toggle source
# File lib/dependabot/maven/update_checker/requirements_updater.rb, line 82
def updated_source
  { type: "maven_repo", url: source_url }
end
version_class() click to toggle source
# File lib/dependabot/maven/update_checker/requirements_updater.rb, line 74
def version_class
  Maven::Version
end