Sha256: a11eddd1f01fa2887b06664266d9b4715c73c623269ad999caf9b96fdaddccdb

Contents?: true

Size: 1.17 KB

Versions: 3

Compression:

Stored size: 1.17 KB

Contents

module HttpEventLogger
  module Event

    class Response

      attr_reader :request, :time_taken_in_seconds, :status, :headers

      delegate :base_uri, :uri, to: :request

      def initialize(args)
        @request               = args[:request]
        @time_taken_in_seconds = args[:time_taken_in_seconds]
        @status                = args[:status].to_s
        @headers               = HttpEventLogger::Event::Headers.new(args[:headers])
        @raw_body              = args[:body]
        HttpEventLogger::Event::Observer.observe(:received, self)
      end

      def body_with_formatting
        body.include?("\n") ? "\n#{body}" : body
      end

      private

      def body
        if body_read_deferred?
          "[not available]"
        elsif body_gzip_encoded?
          Zlib::GzipReader.new(StringIO.new(@raw_body.to_s)).read
        else
          @raw_body.to_s
        end
      end

      # open-uri wraps the response in a Net::ReadAdapter, so the response body is not available yet
      def body_read_deferred?
        @raw_body.is_a?(Net::ReadAdapter)
      end

      def body_gzip_encoded?
        @headers["Content-Encoding"] =~ /gzip/
      end

    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
http_event_logger-0.1.0.rc3 ./lib/http_event_logger/event/response.rb
http_event_logger-0.1.0.rc2 ./lib/http_event_logger/event/response.rb
http_event_logger-0.1.0.rc1 ./lib/http_event_logger/event/response.rb