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