Skip to content

Instantly share code, notes, and snippets.

@justin808 justin808/.pryrc
Last active Oct 13, 2019

Embed
What would you like to do?
# Using these pry gems
# gem "pry"
# gem "pry-rails"
# gem "pry-byebug"
# gem "pry-stack_explorer"
# gem "pry-doc"
# gem "pry-state"
# gem "pry-toys"
# gem "pry-rescue"
# Fix for Zeus: see https://github.com/burke/zeus/issues/466#issuecomment-60242431
if defined?(::Rails) && Rails.env
if Rails::VERSION::MAJOR == 3
verbose, $VERBOSE = $VERBOSE, nil
if defined?(Rails::Console)
Rails::Console::IRB = ::Pry unless Rails::Console::IRB == ::Pry
end
$VERBOSE = verbose
unless defined? ::Pry::ExtendCommandBundle
::Pry::ExtendCommandBundle = Module.new
end
end
if defined?(Rails) && Rails::VERSION::MAJOR == 4 && Rails.application
unless Rails.application.config.console == ::Pry
Rails.application.config.console = ::Pry
end
end
if ((Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR >= 2) ||
Rails::VERSION::MAJOR == 4)
unless defined? ::Rails::ConsoleMethods
require 'rails/console/app'
require 'rails/console/helpers'
TOPLEVEL_BINDING.eval('self').extend ::Rails::ConsoleMethods
end
end
end
# #### END FIX FOR ZEUS
Pry::Commands.block_command "noconflict", "Rename break to bbreak and next to nnext" do
Pry::Commands.rename_command("nnext", "next")
Pry::Commands.rename_command("bbreak", "break")
end
Pry::Commands.block_command "unnoconflict", "Revert to normal next and break" do
Pry::Commands.rename_command("next", "nnext")
Pry::Commands.rename_command("break", "bbreak")
end
## Useful Collections
def a_array
(1..6).to_a
end
def a_hash
{hello: "world", free: "of charge"}
end
## Benchmarking
# Inspired by <http://stackoverflow.com/questions/123494/whats-your-favourite-irb-trick/123834#123834>.
def do_time(repetitions = 100, &block)
require 'benchmark'
Benchmark.bm{|b| b.report{repetitions.times(&block)}}
end
Pry.config.color = true
Pry.config.prompt = Pry::NAV_PROMPT
Pry.config.commands.alias_command "h", "hist -T 20", desc: "Last 20 commands"
Pry.config.commands.alias_command "hg", "hist -T 20 -G", desc: "Up to 20 commands matching expression"
Pry.config.commands.alias_command "hG", "hist -G", desc: "Commands matching expression ever used"
Pry.config.commands.alias_command "hr", "hist -r", desc: "hist -r <command number> to run a command"
if defined?(PryByebug)
def pry_debug
Pry.commands.alias_command 't', 'show-stack'
Pry.commands.alias_command 's', 'step'
Pry.commands.alias_command 'n', 'next'
Pry.commands.alias_command 'c', 'continue'
Pry.commands.alias_command 'f', 'finish'
Pry.commands.alias_command 'u', 'up'
Pry.commands.alias_command 'd', 'down'
Pry.commands.alias_command 'b', 'break'
Pry.commands.alias_command 'w', 'whereami'
puts "Debugging Shortcuts"
puts 'w : whereami'
puts 's : step'
puts 'n : next'
puts 'c : continue'
puts 'f : finish'
puts 'Stack movement'
puts 't : show-stack'
puts 'ff : frame'
puts 'u : up'
puts 'd : down'
puts 'b : break'
""
end
# Longer shortcuts
Pry.commands.alias_command 'ff', 'frame'
Pry.commands.alias_command 'sss', 'show-stack'
Pry.commands.alias_command 'ss', 'step'
Pry.commands.alias_command 'nn', 'next'
Pry.commands.alias_command 'cc', 'continue'
Pry.commands.alias_command 'fin', 'finish'
Pry.commands.alias_command 'uu', 'up'
Pry.commands.alias_command 'dd', 'down'
Pry.commands.alias_command 'bb', 'break'
Pry.commands.alias_command 'ww', 'whereami'
end
if defined?(::Rails) && Rails.env && Rails.env.test? && ENV["PRY_LONG"].blank?
pry_debug
end
begin
require 'awesome_print'
# Pry.config.print = proc { |output, value| output.puts value.ai }
AwesomePrint.pry!
rescue LoadError => err
puts "no awesome_print :("
end
my_hook = Pry::Hooks.new.add_hook(:before_session, :add_dirs_to_load_path) do
# adds the directories /spec and /test directories to the path if they exist and not already included
dir = `pwd`.chomp
dirs_added = []
%w(spec test presenters lib).map{ |d| "#{dir}/#{d}" }.each do |p|
if File.exist?(p) && !$:.include?(p)
$: << p
dirs_added << p
end
end
puts "Added #{ dirs_added.join(", ") } to load path in ~/.pryrc." if dirs_added.present?
end
# Hit Enter to repeat last command
Pry::Commands.command /^$/, "repeat last command" do
_pry_.run_command Pry.history.to_a.last
end
my_hook.exec_hook(:before_session)
puts "Loaded ~/.pryrc"
puts
def more_help
puts "Helpful shortcuts:"
puts "hh : hist -T 20 Last 20 commands"
puts "hg : hist -T 20 -G Up to 20 commands matching expression"
puts "hG : hist -G Commands matching expression ever used"
puts "hr : hist -r hist -r <command number> to run a command"
puts
puts "Samples variables"
puts "a_array : [1, 2, 3, 4, 5, 6]"
puts "a_hash : { hello: \"world\", free: \"of charge\" }"
puts
puts "helper : Access Rails helpers"
puts "app : Access url_helpers"
puts
puts "require \"rails_helper\" : To include Factory Girl Syntax"
puts "include FactoryGirl::Syntax::Methods : To include Factory Girl Syntax"
puts
puts "or if you defined one..."
puts "require \"pry_helper\""
puts
puts "Sidekiq::Queue.new.clear : To clear sidekiq"
puts "Sidekiq.redis { |r| puts r.flushall } : Another clear of sidekiq"
puts
puts "Debugging Shortcuts"
puts 'ss : step'
puts 'nn : next'
puts 'cc : continue'
puts 'fin : finish'
puts 'uu : up'
puts 'dd : down'
puts 'bb : break'
puts 'ww : whereami'
puts 'ff : frame'
puts 'sss : show-stack'
puts '$ : show whole method of context'
puts
puts "Run 'pry_debug' to display shorter debug shortcuts"
""
end
puts "Run 'more_help' to see tips"
@chucai

This comment has been minimized.

Copy link

chucai commented Sep 10, 2014

Great Job! Thanks.

@justin808

This comment has been minimized.

Copy link
Owner Author

justin808 commented Oct 3, 2015

Tip: Run help alias

Aliases
  !!!                Alias for `exit-program`
  !!@                Alias for `exit-all`
  $                  Alias for `show-source`
  ?                  Alias for `show-doc`
  @                  Alias for `whereami`
  bb                 Alias for `break`
  breakpoint         Alias for `break`
  cc                 Alias for `continue`
  clipit             Alias for `gist --clip`
  dd                 Alias for `down`
  ff                 Alias for `frame`
  file-mode          Alias for `shell-mode`
  fin                Alias for `finish`
  find-routes        Alias for `find-route`
  h                  Last 20 commands
  hG                 Commands matching expression ever used
  hg                 Up to 20 commands matching expression
  history            Alias for `hist`
  hr                 Hist -r <command number> to run a command
  nn                 Alias for `next`
  quit               Alias for `exit`
  quit-program       Alias for `exit-program`
  reload-method      Alias for `reload-code`
  show-method        Alias for `show-source`
  ss                 Alias for `step`
  uu                 Alias for `up`
  ww                 Alias for `whereami`

Gems I use for Pry:

  gem "pry"
  gem "pry-rails"
  gem "pry-byebug"
  gem "pry-stack_explorer"
  gem "pry-doc"
  gem "awesome_print"
  gem "binding_of_caller"

See: http://forum.shakacode.com/t/my-pryrc-for-debugging-and-productivity/364

@dkassen

This comment has been minimized.

Copy link

dkassen commented Sep 5, 2019

Comment on line 44 should say break/bbreak instead of step/sstep

@justin808

This comment has been minimized.

Copy link
Owner Author

justin808 commented Sep 17, 2019

@dkassen, Thanks for the tip. I can't figure out why I needed those blocks. Any idea?

@dkassen

This comment has been minimized.

Copy link

dkassen commented Sep 17, 2019

@justin808 break and next seem like standard debugger commands, there might be some other settings that modify or add those commands. I’m guessing pry keeps a registry of commands and renaming them like this seems like it’d override any other definitions. Seems hacky.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.