Auto-Load Applications within Pry & IRB


Rails console is convenient that we enter the console with the Rails application fully loaded. We do not need to load any class or library before using it. However, it would be great if we do the same in any other Ruby application, especially when we're developing a Ruby gem.

It is possible with Ruby built-in mechanism .irbrc (or .pryrc if using pry). The .irbrc, like other rc files, load the scripts before entering the console. In this case, we can setup an entry point where all dependencies are required in the development.

Let's say we have a library called foobar and the file structure looks like:

- lib
  - foobar
    - version.rb
    - foo.rb
    - bar.rb
  - foobar.rb
- Gemfile
- README.md

This typical gem library structure generates a Foobar constant at the top level. However, if we simply run:

irb

there will be no Foobar constant available for us before we require it within the irb:

Foobar
# => NameError: uninitialized constant Foobar
require_relative "lib/foobar"
# => true
Foobar
# => Foobar

It works, but it would be annoying if we have to do this every time we enter the console. What we want to achieve is when we run irb and the whole library in lib directory is loaded.

.irbrc (or .pryrc)

This is where .irbrc comes in. This could be simple if we add .irbrc in the root directory and add the following content.

require_relative "lib/foobar"

and viola!

irb

and

Foobar
# => Foobar

This could be even more useful if we want to add more commands in the .irbrc.

Pry Editor

There are more options for customization in .pryrc. For example, we can change the default editor in .pryrc like:

Pry.editor = "vim"

so when we enter edit command in the console, vim editor will show up.

Reference