by Lin Jen-Shin (godfat)
Ruby-Interactive-ruBy – Yet another interactive Ruby shell
Rib 1.0.4 – 2012-03-20
[core/multiline] Fixed a corner case:
1/1.to_i + 1
[rib] Do not crash because of a loop error. Try to relaunch the shell.
gem install rib
As an interactive shell
As IRB (reads
As Rails console
You could also run in production and pass arguments normally as you’d do in
rails console or
rib rails production --sandbox --debugger
Note: You might need to add ruby-debug or ruby-debug19 to your Gemfile if you’re passing –debugger and using bundler together.
As Ramaze console
As a console for whichever the app in the current path it should be (for now, it’s either Rails or Ramaze)
If you’re trying to use
rib auto for a Rails app, you could also pass
arguments as if you were using
rib auto is merely passing
rib auto production --sandbox --debugger
As a fully featured interactive Ruby shell (as ripl-rc)
As a fully featured app console (yes, some commands could be used together)
rib all auto # or `rib auto all`, the order doesn't really matter
You can customize Rib’s behaviour by setting a config file located at
$RIB_HOME environment variable. Since it’s merely a Ruby script
which would be loaded into memory before launching Rib shell session, You can
put any customization or monkey patch there. Personally, I use all plugins
provided by Rib.
As you can see, putting
require 'rib/all' into config file is exactly the
same as running
rib all without a config file. What
rib all would do is
merely require the file, and that file is also merely requiring all plugins,
but without extra plugins, which you should enable them one by one. This
is because most extra plugins are depending on other gems, or hard to work
with other plugins, or having strong personal tastes, so you won’t want to
enable them all. Suppose you only want to use the core plugins and color
plugin, you’ll put this into your config file:
require 'rib/core' require 'rib/more/color'
You can also write your plugins there. Here’s another example:
require 'rib/core' require 'pp' Rib.config[:prompt] = '$ ' module RibPP Rib::Shell.send(:include, self) def format_result result result_prompt + result.pretty_inspect end end
So that we override the original format_result to pretty_inspect the result. You can also build your own gem and then simply require it in your config file. To see a list of overridable API, please read api.rb
Currently, there are two extra plugins.
require 'rib/extra/autoindent'This plugin is depending on:
- readline plugin
- multiline plugin
require 'rib/extra/hirb'This plugin is depending on:
|ENV[‘RIB_HOME’]||Specify where Rib should store config and history|
|Rib.config[:config]||The path where config should be located|
|Rib.config[:name]||The name of this shell|
|Rib.config[:result_prompt]||Default is “=>”|
|Rib.config[:prompt]||Default is “»”|
|Rib.config[:binding]||Context, default: TOPLEVEL_BINDING|
|Rib.config[:exit]||Commands to exit, default [nil] # control+d|
Plugin specific configuration
|Rib.config[:completion]||Completion: Bond config|
|Rib.config[:history_file]||Default is “~/.rib/config/history.rb”|
|Rib.config[:history_size]||Default is 500|
|Rib.config[:color]||A hash of Class => :color mapping|
|Rib.config[:autoindent_spaces]||How to indent? Default is two spaces: ‘ ‘|
As a debugging/interacting tool
Rib could be used as a kind of debugging tool which you can set break point in the source program.
require 'rib/config' # This would load your Rib config require 'rib/more/anchor' # If you enabled anchor in config, then needed not Rib.anchor binding # This would give you an interactive shell # when your program has been executed here. Rib.anchor 123 # You can also anchor on an object.
But this might be called in a loop, you might only want to enter the shell under certain circumstance, then you’ll do:
require 'rib/debug' Rib.enable_anchor do # Only `Rib.anchor` called in the block would launch a shell end Rib.anchor binding # No effect (no-op) outside the block
Anchor could also be nested. The level would be shown on the prompt, starting from 1.
In place editing
Whenever you called:
require 'rib/more/edit' Rib.edit
Rib would open an editor according to $EDITOR (
ENV['EDITOR']) for you.
After save and leave the editor, Rib would evaluate what you had input.
This also works inside an anchor. To use it, require either rib/more/edit
or rib/more or rib/all.
As a shell framework
The essence is:
All others are optional. The core plugins are lying in
more plugins are lying in
rib/more/*.rb. You can read
bin/rib-ramaze as a Rib App reference implementation, because it’s very
simple, simpler than rib-rails.