class HTTPI::Response

Represents an HTTP response and contains various response details.
= HTTPI::Response

def attachments

Returns any DIME attachments.
def attachments
  decode_body unless @body
  @attachments ||= []
end

def body

Returns the HTTP response body.
def body
  decode_body unless @body
  @body
end

def cookies

Returns a list of cookies from the response.
def cookies
  @cookies ||= Cookie.list_from_headers(headers)
end

def decode_body

def decode_body
  return @body = "" if !raw_body || raw_body.empty?
  body = gzipped_response? ? decoded_gzip_body : raw_body
  @body = dime_response? ? decoded_dime_body(body) : body
end

def decoded_dime_body(body = nil)

Returns the DIME decoded response body.
def decoded_dime_body(body = nil)
  dime = Dime.new(body || raw_body)
  self.attachments = dime.binary_records
  dime.xml_records.first.data
end

def decoded_gzip_body

Returns the gzip decoded response body.
def decoded_gzip_body
  unless gzip = Zlib::GzipReader.new(StringIO.new(raw_body))
    raise ArgumentError, "Unable to create Zlib::GzipReader"
  end
  gzip.read
ensure
  gzip.close if gzip
end

def dime_response?

Returns whether this is a DIME response.
def dime_response?
  headers["Content-Type"] == "application/dime"
end

def error?

Returns whether the HTTP response is considered successful.
def error?
  !SuccessfulResponseCodes.include? code.to_i
end

def gzipped_response?

Returns whether the response is gzipped.
def gzipped_response?
  headers["Content-Encoding"] == "gzip"
end

def initialize(code, headers, body)

Initializer expects an HTTP response +code+, +headers+ and +body+.
def initialize(code, headers, body)
  self.code = code.to_i
  self.headers = Rack::Utils::HeaderHash.new(headers)
  self.raw_body = body
end

def multipart?

Returns whether the HTTP response is a multipart response.
def multipart?
  !!(headers["Content-Type"] =~ /^multipart/i)
end