acts like tee(1) on an input input to provide a input-like stream while providing rewindable semantics through a File/StringIO backing store. On the first pass, the input is only read on demand so your Rack application can use input notification (upload progress and like). This should fully conform to the Rack::Lint::InputWrapper specification on the public API. This class is intended to be a strict interpretation of Rack::Lint::InputWrapper functionality and will not support any deviations from it.
When processing uploads, Unicorn exposes a TeeInput object under "rack.input" of the Rack environment.
returns the maximum size of request bodies to buffer in memory, amounts larger than this are buffered to the filesystem
# File lib/phusion_passenger/utils/tee_input.rb, line 87 def self.client_body_buffer_size @@client_body_buffer_size end
sets the maximum size of request bodies to buffer in memory, amounts larger than this are buffered to the filesystem
# File lib/phusion_passenger/utils/tee_input.rb, line 81 def self.client_body_buffer_size=(bytes) @@client_body_buffer_size = bytes end
Initializes a new TeeInput object. You normally do not have to call this unless you are writing an HTTP server.
# File lib/phusion_passenger/utils/tee_input.rb, line 93 def initialize(socket, env) @len = env[CONTENT_LENGTH] @len = @len.to_i if @len @socket = socket @tmp = @len && @len <= @@client_body_buffer_size ? StringIO.new("") : TmpIO.new("PassengerTeeInput") end
# File lib/phusion_passenger/utils/tee_input.rb, line 101 def close @tmp.close end
# File lib/phusion_passenger/utils/tee_input.rb, line 135 def each while line = gets yield line end self # Rack does not specify what the return value is here end
# File lib/phusion_passenger/utils/tee_input.rb, line 121 def gets if socket_drained? @tmp.gets else tee(@socket.gets) end end
# File lib/phusion_passenger/utils/tee_input.rb, line 113 def read(*args) if socket_drained? @tmp.read(*args) else tee(@socket.read(*args)) end end
Generated with the Darkfish Rdoc Generator 2.