Skip to content

Instantly share code, notes, and snippets.

@inoperable
Forked from justin808/.pryrc
Created November 21, 2018 10:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save inoperable/6ada144f0d18703b70e015d7c40b4674 to your computer and use it in GitHub Desktop.
Save inoperable/6ada144f0d18703b70e015d7c40b4674 to your computer and use it in GitHub Desktop.
# 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 step to sstep 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"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment