Module: IOExtras::AbstractInputStream

Includes:
Enumerable, FakeIO
Included in:
Zip::NullInputStream, Zip::ZipInputStream
Defined in:
lib/zip/ioextras.rb

Overview

Implements many of the convenience methods of IO such as gets, getc, readline and readlines depends on: input_finished?, produce_input and read

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from FakeIO

#kind_of?

Instance Attribute Details

#linenoObject

Returns the value of attribute lineno.



43
44
45
# File 'lib/zip/ioextras.rb', line 43

def lineno
  @lineno
end

Instance Method Details

#each_line(aSepString = $/) ⇒ Object Also known as: each



108
109
110
111
112
113
# File 'lib/zip/ioextras.rb', line 108

def each_line(aSepString = $/)
  while true
    yield readline(aSepString)
  end
rescue EOFError
end

#flushObject



96
97
98
99
100
# File 'lib/zip/ioextras.rb', line 96

def flush
  retVal = @outputBuffer
  @outputBuffer=""
  return retVal
end

#gets(aSepString = $/) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/zip/ioextras.rb', line 79

def gets(aSepString = $/)
  @lineno = @lineno.next
  return read if aSepString.nil?
  aSepString = "#{$/}#{$/}" if aSepString.empty?

  bufferIndex = 0
  while ((matchIndex = @outputBuffer.index(aSepString, bufferIndex)) == nil)
    bufferIndex = @outputBuffer.bytesize
    if input_finished?
      return @outputBuffer.empty? ? nil : flush
    end
    @outputBuffer << produce_input
  end
  sepIndex = matchIndex + aSepString.bytesize
  return @outputBuffer.slice!(0...sepIndex)
end

#initializeObject



37
38
39
40
41
# File 'lib/zip/ioextras.rb', line 37

def initialize
  super
  @lineno = 0
  @outputBuffer = ""
end

#read(numberOfBytes = nil, buf = nil) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/zip/ioextras.rb', line 45

def read(numberOfBytes = nil, buf = nil)
  tbuf = nil

  if @outputBuffer.bytesize > 0
    if numberOfBytes <= @outputBuffer.bytesize
      tbuf = @outputBuffer.slice!(0, numberOfBytes)
    else
      numberOfBytes -= @outputBuffer.bytesize if (numberOfBytes)
      rbuf = sysread(numberOfBytes, buf)
      tbuf = @outputBuffer
      tbuf << rbuf if (rbuf)
      @outputBuffer = ""
    end
  else
    tbuf = sysread(numberOfBytes, buf)
  end

  return nil unless (tbuf)

  if buf
    buf.replace(tbuf)
  else
    buf = tbuf
  end

  buf
end

#readline(aSepString = $/) ⇒ Object

Raises:

  • (EOFError)


102
103
104
105
106
# File 'lib/zip/ioextras.rb', line 102

def readline(aSepString = $/)
  retVal = gets(aSepString)
  raise EOFError if retVal == nil
  retVal
end

#readlines(aSepString = $/) ⇒ Object



73
74
75
76
77
# File 'lib/zip/ioextras.rb', line 73

def readlines(aSepString = $/)
  retVal = []
  each_line(aSepString) { |line| retVal << line }
  retVal
end