Class: XMP
Overview
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"
Defined Under Namespace
Classes: StringInputMethod
Instance Method Summary collapse
-
#initialize(bind = nil) ⇒ XMP
constructor
Creates a new XMP object.
-
#puts(exps) ⇒ Object
Evaluates the given
exps
, for example:.
Constructor Details
#initialize(bind = nil) ⇒ XMP
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 Custom Prompts for more information.
49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/irb/xmp.rb', line 49 def initialize(bind = nil) IRB.init_config(nil) 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[:MAIN_CONTEXT] = @irb.context end |
Instance Method Details
#puts(exps) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/irb/xmp.rb', line 74 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 |