Practical Sorcery with irb
Clinton R. Dreisbach, Former Viget
Article Category:
Posted on
When you run irb
, the Ruby REPL, it loads the Ruby script at ~/.irbrc
, if it exists. My .irbrc
file has gotten kind of big lately, and the tricks it adds to my shell are great, so I thought I’d pull it apart and show you the magic inside.
Includes and setup
require 'pp' require 'rubygems' # wirble is amazing require 'wirble' Wirble.init Wirble.colorize IRB.conf[:AUTO_INDENT] = true
This stuff is all pretty trivial, but incredibly useful. pp
is a library that comes with Ruby that prints out nested hashes and arrays in a readable format with indentation. Requiring rubygems
up front almost always saves you a line of code. It also lets you require the gem wirble
, which gives you cross-session history, colored output, and auto-completion.
IRB.conf[:AUTO_INDENT] = true
does exactly what it sounds like: when you write code that would normally have an indent after it, like the beginning of a block, irb
indents the next line.
class Object # get all the methods for an object that aren't basic methods from Object def my_methods (methods - Object.instance_methods).sort end end
When I need to look up methods on an object, I’m always bombarded with a mess of methods on Object. This just gets rid of them for me.
# from http://themomorohoax.com/2009/03/27/irb-tip-load-files-faster def ls %x{ls}.split("\n") end def cd(dir) Dir.chdir(dir) Dir.pwd end def pwd Dir.pwd end
ls
is copied from a person who has the same problem as me: always typing ls
inside irb
. This just makes that work. I figured as long as I was doing that, I might as well implement the shell commands cd
and pwd
.
# also from http://themomorohoax.com/2009/03/27/irb-tip-load-files-faster def rl(file_name = nil) if file_name.nil? if !@recent.nil? rl(@recent) else puts "No recent file to reload" end else file_name += '.rb' unless file_name =~ /\.rb/ @recent = file_name load "#{file_name}" end end
This is some slick magic to help you reload Ruby code inside irb
. Normally, you can re-read a file with load "<filename>.rb"
, which works well, but is a lot to type over and over. rl
lets you just type rl "<filename>"
, and once you’ve called it once, you can just type rl
to reload the same file again.
alias p pp alias quit exit
Finally, I dropped two aliases into .irbrc
. pp
is so great that I prefer to use it over p
, and I have an inability to remember to type exit
instead of quit
, so I just fixed that.
You can find the entire .irbrc
file at http://gist.github.com/86875. If you have any irb
tips of your own, let us know in the comments!