IRB Module Documentation

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.

Shane Liesegang wrote:

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[:PROMPT]
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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs