Sha256: 8b59e36ddf748ab7658393093c093a249755fe8c22b8aa63d9820a9e1cf9d22d

Contents?: true

Size: 1.82 KB

Versions: 7

Compression:

Stored size: 1.82 KB

Contents

module Bundleup
  class CLI
    include Console

    def run
      puts \
        "Please wait a moment while I upgrade your Gemfile.lock..."

      committed = false
      review_upgrades
      review_pins
      committed = upgrades.any? && confirm_commit
      puts "Done!" if committed
    ensure
      restore_lockfile unless committed
    end

    private

    def review_upgrades
      if upgrades.any?
        puts "\nThe following gem(s) will be updated:\n\n"
        print_upgrades_table
      else
        ok("Nothing to update.")
      end
    end

    def review_pins
      return if pins.empty?

      puts "\nNote that the following gem(s) are being held back:\n\n"
      print_pins_table
    end

    def confirm_commit
      confirm("\nDo you want to apply these changes?")
    end

    def restore_lockfile
      return unless defined?(@upgrade)
      return unless upgrade.lockfile_changed?

      upgrade.undo
      puts "Your original Gemfile.lock has been restored."
    end

    def upgrade
      @upgrade ||= Upgrade.new(ARGV)
    end

    def upgrades
      upgrade.upgrades
    end

    def pins
      upgrade.pins
    end

    def print_upgrades_table
      rows = tableize(upgrades) do |g|
        [g.name, g.old_version || "(new)", "→", g.new_version || "(removed)"]
      end
      upgrades.zip(rows).each do |g, row|
        puts color(g.color, row)
      end
    end

    def print_pins_table
      rows = tableize(pins) do |g|
        [g.name, g.new_version, "→", g.newest_version, *pin_reason(g)]
      end
      puts rows.join("\n")
    end

    def pin_reason(gem)
      notes = color(:gray, gemfile.gem_comment(gem.name))
      pin_operator, pin_version = gem.pin.split(" ", 2)
      [":", "pinned at", pin_operator.rjust(2), pin_version, notes]
    end

    def gemfile
      @gemfile ||= Gemfile.new
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
bundleup-1.3.0 lib/bundleup/cli.rb
bundleup-1.2.0 lib/bundleup/cli.rb
bundleup-1.1.0 lib/bundleup/cli.rb
bundleup-1.0.0 lib/bundleup/cli.rb
bundleup-0.9.0 lib/bundleup/cli.rb
bundleup-0.8.1 lib/bundleup/cli.rb
bundleup-0.8.0 lib/bundleup/cli.rb