class HTTP::Response::Parser

class is not marked as private anymore.
expect this class API to be stable until this message disappears and
NOTE(ixti): This class is a subject of future refactoring, thus don’t
@api private

def add(data)

Returns:
  • (self) -
def add(data)
  # XXX(ixti): API doc of HttpParser::Parser is misleading, it says that
  #   it returns boolean true if data was parsed successfully, but instead
  #   it's response tells if there was an error; So when it's `true` that
  #   means parse failed, and `false` means parse was successful.
  #   case of success.
  return self unless @parser.parse(@state, data)
  raise IOError, "Could not parse data"
end

def finished?

def finished?
  @finished[:message]
end

def headers?

def headers?
  @finished[:headers]
end

def http_version

def http_version
  @state.http_version
end

def initialize

def initialize
  @state  = HttpParser::Parser.new_instance { |i| i.type = :response }
  @parser = HttpParser::Parser.new(self)
  reset
end

def on_body(_response, chunk)

def on_body(_response, chunk)
  if @chunk
    @chunk << chunk
  else
    @chunk = chunk
  end
end

def on_header_field(_response, field)

def on_header_field(_response, field)
  @field = field
end

def on_header_value(_response, value)

def on_header_value(_response, value)
  @headers.add(@field, value) if @field
end

def on_headers_complete(_reposse)

def on_headers_complete(_reposse)
  @finished[:headers] = true
end

def on_message_complete(_response)

def on_message_complete(_response)
  @finished[:message] = true
end

def read(size)

def read(size)
  return if @chunk.nil?
  if @chunk.bytesize <= size
    chunk  = @chunk
    @chunk = nil
  else
    chunk = @chunk.byteslice(0, size)
    @chunk[0, size] = ""
  end
  chunk
end

def reset

def reset
  @state.reset!
  @finished = Hash.new(false)
  @headers  = HTTP::Headers.new
  @field    = nil
  @chunk    = nil
end

def status_code

def status_code
  @state.http_status
end