Adventures with Ruby

Customizing IRB, 2010 edition

View Comments

TL;DR: Check out my new .irbrc-file!

Customizing my work environment is a nerdish hobby of mine. I spend far to much time tweaking my terminal. While I’ll save my terminal customizations for another time, I’ll show you my IRB tweaks in this post.

There are several tools to improve your IRB, and some of them have been around for ages. But the arrival of Bundler makes it difficult to use them. Bundler creates a bubble in which you have to specify your dependencies explicitly. Furthermore, with project specific gemsets, provided by the ever so awesome RVM, we need to install these IRB extensions for every project.

This means that you cannot be sure that extensions like Wirble are available in your new and shiny Rails console. There is only one way around that: add them to your Gemfile. This is what I usually add:

group :development do 
  gem "wirble" 
  gem "hirb" 
  gem "awesome_print", :require => "ap" 
  gem "interactive_editor" 
end

Extension Loading

To load the IRB extensions without blowing up in your face when they’re not available, I gently try to load them, and configure them only when that is successful. You can download my .irbrc on github. Here is what it looks like:

When you start IRB, it shows a line with the extensions loaded. If it’s gray, it’s not appropriate (like rails2 in this example), loaded extensions are green and extensions that are not available are in red.

Showing Queries in ActiveRecord 3

As you can see, the queries done by ActiveRecord are displayed in the same way as they are displayed in your log files. In Rails 2, you would’ve done this by redirecting the log output to STDOUT. In Rails 3 you need to subscribe to the ‘sql.active_record‘-notifications.

This could in theory also be done for other Rails 3 compatible ORMs like Mongoid, but I haven’t looked into that yet.

Hirb

Hirb formats objects into pretty tables, as you can see in the picture above. It also provides some scrolling possibilities like the command line tools less and more. Very handy!

Wirble

The first IRB extension anyone uses. Wirble provides you with history and syntax highlighting.

Awesome Print

While Wirble colorizes the output to improve readability, it can get cluttered really fast, especially when you’re dealing with nested hashes and arrays. AwesomePrint helps to untangle your object mess:

Print Methods

The ‘pm‘-extension I found on the intertubes some time ago, lists the methods and what arguments they take on any given object. You can filter it, by providing a regex. This is what it looks like:

It’s not a gem, but a snippet pasted directly into my irbrc, so it’s always available.

Interactive Editor

Open vim (or any other editor) from IRB, edit your code, save it, close your editor and the code gets executed. Open vim again and your code is visible and editable again. Very awesome! Check it out!

More

Yeah, there more. There’s bond, which makes autocompletion better, and utility belt, and more. I can’t remember to use them all, so I haven’t included them into my irbrc. They certainly are cool enough for you to check out! Also, a lot of great tips are here on Stack Overflow.

If you have any good tips, please share them! Oh, and the other OSX tweaks I use are on github.

PS. For those that don’t know how to load this: put the .irbrc file in your home directory and it will load automatically.

Written by Iain Hecker

July 24th, 2010 at 4:52 pm

Posted in iain.nl

View Comments to 'Customizing IRB, 2010 edition'

Subscribe to comments with RSS or TrackBack to 'Customizing IRB, 2010 edition'.

  1. Very nice! I think I will steal your .irbrc ;)

    Diederick Lawson

    24 Jul 10 at 6:13 PM

  2. Just put it back when you’re done with it…

    Iain Hecker

    24 Jul 10 at 6:55 PM

  3. using Disquss :)

    iain

    25 Jul 10 at 11:23 AM

  4. [...] Customizing IRB, 2010 edition at Adventures with Ruby – Updated .irbrc to include a bunch of new hotness for your irb sessions [...]

  5. I just stole it from Diederick and it looks really nice. Sweet!

    Kevin

    27 Jul 10 at 3:00 PM

  6. On OS/X you'll want to enable “Use bright colors for bold text” in the Terminal preferences. Else some stuff will be invisible.

    ariekanarie

    28 Jul 10 at 9:23 AM

  7. Utility belt doesn't seem to be loaded – any tips? looking for things like grep_classes or user(1) for User.find(1).

    I had trouble getting it to load by just putting in 'require utility_belt', so something else must be broken with it, perhaps associated with the new rails3 console?

    Loving the other stuff though, thanks so much!

    Kevin

    28 Jul 10 at 10:23 PM

  8. I didn't add utility belt to my irbrc, because I couldn't remember to use it. To use it, add it to your Gemfile if you're using bundler, and put this at the bottem (but before the last “puts” statement)

    extend_console “utility_belt” do
    # …some config here if you wish…
    end

    iain

    29 Jul 10 at 7:35 AM

  9. Aah thanks. Turns out my problem was that utility_belt only 'equips' some of the features by default (the lame ones it seems like?) So I had to do UtilityBelt.equip(:language_greps) separately. And rails_finder_shortcut

    Thanks again for the great console, I'm enjoying it!

    kevin

    13 Aug 10 at 6:59 AM

  10. Does anybody know, why hirb doesn’t work with

    Tag.limit(3)
    Tag.all :limit => 3

    instead works.

    beYou media

    15 Aug 10 at 11:36 PM

  11. another question :-)
    how did you set those gorgeous terminal colors?

    THNX!!

    beYou media

    15 Aug 10 at 11:42 PM

  12. found a solution myself:
    Tag.limit(3).all
    works

    beYou media

    15 Aug 10 at 11:43 PM

  13. There are some hacks and the ir_black theme for the terminal. See http://blog.infinitered.com/entries/show/6

    iain

    16 Aug 10 at 7:37 AM

  14. the reason for this is as follows: Tag.limit(3) returns a ActiveRecord::Relation, which hirb does not know, so it won’t make it into a table. It switches to default behavior, which is calling #inspect on it. This means that the query gets executed and the results shown. We’re already past hirb, so it will output like it used to.

    The .all method (alias of .to_a) will execute the query and return an array, which hirb knows.

    Time for a patch to hirb.

    iain

    16 Aug 10 at 7:50 AM

  15. I want to know, how did you make color highlighting?

    Anonymous

    18 Aug 10 at 2:32 PM

  16. color highlighting is done in part by wirble and some of the other components; the irb prompt is colored by myself.

    iain

    19 Aug 10 at 7:29 AM

  17. Do you know, how to force HIRB to use table display for Rails3 ActiveRecord::Relation? Whenever I use Model.where() or Model.limit() I have to prefix it with “table”. Any idea how to make things work ootb?

    Mdrozdziel

    1 Sep 10 at 8:07 AM

  18. Append .all to your relation/scope, e.g. “User.active.all”, this will turn it into an array, which HIRB understands. The author of HIRB has no intention of making a special case for ActiveRecord::Relation objects, afaik.

    iain

    1 Sep 10 at 12:36 PM

Leave a Reply

You must be logged in to post a comment.

blog comments powered by Disqus
Fork me on GitHub