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)
|
def process(cmd)
|
||||||
if cmd =~ /^cd\s+(.+)/i
|
if cmd =~ /^cd\s+(.+)/i
|
||||||
dest = $1
|
process_cd parse_destination($1)
|
||||||
begin
|
|
||||||
Dir.chdir File.expand_path(dest)
|
|
||||||
rescue Errno::ENOENT
|
|
||||||
raise CommandError, "No such directory: #{dest}"
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
pass_block(cmd)
|
pass_block(cmd)
|
||||||
|
|
||||||
|
@ -37,6 +32,20 @@ class Pry
|
||||||
def complete(search)
|
def complete(search)
|
||||||
super + Bond::Rc.files(search.split(" ").last || '')
|
super + Bond::Rc.files(search.split(" ").last || '')
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
Pry::Commands.add_command(Pry::Command::ShellCommand)
|
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…
Add table
Add a link
Reference in a new issue