Class: XMP

Inherits:
Object show all
Defined in:
lib/irb/xmp.rb

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

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 IRB@Customizing+the+IRB+Prompt for full detail.



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# 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

Instance Method Details

#puts(exps) ⇒ Object

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"


83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# 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