aboutsummaryrefslogtreecommitdiffstats
path: root/lib/irb/input-method.rb
diff options
context:
space:
mode:
authorzzak <zzak@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-12-21 05:45:50 +0000
committerzzak <zzak@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-12-21 05:45:50 +0000
commit7e9eb32669348b7e0a5775c8e0fc9566be11fc31 (patch)
tree96be4fc975e7afab8dbf4c85e04d552760dab34c /lib/irb/input-method.rb
parent4f7a6aafa57bf57ce4b0b5e323548f0a6385d527 (diff)
downloadruby-7e9eb32669348b7e0a5775c8e0fc9566be11fc31.tar.gz
* lib/irb.rb, lib/irb/*: Documentation for IRB
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38515 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/irb/input-method.rb')
-rw-r--r--lib/irb/input-method.rb65
1 files changed, 58 insertions, 7 deletions
diff --git a/lib/irb/input-method.rb b/lib/irb/input-method.rb
index 7227df4ca0..e1a680847c 100644
--- a/lib/irb/input-method.rb
+++ b/lib/irb/input-method.rb
@@ -12,34 +12,39 @@ require 'irb/src_encoding'
require 'irb/magic-file'
module IRB
- #
- # InputMethod
- # StdioInputMethod
- # FileInputMethod
- # (ReadlineInputMethod)
- #
- STDIN_FILE_NAME = "(line)"
+ STDIN_FILE_NAME = "(line)" # :nodoc:
class InputMethod
@RCS_ID='-$Id$-'
+ # Creates a new input method object
def initialize(file = STDIN_FILE_NAME)
@file_name = file
end
+ # The file name of this input method, usually given during initialization.
attr_reader :file_name
+ # The irb prompt associated with this input method
attr_accessor :prompt
+ # Reads the next line from this input method.
+ #
+ # See IO#gets for more information.
def gets
IRB.fail NotImplementedError, "gets"
end
public :gets
+ # Whether this input method is still readable when there is no more data to
+ # read.
+ #
+ # See IO#eof for more information.
def readable_atfer_eof?
false
end
end
class StdioInputMethod < InputMethod
+ # Creates a new input method object
def initialize
super
@line_no = 0
@@ -48,40 +53,67 @@ module IRB
@stdout = IO.open(STDOUT.to_i, 'w', :external_encoding => IRB.conf[:LC_MESSAGES].encoding, :internal_encoding => "-")
end
+ # Reads the next line from this input method.
+ #
+ # See IO#gets for more information.
def gets
print @prompt
line = @stdin.gets
@line[@line_no += 1] = line
end
+ # Whether the end of this input method has been reached, returns +true+ if
+ # there is no more data to read.
+ #
+ # See IO#eof? for more information.
def eof?
@stdin.eof?
end
+ # Whether this input method is still readable when there is no more data to
+ # read.
+ #
+ # See IO#eof for more information.
def readable_atfer_eof?
true
end
+ # Returns the current line number for #io.
+ #
+ # #line counts the number of times #gets is called.
+ #
+ # See IO#lineno for more information.
def line(line_no)
@line[line_no]
end
+ # The external encoding for standard input.
def encoding
@stdin.external_encoding
end
end
+ # Use a File for IO with irb, see InputMethod
class FileInputMethod < InputMethod
+ # Creates a new input method object
def initialize(file)
super
@io = IRB::MagicFile.open(file)
end
+ # The file name of this input method, usually given during initialization.
attr_reader :file_name
+ # Whether the end of this input method has been reached, returns +true+ if
+ # there is no more data to read.
+ #
+ # See IO#eof? for more information.
def eof?
@io.eof?
end
+ # Reads the next line from this input method.
+ #
+ # See IO#gets for more information.
def gets
print @prompt
l = @io.gets
@@ -89,6 +121,7 @@ module IRB
l
end
+ # The external encoding for standard input.
def encoding
@io.external_encoding
end
@@ -98,6 +131,7 @@ module IRB
require "readline"
class ReadlineInputMethod < InputMethod
include Readline
+ # Creates a new input method object using Readline
def initialize
super
@@ -109,6 +143,9 @@ module IRB
@stdout = IO.open(STDOUT.to_i, 'w', :external_encoding => IRB.conf[:LC_MESSAGES].encoding, :internal_encoding => "-")
end
+ # Reads the next line from this input method.
+ #
+ # See IO#gets for more information.
def gets
Readline.input = @stdin
Readline.output = @stdout
@@ -121,18 +158,32 @@ module IRB
end
end
+ # Whether the end of this input method has been reached, returns +true+
+ # if there is no more data to read.
+ #
+ # See IO#eof? for more information.
def eof?
@eof
end
+ # Whether this input method is still readable when there is no more data to
+ # read.
+ #
+ # See IO#eof for more information.
def readable_atfer_eof?
true
end
+ # Returns the current line number for #io.
+ #
+ # #line counts the number of times #gets is called.
+ #
+ # See IO#lineno for more information.
def line(line_no)
@line[line_no]
end
+ # The external encoding for standard input.
def encoding
@stdin.external_encoding
end