class Bundleup::CLI

Constants

Error

Attributes

args[R]

Public Class Methods

new(args) click to toggle source
# File lib/bundleup/cli.rb, line 11
def initialize(args)
  @args = args.dup
  @update_gemfile = @args.delete("--update-gemfile")
end

Public Instance Methods

run() click to toggle source
# File lib/bundleup/cli.rb, line 16
def run # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
  print_usage && return if (args & %w[-h --help]).any?

  assert_gemfile_and_lock_exist!

  logger.puts "Please wait a moment while I upgrade your Gemfile.lock..."
  Backup.restore_on_error("Gemfile", "Gemfile.lock") do |backup|
    perform_analysis_and_optionally_bump_gemfile_versions do |update_report, pin_report|
      if update_report.empty?
        logger.ok "Nothing to update."
        logger.puts "\n#{pin_report}" unless pin_report.empty?
        break
      end

      logger.puts
      logger.puts update_report
      logger.puts pin_report unless pin_report.empty?

      if logger.confirm?("Do you want to apply these changes?")
        logger.ok "Done!"
      else
        backup.restore
        logger.puts "Your original Gemfile.lock has been restored."
      end
    end
  end
end

Private Instance Methods

assert_gemfile_and_lock_exist!() click to toggle source
# File lib/bundleup/cli.rb, line 109
def assert_gemfile_and_lock_exist!
  return if File.exist?("Gemfile") && File.exist?("Gemfile.lock")

  raise Error, "Gemfile and Gemfile.lock must both be present."
end
perform_analysis() click to toggle source
# File lib/bundleup/cli.rb, line 134
def perform_analysis # rubocop:disable Metrics/AbcSize
  gem_comments = Gemfile.new.gem_comments
  commands.check? || commands.install
  old_versions = commands.list
  commands.update(args)
  new_versions = commands.list
  outdated_gems = commands.outdated

  update_report = UpdateReport.new(old_versions: old_versions, new_versions: new_versions)
  pin_report = PinReport.new(gem_versions: new_versions, outdated_gems: outdated_gems, gem_comments: gem_comments)

  [update_report, pin_report, new_versions, outdated_gems]
end
perform_analysis_and_optionally_bump_gemfile_versions() { |update_report, pin_report| ... } click to toggle source
# File lib/bundleup/cli.rb, line 115
def perform_analysis_and_optionally_bump_gemfile_versions # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
  gemfile = Gemfile.new
  lockfile_backup = Backup.new("Gemfile.lock")
  update_report, pin_report, _, outdated_gems = perform_analysis
  updatable_gems = gemfile.gem_pins_without_comments.slice(*outdated_gems.keys)

  if updatable_gems.any? && @update_gemfile
    lockfile_backup.restore
    orig_gemfile = Gemfile.new
    gemfile.relax_gem_pins!(updatable_gems.keys)
    update_report, pin_report, new_versions, = perform_analysis
    orig_gemfile.shift_gem_pins!(new_versions.slice(*updatable_gems.keys))
    commands.install
  end

  logger.clear_line
  yield(update_report, pin_report)
end
print_usage() click to toggle source