class Dependabot::Maven::FileUpdater::PropertyValueUpdater

Attributes

dependency_files[R]

Public Class Methods

new(dependency_files:) click to toggle source
# File lib/dependabot/maven/file_updater/property_value_updater.rb, line 13
def initialize(dependency_files:)
  @dependency_files = dependency_files
end

Public Instance Methods

update_pomfiles_for_property_change(property_name:, callsite_pom:, updated_value:) click to toggle source
# File lib/dependabot/maven/file_updater/property_value_updater.rb, line 17
def update_pomfiles_for_property_change(property_name:, callsite_pom:,
                                        updated_value:)
  declaration_details = property_value_finder.property_details(
    property_name: property_name,
    callsite_pom: callsite_pom
  )
  node = declaration_details.fetch(:node)
  filename = declaration_details.fetch(:file)

  pom_to_update = dependency_files.find { |f| f.name == filename }
  property_re = %r{<#{Regexp.quote(node.name)}>
    \s*#{Regexp.quote(node.content)}\s*
    </#{Regexp.quote(node.name)}>}xm
  property_text = node.to_s
  if pom_to_update.content =~ property_re
    updated_content = pom_to_update.content.sub(
      property_re,
      "<#{node.name}>#{updated_value}</#{node.name}>"
    )
  elsif pom_to_update.content.include? property_text
    node.content = updated_value
    updated_content = pom_to_update.content.sub(
      property_text,
      node.to_s
    )
  end

  updated_pomfiles = dependency_files.dup
  updated_pomfiles[updated_pomfiles.index(pom_to_update)] =
    update_file(file: pom_to_update, content: updated_content)

  updated_pomfiles
end

Private Instance Methods

property_value_finder() click to toggle source
# File lib/dependabot/maven/file_updater/property_value_updater.rb, line 55
def property_value_finder
  @property_value_finder ||=
    Maven::FileParser::PropertyValueFinder.
    new(dependency_files: dependency_files)
end
update_file(file:, content:) click to toggle source
# File lib/dependabot/maven/file_updater/property_value_updater.rb, line 61
def update_file(file:, content:)
  updated_file = file.dup
  updated_file.content = content
  updated_file
end