class Dependabot::Bundler::FileUpdater::GemfileUpdater
Attributes
dependencies[R]
gemfile[R]
Public Class Methods
new(dependencies:, gemfile:)
click to toggle source
# File lib/dependabot/bundler/file_updater/gemfile_updater.rb, line 13 def initialize(dependencies:, gemfile:) @dependencies = dependencies @gemfile = gemfile end
Public Instance Methods
updated_gemfile_content()
click to toggle source
# File lib/dependabot/bundler/file_updater/gemfile_updater.rb, line 18 def updated_gemfile_content content = gemfile.content dependencies.each do |dependency| content = replace_gemfile_version_requirement( dependency, gemfile, content ) content = remove_gemfile_git_source(dependency, content) if remove_git_source?(dependency) content = update_gemfile_git_pin(dependency, gemfile, content) if update_git_pin?(dependency) end content end
Private Instance Methods
remove_gemfile_git_source(dependency, content)
click to toggle source
# File lib/dependabot/bundler/file_updater/gemfile_updater.rb, line 93 def remove_gemfile_git_source(dependency, content) GitSourceRemover.new(dependency: dependency).rewrite(content) end
remove_git_source?(dependency)
click to toggle source
# File lib/dependabot/bundler/file_updater/gemfile_updater.rb, line 68 def remove_git_source?(dependency) old_gemfile_req = dependency.previous_requirements. find { |f| %w(Gemfile gems.rb).include?(f[:file]) } return false unless old_gemfile_req&.dig(:source, :type) == "git" new_gemfile_req = dependency.requirements. find { |f| %w(Gemfile gems.rb).include?(f[:file]) } new_gemfile_req[:source].nil? end
replace_gemfile_version_requirement(dependency, file, content)
click to toggle source
# File lib/dependabot/bundler/file_updater/gemfile_updater.rb, line 40 def replace_gemfile_version_requirement(dependency, file, content) return content unless requirement_changed?(file, dependency) updated_requirement = dependency.requirements. find { |r| r[:file] == file.name }. fetch(:requirement) previous_requirement = dependency.previous_requirements. find { |r| r[:file] == file.name }. fetch(:requirement) RequirementReplacer.new( dependency: dependency, file_type: :gemfile, updated_requirement: updated_requirement, previous_requirement: previous_requirement ).rewrite(content) end
requirement_changed?(file, dependency)
click to toggle source
# File lib/dependabot/bundler/file_updater/gemfile_updater.rb, line 61 def requirement_changed?(file, dependency) changed_requirements = dependency.requirements - dependency.previous_requirements changed_requirements.any? { |f| f[:file] == file.name } end
update_gemfile_git_pin(dependency, file, content)
click to toggle source
# File lib/dependabot/bundler/file_updater/gemfile_updater.rb, line 97 def update_gemfile_git_pin(dependency, file, content) new_pin = dependency.requirements. find { |f| f[:file] == file.name }. fetch(:source).fetch(:ref) GitPinReplacer. new(dependency: dependency, new_pin: new_pin). rewrite(content) end
update_git_pin?(dependency)
click to toggle source
# File lib/dependabot/bundler/file_updater/gemfile_updater.rb, line 82 def update_git_pin?(dependency) new_gemfile_req = dependency.requirements. find { |f| %w(Gemfile gems.rb).include?(f[:file]) } return false unless new_gemfile_req&.dig(:source, :type) == "git" # If the new requirement is a git dependency with a ref then there's # no harm in doing an update new_gemfile_req.dig(:source, :ref) end