class XMP::StringInputMethod

A custom InputMethod class used by XMP for evaluating string io.

Attributes

encoding [R]

Returns the encoding of last expression printed by puts.

Public Class Methods

new ()

Creates a new StringInputMethod object

Calls superclass method BasicObject::new
# File lib/irb/xmp.rb, line 96
def initialize
  super
  @exps = []
end

Public Instance Methods

eof? ()

Whether there are any expressions left in this printer.

# File lib/irb/xmp.rb, line 102
def eof?
  @exps.empty?
end
gets ()

Reads the next expression from this printer.

See IO#gets for more information.

# File lib/irb/xmp.rb, line 109
def gets
  while l = @exps.shift
    next if /^\s+$/ =~ l
    l.concat "\n"
    print @prompt, l
    break
  end
  l
end
puts (exps)

Concatenates all expressions in this printer, separated by newlines.

An Encoding::CompatibilityError is raised of the given exps‘s encoding doesn’t match the previous expression evaluated.

# File lib/irb/xmp.rb, line 123
def puts(exps)
  if @encoding and exps.encoding != @encoding
    enc = Encoding.compatible?(@exps.join("\n"), exps)
    if enc.nil?
      raise Encoding::CompatibilityError, "Encoding in which the passed expression is encoded is not compatible to the preceding's one"
    else
      @encoding = enc
    end
  else
    @encoding = exps.encoding
  end
  @exps.concat exps.split(/\n/)
end