class Rackup::Stream
The input stream is an IO-like object which contains the raw HTTP POST data. When applicable, its external encoding must be “ASCII-8BIT” and it must be opened in binary mode, for Ruby 1.9 compatibility. The input stream must respond to gets, each, read and rewind.
Attributes
Public Class Methods
Source
# File lib/rackup/stream.rb, line 9 def initialize(input = nil, output = Buffered.new) @input = input @output = output raise ArgumentError, "Non-writable output!" unless output.respond_to?(:write) # Will hold remaining data in `#read`. @buffer = nil @closed = false end
Public Instance Methods
Source
# File lib/rackup/stream.rb, line 169 def close(error = nil) self.close_read self.close_write return nil ensure @closed = true end
Close the input and output bodies.
Source
# File lib/rackup/stream.rb, line 154 def close_read @input&.close @input = nil end
Source
# File lib/rackup/stream.rb, line 160 def close_write if @output.respond_to?(:close) @output&.close end @output = nil end
close must never be called on the input stream. huh?
Source
# File lib/rackup/stream.rb, line 179 def closed? @closed end
Whether the stream has been closed.
Source
# File lib/rackup/stream.rb, line 184 def empty? @output.empty? end
Whether there are any output chunks remaining?
Source
# File lib/rackup/stream.rb, line 134 def write(buffer) if @output @output.write(buffer) return buffer.bytesize else raise IOError, "Stream is not writable, output has been closed!" end end
Source
# File lib/rackup/stream.rb, line 143 def write_nonblock(buffer) write(buffer) end
Private Instance Methods
Source
# File lib/rackup/stream.rb, line 190 def read_next if @input return @input.read else @input = nil raise IOError, "Stream is not readable, input has been closed!" end end