Add `.cd -` to return to prior working directory

[Finishes #1028]
This commit is contained in:
Danielle Sucher & Jason Laster 2013-12-07 19:05:48 -05:00 committed by Danielle Sucher
parent 8a93648cec
commit f112a8d3e3
2 changed files with 71 additions and 6 deletions

View File

@ -17,12 +17,7 @@ class Pry
def process(cmd)
if cmd =~ /^cd\s+(.+)/i
dest = $1
begin
Dir.chdir File.expand_path(dest)
rescue Errno::ENOENT
raise CommandError, "No such directory: #{dest}"
end
process_cd parse_destination($1)
else
pass_block(cmd)
@ -37,6 +32,20 @@ class Pry
def complete(search)
super + Bond::Rc.files(search.split(" ").last || '')
end
private
def parse_destination(dest)
return dest unless dest == "-"
state.old_pwd || raise(CommandError, "No prior directory available")
end
def process_cd(dest)
state.old_pwd = Dir.pwd
Dir.chdir File.expand_path(dest)
rescue Errno::ENOENT
raise CommandError, "No such directory: #{dest}"
end
end
Pry::Commands.add_command(Pry::Command::ShellCommand)

View File

@ -0,0 +1,56 @@
require 'helper'
describe "Command::ShellCommand" do
describe 'cd' do
before do
@o = Object.new
@t = pry_tester(@o) do
def command_state
pry.command_state[Pry::Command::ShellCommand.match]
end
end
end
describe ".cd" do
before do
Dir.stubs(:chdir)
end
it "saves the current working directory" do
Dir.stubs(:pwd).returns("initial_path")
@t.eval ".cd new_path"
@t.command_state.old_pwd.should == "initial_path"
end
describe "given a path" do
it "sends the path to File.expand_path" do
Dir.expects(:chdir).with(File.expand_path("new_path"))
@t.eval ".cd new_path"
end
end
describe "given a dash" do
describe "given no prior directory" do
it "raises the correct error" do
lambda { @t.eval ".cd -" }.should.raise(StandardError).
message.should == "No prior directory available"
end
end
describe "given a prior directory" do
it "sends the user's last pry working directory to File.expand_path" do
Dir.stubs(:pwd).returns("initial_path")
Dir.expects(:chdir).with(File.expand_path("new_path"))
@t.eval ".cd new_path"
Dir.expects(:chdir).with(File.expand_path("initial_path"))
@t.eval ".cd -"
end
end
end
end
end
end