require 'thor' module Gemdiff class CLI < Thor include Thor::Actions include Colorize default_task :outdated CHECKING_FOR_OUTDATED = "Checking for outdated gems in your bundle..." NOTHING_TO_UPDATE = "Nothing to update." WORKING_DIRECTORY_IS_NOT_CLEAN = "Your working directory is not clean. Please commit or stash before updating." desc 'find ', 'Find the github repository URL for a gem' def find(gem_name) gem = OutdatedGem.new(gem_name) if gem.repo? puts gem.repo else puts "Could not find github repository for #{gem_name}." end gem end desc 'open ', 'Open the github repository for a gem' def open(gem_name) gem = find(gem_name) gem.open end desc 'releases ', 'Open the github releases page for a gem' def releases(gem_name) gem = find(gem_name) gem.releases end desc 'master ', 'Open the github master branch commits page for a gem' def master(gem_name) gem = find(gem_name) gem.master end desc 'compare [ ]', <', 'Update a gem, show a git diff of the update, and commit or reset' def update(name) gem = GemUpdater.new(name) unless gem.clean? puts WORKING_DIRECTORY_IS_NOT_CLEAN end puts "Updating #{name}..." gem.update diff_output = colorize_git_output(gem.diff) puts diff_output if diff_output.empty? puts NOTHING_TO_UPDATE return end response = ask("\nCommit? (c to commit, r to reset, else do nothing)") if response == 'c' gem.commit puts "\n" + colorize_git_output(gem.show) elsif response == 'r' puts gem.reset end end end end