123456789_123456789_123456789_123456789_123456789_

Class: XMP::StringInputMethod

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Inherits: IRB::InputMethod
Defined in: lib/irb/xmp.rb

Overview

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

Class Method Summary

::IRB::InputMethod - Inherited

.new

Creates a new input method object.

Instance Attribute Summary

::IRB::InputMethod - Inherited

#prompt

The irb prompt associated with this input method.

#file_name

The file name of this input method, usually given during initialization.

#readable_after_eof?

Whether this input method is still readable when there is no more data to read.

Instance Method Summary

  • #gets

    Reads the next expression from this printer.

  • #puts(exps)

    Concatenates all expressions in this printer, separated by newlines.

::IRB::InputMethod - Inherited

#gets

Reads the next line from this input method.

Constructor Details

.newStringInputMethod

Creates a new StringInputMethod object

[ GitHub ]

  
# File 'lib/irb/xmp.rb', line 102

def initialize
  super
  @exps = []
end

Instance Attribute Details

#encoding (readonly)

Returns the encoding of last expression printed by #puts.

[ GitHub ]

  
# File 'lib/irb/xmp.rb', line 144

attr_reader :encoding

#eof?Boolean (readonly)

Whether there are any expressions left in this printer.

[ GitHub ]

  
# File 'lib/irb/xmp.rb', line 108

def eof?
  @exps.empty?
end

Instance Method Details

#gets

Reads the next expression from this printer.

See IO#gets for more information.

[ GitHub ]

  
# File 'lib/irb/xmp.rb', line 115

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.

[ GitHub ]

  
# File 'lib/irb/xmp.rb', line 129

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