class Dependabot::Gradle::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/gradle/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/gradle/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/gradle/update_checker/requirements_updater.rb, line 83
def requirement_class
  Gradle::Requirement
end
update_dynamic_requirement(req_string) click to toggle source
# File lib/dependabot/gradle/update_checker/requirements_updater.rb, line 64
def update_dynamic_requirement(req_string)
  version = req_string.split(/\.?\+/).first || "+"

  precision = version.split(".").
              take_while { |s| !s.include?("+") }.count

  version_parts = latest_version.segments.first(precision)

  if req_string.end_with?(".+")
    version_parts.join(".") + ".+"
  else
    version_parts.join(".") + "+"
  end
end
update_exact_requirement(req_string) click to toggle source
# File lib/dependabot/gradle/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/gradle/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/gradle/update_checker/requirements_updater.rb, line 87
def updated_source
  { type: "maven_repo", url: source_url }
end
version_class() click to toggle source
# File lib/dependabot/gradle/update_checker/requirements_updater.rb, line 79
def version_class
  Gradle::Version
end