Shane said:
Can anybody point me to some good documentation (either online or
dead-tree) of the IRB module? The RDoc is pretty bare-bones, and the
samples I've found online aren't terribly well-commented or
self-explanatory.
As background: I'm trying to hook up the text-rendering of my OpenGL
engine to act as a Ruby console. I've got it interpreting individual
lines with eval(), but I'd like to set it up with IRB proper to make use
of the history, prompting, output, etc.
This may not be quite what you're looking for, but whenever I want to
add an irb-like shell to a command-line application, I start by mucking
around with the snippet below (note the difference in the three ways of
invoking irb). Setting the prompt is easier; look for IRB.conf[

ROMPT]
in the irb source.
#!/usr/bin/env ruby
require 'irb'
require 'irb/completion'
module IRB
def IRB.parse_opts
# Don't touch ARGV, which belongs to the app which called this module.
end
def IRB.start_session(*args)
unless $irb
IRB.setup nil
## maybe set some opts here, as in parse_opts in irb/init.rb?
end
workspace = WorkSpace.new(*args)
if @CONF[:SCRIPT] ## normally, set by parse_opts
$irb = Irb.new(workspace, @CONF[:SCRIPT])
else
$irb = Irb.new(workspace)
end
@CONF[:IRB_RC].call($irb.context) if @CONF[:IRB_RC]
@CONF[:MAIN_CONTEXT] = $irb.context
trap 'INT' do
$irb.signal_handle
end
custom_configuration if defined?(IRB.custom_configuration)
catch :IRB_EXIT do
$irb.eval_input
end
## might want to reset your app's interrupt handler here
end
end
class Object
include IRB::ExtendCommandBundle # so that Marshal.dump works
end
if __FILE__ == $0
x = Object.new
puts "\nStarted irb shell for x"
IRB.start_session(x)
puts "\nStarted irb shell for x with current binding"
IRB.start_session(binding, x)
puts "\nRestarted irb shell for x with current binding"
$irb.eval_input
puts "\nExited irb shell"
p x
end