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