Class: XMP::StringInputMethod

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

Overview

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

Constant Summary

Constants inherited from IRB::InputMethod

IRB::InputMethod::BASIC_WORD_BREAK_CHARACTERS

Instance Attribute Summary collapse

Attributes inherited from IRB::InputMethod

#prompt

Instance Method Summary collapse

Methods inherited from IRB::InputMethod

#inspect, #readable_after_eof?, #support_history_saving?, #winsize

Constructor Details

#initializeStringInputMethod

Creates a new StringInputMethod object



96
97
98
99
# File 'lib/irb/xmp.rb', line 96

def initialize
  super
  @exps = []
end

Instance Attribute Details

#encodingObject (readonly)

Returns the encoding of last expression printed by #puts.



138
139
140
# File 'lib/irb/xmp.rb', line 138

def encoding
  @encoding
end

Instance Method Details

#eof?Boolean

Whether there are any expressions left in this printer.

Returns:

  • (Boolean)


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

def eof?
  @exps.empty?
end

#getsObject

Reads the next expression from this printer.

See IO#gets for more information.



109
110
111
112
113
114
115
116
117
# 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) ⇒ Object

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.



123
124
125
126
127
128
129
130
131
132
133
134
135
# 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