lib/httpi/response.rb in httpi-0.6.1 vs lib/httpi/response.rb in httpi-0.7.0

- old
+ new

@@ -1,7 +1,8 @@ require "zlib" require "stringio" +require "httpi/dime" module HTTPI # = HTTPI::Response # @@ -16,36 +17,59 @@ self.code = code.to_i self.headers = headers self.raw_body = body end - attr_accessor :code, :headers, :raw_body + attr_accessor :code, :headers, :raw_body, :attachments # Returns whether the HTTP response is considered successful. def error? !SuccessfulResponseCodes.include? code.to_i end + def attachments + decode_body unless @body + @attachments ||= [] + end + # Returns the HTTP response body. def body - @body ||= gzipped_response? ? decoded_body : raw_body + decode_body unless @body + @body end attr_writer :body private + def decode_body + body = gzipped_response? ? decoded_gzip_body : raw_body + @body = dime_response? ? decoded_dime_body(body) : body + end + # Returns whether the response is gzipped. def gzipped_response? headers["Content-Encoding"] == "gzip" || raw_body[0..1] == "\x1f\x8b" end + # Returns whether this is a DIME response. + def dime_response? + headers['Content-Type'] == 'application/dime' + end + # Returns the gzip decoded response body. - def decoded_body + def decoded_gzip_body gzip = Zlib::GzipReader.new StringIO.new(raw_body) gzip.read ensure gzip.close + end + + # 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 end end