class XMP - irb: Ruby Standard Library Documentation

# 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 Custom Prompts for more information.

    # File 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

### 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 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