class Pry::Command::ShellCommand
Public Instance Methods
process(cmd)
click to toggle source
# File lib/pry/commands/shell_command.rb, line 21 def process(cmd) if cmd =~ /^cd\s*(.*)/i process_cd parse_destination(Regexp.last_match(1)) else pass_block(cmd) if command_block command_block.call `#{cmd}` else pry_instance.config.system.call(output, cmd, pry_instance) end end end
Private Instance Methods
cd_path_env()
click to toggle source
# File lib/pry/commands/shell_command.rb, line 50 def cd_path_env Pry::Env['CDPATH'] end
cd_path_exists?()
click to toggle source
# File lib/pry/commands/shell_command.rb, line 54 def cd_path_exists? cd_path_env && cd_path_env.length.nonzero? end
parse_destination(dest)
click to toggle source
# File lib/pry/commands/shell_command.rb, line 36 def parse_destination(dest) return "~" if dest.empty? return dest unless dest == "-" state.old_pwd || raise(CommandError, "No prior directory available") end
path_from_cd_path(dest)
click to toggle source
# File lib/pry/commands/shell_command.rb, line 58 def path_from_cd_path(dest) return if !(dest && cd_path_exists?) || special_case_path?(dest) cd_path_env.split(File::PATH_SEPARATOR).each do |path| return path if File.directory?(path) && path.split(File::SEPARATOR).last == dest end nil end
process_cd(dest)
click to toggle source
# File lib/pry/commands/shell_command.rb, line 43 def process_cd(dest) state.old_pwd = Dir.pwd Dir.chdir(File.expand_path(path_from_cd_path(dest) || dest)) rescue Errno::ENOENT raise CommandError, "No such directory: #{dest}" end
special_case_path?(dest)
click to toggle source
# File lib/pry/commands/shell_command.rb, line 68 def special_case_path?(dest) ['.', '..', '-'].include?(dest) || dest =~ /\A[#{File::PATH_SEPARATOR}~]/ end