class XMP
An example printer for irb.
It's much like the standard library PrettyPrint, that shows the value of each expression as it runs.
In order to use this library, you must first require it:
require 'irb/xmp'
Now, you can take advantage of the Object#xmp convenience method.
xmp <<END foo = "bar" baz = 42 END #=> foo = "bar" #==>"bar" #=> baz = 42 #==>42
You can also create an XMP object, with an optional binding to print expressions in the given binding:
ctx = binding x = XMP.new ctx x.puts #=> today = "a good day" #==>"a good day" ctx.eval 'today # is what?' #=> "a good day"
Public Class Methods
new(bind = nil)
click to toggle source
Creates a new XMP object.
The top-level binding or, optional bind
parameter will be used
when creating the workspace. See WorkSpace.new for more information.
This uses the :XMP
prompt mode, see Customizing the IRB Prompt
at IRB for full detail.
# File lib/irb/xmp.rb, line 55 def initialize(bind = nil) IRB.init_config(nil) #IRB.parse_opts #IRB.load_modules IRB.conf[:PROMPT_MODE] = :XMP bind = IRB::Frame.top(1) unless bind ws = IRB::WorkSpace.new(bind) @io = StringInputMethod.new @irb = IRB::Irb.new(ws, @io) @irb.context.ignore_sigint = false # IRB.conf[:IRB_RC].call(@irb.context) if IRB.conf[:IRB_RC] IRB.conf[:MAIN_CONTEXT] = @irb.context end
Public Instance Methods
puts(exps)
click to toggle source
Evaluates the given exps
, for example:
require 'irb/xmp' x = XMP.new x.puts '{:a => 1, :b => 2, :c => 3}' #=> {:a => 1, :b => 2, :c => 3} # ==>{:a=>1, :b=>2, :c=>3} x.puts 'foo = "bar"' # => foo = "bar" # ==>"bar"
# File lib/irb/xmp.rb, line 83 def puts(exps) @io.puts exps if @irb.context.ignore_sigint begin trap_proc_b = trap("SIGINT"){@irb.signal_handle} catch(:IRB_EXIT) do @irb.eval_input end ensure trap("SIGINT", trap_proc_b) end else catch(:IRB_EXIT) do @irb.eval_input end end end