Class: XMP::StringInputMethod
- Inherits:
-
IRB::InputMethod
- Object
- IRB::InputMethod
- XMP::StringInputMethod
- 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
-
#encoding ⇒ Object
readonly
Returns the encoding of last expression printed by #puts.
Attributes inherited from IRB::InputMethod
Instance Method Summary collapse
-
#eof? ⇒ Boolean
Whether there are any expressions left in this printer.
-
#gets ⇒ Object
Reads the next expression from this printer.
-
#initialize ⇒ StringInputMethod
constructor
Creates a new StringInputMethod object.
-
#puts(exps) ⇒ Object
Concatenates all expressions in this printer, separated by newlines.
Methods inherited from IRB::InputMethod
#inspect, #prompting?, #readable_after_eof?, #support_history_saving?, #winsize
Constructor Details
#initialize ⇒ StringInputMethod
Creates a new StringInputMethod object
96 97 98 99 |
# File 'lib/irb/xmp.rb', line 96 def initialize super @exps = [] end |
Instance Attribute Details
#encoding ⇒ Object (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.
102 103 104 |
# File 'lib/irb/xmp.rb', line 102 def eof? @exps.empty? end |
#gets ⇒ Object
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 |