mirror of
https://github.com/pry/pry.git
synced 2022-11-09 12:35:05 -05:00
parent
8a93648cec
commit
f112a8d3e3
2 changed files with 71 additions and 6 deletions
|
@ -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)
|
||||
|
|
56
spec/commands/shell_command_spec.rb
Normal file
56
spec/commands/shell_command_spec.rb
Normal 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
|
Loading…
Reference in a new issue