Wrap all lines of Ruby code to 79 characters (maximum)

This commit is contained in:
Nicolas McCurdy
2014-01-08 21:31:59 -05:00
parent e42eff4e10
commit 0bbb82f9ba
5 changed files with 162 additions and 60 deletions

View File

@@ -12,8 +12,5 @@ ClassLength:
CyclomaticComplexity: CyclomaticComplexity:
Max: 7 Max: 7
LineLength:
Max: 163
MethodLength: MethodLength:
Max: 31 Max: 36

View File

@@ -32,14 +32,16 @@ class Homesick < Thor
destination = nil destination = nil
if File.exist?(uri) if File.exist?(uri)
uri = Pathname.new(uri).expand_path uri = Pathname.new(uri).expand_path
fail "Castle already cloned to #{uri}" if uri.to_s.start_with?(repos_dir.to_s) fail "Castle already cloned to #{uri}" \
if uri.to_s.start_with?(repos_dir.to_s)
destination = uri.basename destination = uri.basename
ln_s uri, destination ln_s uri, destination
elsif uri =~ GITHUB_NAME_REPO_PATTERN elsif uri =~ GITHUB_NAME_REPO_PATTERN
destination = Pathname.new(uri).basename destination = Pathname.new(uri).basename
git_clone "https://github.com/#{Regexp.last_match[1]}.git", destination: destination git_clone "https://github.com/#{Regexp.last_match[1]}.git",
destination: destination
elsif uri =~ /%r([^%r]*?)(\.git)?\Z/ || uri =~ /[^:]+:([^:]+)(\.git)?\Z/ elsif uri =~ /%r([^%r]*?)(\.git)?\Z/ || uri =~ /[^:]+:([^:]+)(\.git)?\Z/
destination = Pathname.new(Regexp.last_match[1]) destination = Pathname.new(Regexp.last_match[1])
git_clone uri git_clone uri
@@ -57,21 +59,28 @@ class Homesick < Thor
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 = shell.yes?("#{name} has a .homesickrc. Proceed with "\
"evaling it? (This could be destructive)")
if proceed if proceed
shell.say_status 'eval', homesickrc shell.say_status 'eval', homesickrc
inside destination do inside destination do
eval homesickrc.read, binding, homesickrc.expand_path.to_s eval homesickrc.read, binding, homesickrc.expand_path.to_s
end end
else else
shell.say_status 'eval skip', "not evaling #{homesickrc}, #{destination} may need manual configuration", :blue shell.say_status 'eval skip', "not evaling #{homesickrc}, " \
"#{destination} may need manual " \
"configuration", :blue
end end
end end
end end
end end
desc 'pull CASTLE', 'Update the specified castle' desc 'pull CASTLE', 'Update the specified castle'
method_option :all, type: :boolean, default: false, required: false, desc: 'Update all cloned castles' method_option :all,
type: :boolean,
default: false,
required: false,
desc: 'Update all cloned castles'
def pull(name = DEFAULT_CASTLE_NAME) def pull(name = DEFAULT_CASTLE_NAME)
if options[:all] if options[:all]
inside_each_castle do |castle| inside_each_castle do |castle|
@@ -111,7 +120,10 @@ class Homesick < Thor
end end
desc 'symlink CASTLE', 'Symlinks all dotfiles from the specified castle' desc 'symlink CASTLE', 'Symlinks all dotfiles from the specified castle'
method_option :force, default: false, desc: 'Overwrite existing conflicting symlinks without prompting.' method_option :force,
default: false,
desc: 'Overwrite existing conflicting symlinks without ' \
'prompting.'
def symlink(name = DEFAULT_CASTLE_NAME) def symlink(name = DEFAULT_CASTLE_NAME)
check_castle_existance(name, 'symlink') check_castle_existance(name, 'symlink')
@@ -151,7 +163,11 @@ class Homesick < Thor
target.delete target.delete
mv absolute_path, castle_path mv absolute_path, castle_path
else else
shell.say_status(:track, "#{target} already exists, and is more recent than #{file}. Run 'homesick SYMLINK CASTLE' to create symlinks.", :blue) unless options[:quiet] shell.say_status(:track,
"#{target} already exists, and is more recent " \
"than #{file}. Run 'homesick SYMLINK CASTLE' " \
"to create symlinks.",
:blue) unless options[:quiet]
end end
else else
mv absolute_path, castle_path mv absolute_path, castle_path
@@ -168,13 +184,16 @@ class Homesick < Thor
end end
# are we tracking something nested? Add the parent dir to the manifest # are we tracking something nested? Add the parent dir to the manifest
subdir_add(castle, relative_dir) unless relative_dir.eql?(Pathname.new('.')) subdir_add(castle, relative_dir) \
unless relative_dir.eql?(Pathname.new('.'))
end end
desc 'list', 'List cloned castles' desc 'list', 'List cloned castles'
def list def list
inside_each_castle do |castle| inside_each_castle do |castle|
say_status castle.relative_path_from(repos_dir).to_s, `git config remote.origin.url`.chomp, :cyan say_status castle.relative_path_from(repos_dir).to_s,
`git config remote.origin.url`.chomp,
:cyan
end end
end end
@@ -234,22 +253,32 @@ class Homesick < Thor
def cd(castle = DEFAULT_CASTLE_NAME) def cd(castle = DEFAULT_CASTLE_NAME)
check_castle_existance castle, 'cd' check_castle_existance castle, 'cd'
castle_dir = repos_dir.join(castle) castle_dir = repos_dir.join(castle)
say_status "cd #{castle_dir.realpath}", "Opening a new shell in castle '#{castle}'. To return to the original one exit from the new shell.", :green say_status "cd #{castle_dir.realpath}",
"Opening a new shell in castle '#{castle}'. To return to the " \
"original one exit from the new shell.",
:green
inside castle_dir do inside castle_dir do
system(ENV['SHELL']) system(ENV['SHELL'])
end end
end end
desc 'open CASTLE', 'Open your default editor in the root of the given castle' desc 'open CASTLE',
'Open your default editor in the root of the given castle'
def open(castle = DEFAULT_CASTLE_NAME) def open(castle = DEFAULT_CASTLE_NAME)
unless ENV['EDITOR'] unless ENV['EDITOR']
say_status :error, 'The $EDITOR environment variable must be set to use this command', :red say_status :error,
'The $EDITOR environment variable must be set to use ' \
'this command',
:red
exit(1) exit(1)
end end
check_castle_existance castle, 'open' check_castle_existance castle, 'open'
castle_dir = repos_dir.join(castle) castle_dir = repos_dir.join(castle)
say_status "#{ENV['EDITOR']} #{castle_dir.realpath}", "Opening the root directory of castle '#{castle}' in editor '#{ENV['EDITOR']}'.", :green say_status "#{ENV['EDITOR']} #{castle_dir.realpath}",
"Opening the root directory of castle '#{castle}' in editor " \
"'#{ENV['EDITOR']}'.",
:green
inside castle_dir do inside castle_dir do
system(ENV['EDITOR']) system(ENV['EDITOR'])
end end
@@ -276,7 +305,10 @@ class Homesick < Thor
def check_castle_existance(name, action) def check_castle_existance(name, action)
unless castle_dir(name).exist? unless castle_dir(name).exist?
say_status :error, "Could not #{action} #{name}, expected #{castle_dir(name)} exist and contain dotfiles", :red say_status :error,
"Could not #{action} #{name}, expected " \
"#{castle_dir(name)} exist and contain dotfiles",
:red
exit(1) exit(1)
end end
@@ -355,7 +387,9 @@ class Homesick < Thor
def subdir_remove(castle, path) def subdir_remove(castle, path)
subdir_filepath = subdir_file(castle) subdir_filepath = subdir_file(castle)
if subdir_filepath.exist? if subdir_filepath.exist?
lines = IO.readlines(subdir_filepath).delete_if { |line| line == "#{path}\n" } lines = IO.readlines(subdir_filepath).delete_if do |line|
line == "#{path}\n"
end
File.open(subdir_filepath, 'w') { |manfile| manfile.puts lines } File.open(subdir_filepath, 'w') { |manfile| manfile.puts lines }
end end
@@ -394,7 +428,9 @@ class Homesick < Thor
def each_file(castle, basedir, subdirs) def each_file(castle, basedir, subdirs)
absolute_basedir = Pathname.new(basedir).expand_path absolute_basedir = Pathname.new(basedir).expand_path
inside basedir do inside basedir do
files = Pathname.glob('{.*,*}').reject { |a| ['.', '..'].include?(a.to_s) } files = Pathname.glob('{.*,*}').reject do
|a| ['.', '..'].include?(a.to_s)
end
files.each do |path| files.each do |path|
absolute_path = path.expand_path absolute_path = path.expand_path
castle_home = castle_dir(castle) castle_home = castle_dir(castle)

View File

@@ -7,14 +7,18 @@ class Homesick
config ||= {} config ||= {}
destination = config[:destination] || File.basename(repo, '.git') destination = config[:destination] || File.basename(repo, '.git')
destination = Pathname.new(destination) unless destination.kind_of?(Pathname) destination = Pathname.new(destination) \
unless destination.kind_of?(Pathname)
FileUtils.mkdir_p destination.dirname FileUtils.mkdir_p destination.dirname
if destination.directory? if destination.directory?
say_status :exist, destination.expand_path, :blue unless options[:quiet] say_status :exist, destination.expand_path, :blue unless options[:quiet]
else else
say_status 'git clone', "#{repo} to #{destination.expand_path}", :green unless options[:quiet] say_status 'git clone',
system "git clone -q --config push.default=upstream --recursive #{repo} #{destination}" unless options[:pretend] "#{repo} to #{destination.expand_path}",
:green unless options[:quiet]
system "git clone -q --config push.default=upstream " \
"--recursive #{repo} #{destination}" unless options[:pretend]
end end
end end
@@ -50,7 +54,8 @@ class Homesick
def git_submodule_update(config = {}) def git_submodule_update(config = {})
say_status 'git submodule', 'update', :green unless options[:quiet] say_status 'git submodule', 'update', :green unless options[:quiet]
system 'git submodule --quiet update --init --recursive >/dev/null 2>&1' unless options[:pretend] system 'git submodule --quiet update --init --recursive ' \
'>/dev/null 2>&1' unless options[:pretend]
end end
def git_pull(config = {}) def git_pull(config = {})
@@ -94,7 +99,10 @@ class Homesick
if destination.exist? if destination.exist?
say_status :conflict, "#{destination} exists", :red unless options[:quiet] say_status :conflict, "#{destination} exists", :red unless options[:quiet]
system "mv '#{source}' '#{destination}'" if (options[:force] || shell.file_collision(destination) { source }) && !options[:pretend] system "mv '#{source}' '#{destination}'" \
if (options[:force] ||
shell.file_collision(destination) { source }) &&
!options[:pretend]
else else
# this needs some sort of message here. # this needs some sort of message here.
system "mv '#{source}' '#{destination}'" unless options[:pretend] system "mv '#{source}' '#{destination}'" unless options[:pretend]
@@ -151,9 +159,13 @@ class Homesick
if destination.symlink? && destination.readlink == source if destination.symlink? && destination.readlink == source
say_status :identical, destination.expand_path, :blue unless options[:quiet] say_status :identical, destination.expand_path, :blue unless options[:quiet]
elsif destination.symlink? elsif destination.symlink?
say_status :conflict, "#{destination} exists and points to #{destination.readlink}", :red unless options[:quiet] say_status :conflict,
"#{destination} exists and points to " \
"#{destination.readlink}",
:red unless options[:quiet]
smart_system "ln -nsf '#{source}' '#{destination}'" if collision_accepted? smart_system "ln -nsf '#{source}' '#{destination}'" \
if collision_accepted?
elsif destination.exist? elsif destination.exist?
say_status :conflict, "#{destination} exists", :red unless options[:quiet] say_status :conflict, "#{destination} exists", :red unless options[:quiet]
@@ -162,7 +174,9 @@ class Homesick
system "ln -sf '#{source}' '#{destination}'" unless options[:pretend] system "ln -sf '#{source}' '#{destination}'" unless options[:pretend]
end end
else else
say_status :symlink, "#{source.expand_path} to #{destination.expand_path}", :green unless options[:quiet] say_status :symlink,
"#{source.expand_path} to #{destination.expand_path}",
:green unless options[:quiet]
system "ln -s '#{source}' '#{destination}'" unless options[:pretend] system "ln -s '#{source}' '#{destination}'" unless options[:pretend]
end end
end end

View File

@@ -18,7 +18,9 @@ describe 'homesick' do
somewhere = create_construct somewhere = create_construct
local_repo = somewhere.directory('some_repo') local_repo = somewhere.directory('some_repo')
local_repo.file('.homesickrc') do |file| local_repo.file('.homesickrc') do |file|
file << "File.open(Dir.pwd + '/testing', 'w') { |f| f.print 'testing' }" file << "File.open(Dir.pwd + '/testing', 'w') do
|f| f.print 'testing'
end"
end end
expect($stdout).to receive(:print) expect($stdout).to receive(:print)
@@ -48,7 +50,8 @@ describe 'homesick' do
it 'should raise an error' do it 'should raise an error' do
homesick.should_not_receive(:git_clone) homesick.should_not_receive(:git_clone)
expect { homesick.clone @existing_dir.to_s }.to raise_error(/already cloned/i) expect { homesick.clone @existing_dir.to_s }.to \
raise_error(/already cloned/i)
end end
end end
end end
@@ -56,33 +59,39 @@ describe 'homesick' do
it 'should clone git repo like file:///path/to.git' do it 'should clone git repo like file:///path/to.git' do
bare_repo = File.join(create_construct.to_s, 'dotfiles.git') bare_repo = File.join(create_construct.to_s, 'dotfiles.git')
system "git init --bare #{bare_repo} >/dev/null 2>&1" system "git init --bare #{bare_repo} >/dev/null 2>&1"
# Capture stderr to suppress message about cloning an empty repo. # Capture stderr to suppress message about cloning an empty repo.
Capture.stderr do Capture.stderr do
homesick.clone "file://#{bare_repo}" homesick.clone "file://#{bare_repo}"
end end
File.directory?(File.join(home.to_s, '.homesick/repos/dotfiles')).should be_true File.directory?(File.join(home.to_s, '.homesick/repos/dotfiles'))
.should be_true
end end
it 'should clone git repo like git://host/path/to.git' do it 'should clone git repo like git://host/path/to.git' do
homesick.should_receive(:git_clone).with('git://github.com/technicalpickles/pickled-vim.git') homesick.should_receive(:git_clone)
.with('git://github.com/technicalpickles/pickled-vim.git')
homesick.clone 'git://github.com/technicalpickles/pickled-vim.git' homesick.clone 'git://github.com/technicalpickles/pickled-vim.git'
end end
it 'should clone git repo like git@host:path/to.git' do it 'should clone git repo like git@host:path/to.git' do
homesick.should_receive(:git_clone).with('git@github.com:technicalpickles/pickled-vim.git') homesick.should_receive(:git_clone)
.with('git@github.com:technicalpickles/pickled-vim.git')
homesick.clone 'git@github.com:technicalpickles/pickled-vim.git' homesick.clone 'git@github.com:technicalpickles/pickled-vim.git'
end end
it 'should clone git repo like http://host/path/to.git' do it 'should clone git repo like http://host/path/to.git' do
homesick.should_receive(:git_clone).with('http://github.com/technicalpickles/pickled-vim.git') homesick.should_receive(:git_clone)
.with('http://github.com/technicalpickles/pickled-vim.git')
homesick.clone 'http://github.com/technicalpickles/pickled-vim.git' homesick.clone 'http://github.com/technicalpickles/pickled-vim.git'
end end
it 'should clone git repo like http://host/path/to' do it 'should clone git repo like http://host/path/to' do
homesick.should_receive(:git_clone).with('http://github.com/technicalpickles/pickled-vim') homesick.should_receive(:git_clone)
.with('http://github.com/technicalpickles/pickled-vim')
homesick.clone 'http://github.com/technicalpickles/pickled-vim' homesick.clone 'http://github.com/technicalpickles/pickled-vim'
end end
@@ -93,13 +102,16 @@ describe 'homesick' do
homesick.clone 'gitolite:pickled-vim.git' homesick.clone 'gitolite:pickled-vim.git'
end end
it 'should throw an exception when trying to clone a malformed uri like malformed' do it 'should throw an exception when trying to clone a malformed uri like ' \
'malformed' do
homesick.should_not_receive(:git_clone) homesick.should_not_receive(:git_clone)
expect { homesick.clone 'malformed' }.to raise_error expect { homesick.clone 'malformed' }.to raise_error
end end
it 'should clone a github repo' do it 'should clone a github repo' do
homesick.should_receive(:git_clone).with('https://github.com/wfarr/dotfiles.git', destination: Pathname.new('dotfiles')) homesick.should_receive(:git_clone)
.with('https://github.com/wfarr/dotfiles.git',
destination: Pathname.new('dotfiles'))
homesick.clone 'wfarr/dotfiles' homesick.clone 'wfarr/dotfiles'
end end
@@ -116,7 +128,9 @@ describe 'homesick' do
it 'executes the .homesickrc' do it 'executes the .homesickrc' do
castle.file('.homesickrc') do |file| castle.file('.homesickrc') do |file|
file << "File.open(Dir.pwd + '/testing', 'w') { |f| f.print 'testing' }" file << "File.open(Dir.pwd + '/testing', 'w') do
|f| f.print 'testing'
end"
end end
expect_any_instance_of(Thor::Shell::Basic).to receive(:say_status).with('eval', kind_of(Pathname)) expect_any_instance_of(Thor::Shell::Basic).to receive(:say_status).with('eval', kind_of(Pathname))
@@ -134,7 +148,9 @@ describe 'homesick' do
it 'does not execute the .homesickrc' do it 'does not execute the .homesickrc' do
castle.file('.homesickrc') do |file| castle.file('.homesickrc') do |file|
file << "File.open(Dir.pwd + '/testing', 'w') { |f| f.print 'testing' }" file << "File.open(Dir.pwd + '/testing', 'w') do
|f| f.print 'testing'
end"
end end
expect_any_instance_of(Thor::Shell::Basic).to receive(:say_status).with('eval skip', /not evaling.+/, :blue) expect_any_instance_of(Thor::Shell::Basic).to receive(:say_status).with('eval skip', /not evaling.+/, :blue)
@@ -219,7 +235,9 @@ describe 'homesick' do
end end
context "with '.config' and '.config/someapp' in .homesick_subdir" do context "with '.config' and '.config/someapp' in .homesick_subdir" do
let(:castle) { given_castle('glencairn', ['.config', '.config/someapp']) } let(:castle) do
given_castle('glencairn', ['.config', '.config/someapp'])
end
it 'can symlink under both of .config and .config/someapp' do it 'can symlink under both of .config and .config/someapp' do
config_dir = castle.directory('.config') config_dir = castle.directory('.config')
config_dotfile = config_dir.file('.some_dotfile') config_dotfile = config_dir.file('.some_dotfile')
@@ -231,9 +249,11 @@ describe 'homesick' do
home_config_dir = home.join('.config') home_config_dir = home.join('.config')
home_someapp_dir = home_config_dir.join('someapp') home_someapp_dir = home_config_dir.join('someapp')
home_config_dir.symlink?.should be == false home_config_dir.symlink?.should be == false
home_config_dir.join('.some_dotfile').readlink.should be == config_dotfile home_config_dir.join('.some_dotfile').readlink
.should be == config_dotfile
home_someapp_dir.symlink?.should be == false home_someapp_dir.symlink?.should be == false
home_someapp_dir.join('.some_appfile').readlink.should == someapp_dotfile home_someapp_dir.join('.some_appfile').readlink
.should == someapp_dotfile
end end
end end
@@ -301,7 +321,9 @@ describe 'homesick' do
end end
context "with '.config' and '.config/someapp' in .homesick_subdir" do context "with '.config' and '.config/someapp' in .homesick_subdir" do
let(:castle) { given_castle('glencairn', ['.config', '.config/someapp']) } let(:castle) do
given_castle('glencairn', ['.config', '.config/someapp'])
end
it 'can unsymlink under both of .config and .config/someapp' do it 'can unsymlink under both of .config and .config/someapp' do
config_dir = castle.directory('.config') config_dir = castle.directory('.config')
@@ -339,8 +361,14 @@ describe 'homesick' do
given_castle('zomg') given_castle('zomg')
given_castle('wtf/zomg') given_castle('wtf/zomg')
homesick.should_receive(:say_status).with('zomg', 'git://github.com/technicalpickles/zomg.git', :cyan) homesick.should_receive(:say_status)
homesick.should_receive(:say_status).with('wtf/zomg', 'git://github.com/technicalpickles/zomg.git', :cyan) .with('zomg',
'git://github.com/technicalpickles/zomg.git',
:cyan)
homesick.should_receive(:say_status)
.with('wtf/zomg',
'git://github.com/technicalpickles/zomg.git',
:cyan)
homesick.list homesick.list
end end
@@ -350,7 +378,8 @@ describe 'homesick' do
it 'should say "nothing to commit" when there are no changes' do it 'should say "nothing to commit" when there are no changes' do
given_castle('castle_repo') given_castle('castle_repo')
text = Capture.stdout { homesick.status('castle_repo') } text = Capture.stdout { homesick.status('castle_repo') }
text.should =~ /nothing to commit \(create\/copy files and use "git add" to track\)$/ text.should =~ Regexp.new('nothing to commit \(create\/copy files and ' \
'use "git add" to track\)$')
end end
it 'should say "Changes to be committed" when there are changes' do it 'should say "Changes to be committed" when there are changes' do
@@ -358,7 +387,8 @@ describe 'homesick' do
some_rc_file = home.file '.some_rc_file' some_rc_file = home.file '.some_rc_file'
homesick.track(some_rc_file.to_s, 'castle_repo') homesick.track(some_rc_file.to_s, 'castle_repo')
text = Capture.stdout { homesick.status('castle_repo') } text = Capture.stdout { homesick.status('castle_repo') }
text.should =~ /Changes to be committed:.*new file:\s*home\/.some_rc_file/m text.should =~
/Changes to be committed:.*new file:\s*home\/.some_rc_file/m
end end
end end
@@ -504,11 +534,15 @@ describe 'homesick' do
given_castle('castle_repo') given_castle('castle_repo')
some_rc_file = home.file '.a_random_rc_file' some_rc_file = home.file '.a_random_rc_file'
homesick.track(some_rc_file.to_s, 'castle_repo') homesick.track(some_rc_file.to_s, 'castle_repo')
text = Capture.stdout { homesick.commit('castle_repo', 'Test message') } text = Capture.stdout do
homesick.commit('castle_repo', 'Test message')
end
text.should =~ /^\[master \(root-commit\) \w+\] Test message/ text.should =~ /^\[master \(root-commit\) \w+\] Test message/
end end
end end
# Note that this is a test for the subdir_file related feature of track,
# not for the subdir_file method itself.
describe 'subdir_file' do describe 'subdir_file' do
it 'should add the nested files parent to the subdir_file' do it 'should add the nested files parent to the subdir_file' do
@@ -537,7 +571,8 @@ describe 'homesick' do
end end
end end
it 'should remove the parent of a tracked file from the subdir_file if the parent itself is tracked' do it 'should remove the parent of a tracked file from the subdir_file ' \
'if the parent itself is tracked' do
castle = given_castle('castle_repo') castle = given_castle('castle_repo')
some_nested_file = home.file('some/nested/file.txt') some_nested_file = home.file('some/nested/file.txt')
@@ -555,7 +590,8 @@ describe 'homesick' do
describe 'destroy' do describe 'destroy' do
it 'removes the symlink files' do it 'removes the symlink files' do
expect_any_instance_of(Thor::Shell::Basic).to receive(:yes?).and_return('y') expect_any_instance_of(Thor::Shell::Basic).to \
receive(:yes?).and_return('y')
given_castle('stronghold') given_castle('stronghold')
some_rc_file = home.file '.some_rc_file' some_rc_file = home.file '.some_rc_file'
homesick.track(some_rc_file.to_s, 'stronghold') homesick.track(some_rc_file.to_s, 'stronghold')
@@ -565,7 +601,8 @@ describe 'homesick' do
end end
it 'deletes the cloned repository' do it 'deletes the cloned repository' do
expect_any_instance_of(Thor::Shell::Basic).to receive(:yes?).and_return('y') expect_any_instance_of(Thor::Shell::Basic).to \
receive(:yes?).and_return('y')
castle = given_castle('stronghold') castle = given_castle('stronghold')
some_rc_file = home.file '.some_rc_file' some_rc_file = home.file '.some_rc_file'
homesick.track(some_rc_file.to_s, 'stronghold') homesick.track(some_rc_file.to_s, 'stronghold')
@@ -584,30 +621,47 @@ describe 'homesick' do
end end
it 'returns an error message when the given castle does not exist' do it 'returns an error message when the given castle does not exist' do
homesick.should_receive('say_status').once.with(:error, %r{Could not cd castle_repo, expected /tmp/construct_container.* exist and contain dotfiles}, :red) homesick.should_receive('say_status').once
.with(:error,
Regexp.new('Could not cd castle_repo, expected ' \
'/tmp/construct_container.* exist and contain dotfiles'),
:red)
expect { homesick.cd 'castle_repo' }.to raise_error(SystemExit) expect { homesick.cd 'castle_repo' }.to raise_error(SystemExit)
end end
end end
describe 'open' do describe 'open' do
it 'opens the system default editor in the root of the given castle' do it 'opens the system default editor in the root of the given castle' do
ENV.stub(:[]).and_call_original # Make sure calls to ENV use default values for most things... # Make sure calls to ENV use default values for most things...
ENV.stub(:[]).with('EDITOR').and_return('vim') # Set a default value for 'EDITOR' just in case none is set ENV.stub(:[]).and_call_original
# Set a default value for 'EDITOR' just in case none is set
ENV.stub(:[]).with('EDITOR').and_return('vim')
given_castle 'castle_repo' given_castle 'castle_repo'
homesick.should_receive('inside').once.with(kind_of(Pathname)).and_yield homesick.should_receive('inside').once.with(kind_of(Pathname)).and_yield
homesick.should_receive('system').once.with('vim') homesick.should_receive('system').once.with('vim')
Capture.stdout { homesick.open 'castle_repo' } Capture.stdout { homesick.open 'castle_repo' }
end end
it 'returns an error message when the $EDITOR environment variable is not set' do it 'returns an error message when the $EDITOR environment variable is ' \
ENV.stub(:[]).with('EDITOR').and_return(nil) # Set the default editor to make sure it fails. 'not set' do
homesick.should_receive('say_status').once.with(:error, 'The $EDITOR environment variable must be set to use this command', :red) # Set the default editor to make sure it fails.
ENV.stub(:[]).with('EDITOR').and_return(nil)
homesick.should_receive('say_status').once
.with(:error,
'The $EDITOR environment variable must be set to use '\
'this command',
:red)
expect { homesick.open 'castle_repo' }.to raise_error(SystemExit) expect { homesick.open 'castle_repo' }.to raise_error(SystemExit)
end end
it 'returns an error message when the given castle does not exist' do it 'returns an error message when the given castle does not exist' do
ENV.stub(:[]).with('EDITOR').and_return('vim') # Set a default just in case none is set # Set a default just in case none is set
homesick.should_receive('say_status').once.with(:error, %r{Could not open castle_repo, expected /tmp/construct_container.* exist and contain dotfiles}, :red) ENV.stub(:[]).with('EDITOR').and_return('vim')
homesick.should_receive('say_status').once
.with(:error,
Regexp.new('Could not open castle_repo, expected ' \
'/tmp/construct_container.* exist and contain dotfiles'),
:red)
expect { homesick.open 'castle_repo' }.to raise_error(SystemExit) expect { homesick.open 'castle_repo' }.to raise_error(SystemExit)
end end
end end

View File

@@ -24,7 +24,8 @@ RSpec.configure do |config|
system 'git init >/dev/null 2>&1' system 'git init >/dev/null 2>&1'
system 'git config user.email "test@test.com"' system 'git config user.email "test@test.com"'
system 'git config user.name "Test Name"' system 'git config user.name "Test Name"'
system "git remote add origin git://github.com/technicalpickles/#{name}.git >/dev/null 2>&1" system "git remote add origin " \
"git://github.com/technicalpickles/#{name}.git >/dev/null 2>&1"
if subdirs if subdirs
subdir_file = castle.join(Homesick::SUBDIR_FILENAME) subdir_file = castle.join(Homesick::SUBDIR_FILENAME)
subdirs.each do |subdir| subdirs.each do |subdir|