Pry is a great alternative to irb. Here’s how I use it.
The default history search for pry is not great. You can override it with more modern tools. (source)
Run gem install rb-readline
and add it to your Gemfile in your Rails project.
Modify ~/.pryrc
require 'rb-readline'
def RbReadline.rl_reverse_search_history(sign, key)
rl_insert_text `cat <history path> | fzf --tac | tr '\n' ' '` # see below for modifying this
end
# I added this line to let me know it kicked in.
To see where Pry stores your history, run:
pry(main)> Pry.config.history_file
=> "/Users/amirsharif/.local/share/pry/pry_history"
Voila!
def pmeasure(&block)
now = Time.now.to_f
yield
duration = Time.now.to_f - now
puts "Finished in #{duration.round(6)}s"
end
pmeasure { YourMethod.call } # You'll get a log of how long it took
# [1] pry(main)> pmeasure { sleep 1 }
# Finished in 1.001213s
Add these methods to your Pry console. (source)
def pbcopy(input)
str = input.to_s
IO.popen('pbcopy', 'w') { |f| f << str }
str
end
def pbpaste
`pbpaste`
end
Let’s say you have a giant string blob in a local variable like html
In the console you can run:
pbcopy(html) # The string content is now on your clipboard!
You can use this to evaluate quick lines as well. Copy a multiline snippet of code and then type peval
in Pry instead of pasting. It will run the code much faster since it won’t have to parse and highlight it inside of the console.
Pry::Commands.block_command 'peval', "Pastes from the clipboard then evals it in the context of Pry" do
_pry_.input = StringIO.new("(\n#{pbpaste}\n)")
end
Often when working with emoji’s I got this error: Encoding::UndefinedConversionError
This is because of the rb-readline
we added earlier.
You can reproduce this error by just copying and pasting this:
'’ this will break pry!'
I opened this issue on GitHub. https://github.com/ConnorAtherton/rb-readline/issues/163