Sha256: b719941e24271be0cc5758d761bba5faae4052e35df94df165e0401054d0bff1

Contents?: true

Size: 1.03 KB

Versions: 2

Compression:

Stored size: 1.03 KB

Contents

require "zlib"
require "stringio"

module HTTPI
  class Response

    # Range of HTTP response codes considered to be successful.
    SuccessfulResponseCodes = 200..299

    # Initializer expects an HTTP response +code+, +headers+ and +body+.
    def initialize(code, headers, body)
      self.code = code
      self.headers = headers
      self.raw_body = body
    end

    attr_accessor :code, :headers, :raw_body

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

    # Returns the HTTP response body.
    def body
      @body ||= gzipped_response? ? decoded_body : raw_body
    end

    attr_writer :body

  private

    # Returns whether the response is gzipped.
    def gzipped_response?
      headers["Content-Encoding"] == "gzip" || raw_body[0..1] == "\x1f\x8b"
    end

    # Returns the gzip decoded response body.
    def decoded_body
      gzip = Zlib::GzipReader.new StringIO.new(raw_body)
      gzip.read
    ensure
      gzip.close
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
httpi-0.2.0 lib/httpi/response.rb
httpi-0.1.0 lib/httpi/response.rb