class FPM::Fry::StreamParser::Instance
Public Class Methods
new(stack, parser)
click to toggle source
Calls superclass method
# File lib/fpm/fry/stream_parser.rb, line 10 def initialize(stack, parser) super(stack) @parser = parser end
Public Instance Methods
response_call(datum)
click to toggle source
# File lib/fpm/fry/stream_parser.rb, line 15 def response_call(datum) if datum[:response] # probably mocked if datum[:response][:body] headers = datum[:response][:headers] fake_socket = StringIO.new(datum[:response][:body]) parse_response_data(fake_socket, headers) end else socket, headers = extract_socket_and_headers(datum) parse_response_data(socket, headers) end @stack.response_call(datum) end
Private Instance Methods
extract_socket_and_headers(datum)
click to toggle source
# File lib/fpm/fry/stream_parser.rb, line 32 def extract_socket_and_headers(datum) socket = datum[:connection].send(:socket) begin line = socket.readline match = /^HTTP\/\d+\.\d+\s(\d{3})\s/.match(line) end while !match status = match[1].to_i headers = Excon::Headers.new datum[:response] = { :body => '', :headers => headers, :status => status, :remote_ip => socket.respond_to?(:remote_ip) && socket.remote_ip, } Excon::Response.parse_headers(socket, datum) [socket, headers] end
parse_response_data(socket, headers)
click to toggle source
# File lib/fpm/fry/stream_parser.rb, line 52 def parse_response_data(socket, headers) if headers["Transfer-Encoding"] == "chunked" @parser.parse_chunked(socket) else @parser.parse(socket) end end