Add --force option to homesick rc command

Support automatically eval-ing .homesickrc file without prompting for user input.
This is particularly useful for headless scripts that do not support
user input.
This commit is contained in:
Ryan Sonnek
2014-12-01 13:38:43 -06:00
parent 63c45d7c3a
commit 5700f55dc3
2 changed files with 24 additions and 1 deletions

View File

@@ -61,12 +61,15 @@ module Homesick
end end
desc 'rc CASTLE', 'Run the .homesickrc for the specified castle' desc 'rc CASTLE', 'Run the .homesickrc for the specified castle'
method_option :force,
default: false,
desc: 'Evaluate .homesickrc without prompting.'
def rc(name = DEFAULT_CASTLE_NAME) def rc(name = DEFAULT_CASTLE_NAME)
inside repos_dir do inside repos_dir do
destination = Pathname.new(name) destination = Pathname.new(name)
homesickrc = destination.join('.homesickrc').expand_path homesickrc = destination.join('.homesickrc').expand_path
if homesickrc.exist? if homesickrc.exist?
proceed = shell.yes?("#{name} has a .homesickrc. Proceed with evaling it? (This could be destructive)") proceed = options[:force] || shell.yes?("#{name} has a .homesickrc. Proceed with evaling it? (This could be destructive)")
if proceed if proceed
say_status 'eval', homesickrc say_status 'eval', homesickrc
inside destination do inside destination do

View File

@@ -149,6 +149,26 @@ describe Homesick::CLI do
end end
end end
context 'when options[:force] == true' do
let(:homesick) { Homesick::CLI.new [], force: true }
before do
expect_any_instance_of(Thor::Shell::Basic).to_not receive(:yes?)
end
it 'executes the .homesickrc' do
castle.file('.homesickrc') do |file|
file << "File.open(Dir.pwd + '/testing', 'w') do |f|
f.print 'testing'
end"
end
expect(homesick).to receive(:say_status).with('eval', kind_of(Pathname))
homesick.rc castle
expect(castle.join('testing')).to exist
end
end
context 'when told not to do so' do context 'when told not to do so' do
before do before do
expect_any_instance_of(Thor::Shell::Basic).to receive(:yes?).with(be_a(String)).and_return(false) expect_any_instance_of(Thor::Shell::Basic).to receive(:yes?).with(be_a(String)).and_return(false)