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?

Methods included from Enumerable

#inject, #select_map

Instance Attribute Details

#linenoObject

Returns the value of attribute lineno.



33
34
35
# File 'lib/zip/ioextras.rb', line 33

def lineno
  @lineno
end

Instance Method Details

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



98
99
100
101
102
103
# File 'lib/zip/ioextras.rb', line 98

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

#flushObject



86
87
88
89
90
# File 'lib/zip/ioextras.rb', line 86

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

#gets(aSepString = $/) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/zip/ioextras.rb', line 69

def gets(aSepString=$/)
  @lineno = @lineno.next
  return read if aSepString == nil
  aSepString="#{$/}#{$/}" if aSepString == ""
  
  bufferIndex=0
  while ((matchIndex = @outputBuffer.index(aSepString, bufferIndex)) == nil)
	bufferIndex=@outputBuffer.length
	if input_finished?
	  return @outputBuffer.empty? ? nil : flush 
	end
	@outputBuffer << produce_input
  end
  sepIndex=matchIndex + aSepString.length
  return @outputBuffer.slice!(0...sepIndex)
end

#initializeObject



27
28
29
30
31
# File 'lib/zip/ioextras.rb', line 27

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

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



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/zip/ioextras.rb', line 35

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

  if @outputBuffer.length > 0
    if numberOfBytes <= @outputBuffer.length
      tbuf = @outputBuffer.slice!(0, numberOfBytes)
    else
      numberOfBytes -= @outputBuffer.length 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)


92
93
94
95
96
# File 'lib/zip/ioextras.rb', line 92

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

#readlines(aSepString = $/) ⇒ Object



63
64
65
66
67
# File 'lib/zip/ioextras.rb', line 63

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