Class: Protocol::HTTP::Body::Stream

Inherits:
Object
  • Object
show all
Includes:
Reader
Defined in:
lib/protocol/http/body/stream.rb

Overview

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.

Defined Under Namespace

Modules: Reader

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Reader

#read, #read_nonblock, #read_partial

Constructor Details

#initialize(input, output = Buffered.new) ⇒ Stream

Returns a new instance of Stream.

Raises:

  • (ArgumentError)


30
31
32
33
34
35
36
37
38
39
# File 'lib/protocol/http/body/stream.rb', line 30

def initialize(input, 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

Instance Attribute Details

#inputObject (readonly)

Returns the value of attribute input.



41
42
43
# File 'lib/protocol/http/body/stream.rb', line 41

def input
  @input
end

#outputObject (readonly)

Returns the value of attribute output.



42
43
44
# File 'lib/protocol/http/body/stream.rb', line 42

def output
  @output
end

Instance Method Details

#close(error = nil) ⇒ Object

Close the input and output bodies.



169
170
171
172
173
174
175
176
# File 'lib/protocol/http/body/stream.rb', line 169

def close(error = nil)
	self.close_read
	self.close_write

	return nil
ensure
	@closed = true
end

#close_readObject



157
158
159
160
# File 'lib/protocol/http/body/stream.rb', line 157

def close_read
	@input&.close
	@input = nil
end

#close_writeObject

close must never be called on the input stream. huh?



163
164
165
166
# File 'lib/protocol/http/body/stream.rb', line 163

def close_write
	@output&.close
	@output = nil
end

#closed?Boolean

Whether the stream has been closed.

Returns:

  • (Boolean)


179
180
181
# File 'lib/protocol/http/body/stream.rb', line 179

def closed?
	@closed
end

#empty?Boolean

Whether there are any output chunks remaining?

Returns:

  • (Boolean)


184
185
186
# File 'lib/protocol/http/body/stream.rb', line 184

def empty?
	@output.empty?
end

#flushObject



154
155
# File 'lib/protocol/http/body/stream.rb', line 154

def flush
end

#write(buffer) ⇒ Object Also known as: write_nonblock



143
144
145
146
147
148
149
150
# File 'lib/protocol/http/body/stream.rb', line 143

def write(buffer)
	if @output
		@output.write(buffer)
		return buffer.bytesize
	else
		raise IOError, "Stream is not writable, output has been closed!"
	end
end