Class
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"
Class Methods
lib/irb/xmp.rb
View on GitHub
# File tmp/rubies/ruby-3.2.0/lib/irb/xmp.rb, line 55
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
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.
Instance Methods
lib/irb/xmp.rb
View on GitHub
# File tmp/rubies/ruby-3.2.0/lib/irb/xmp.rb, line 80
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
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"