Sha256: 60b9be5d5ce31dfbfe4487ecfaeea36983007698353d2ab7f192b3e3973230cd

Contents?: true

Size: 907 Bytes

Versions: 18

Compression:

Stored size: 907 Bytes

Contents

# frozen_string_literal: true

require 'zlib'

module Frodo
  # Middleware to uncompress GZIP compressed responses from Salesforce.
  class Middleware::Gzip < Frodo::Middleware
    ACCEPT_ENCODING_HEADER  = 'Accept-Encoding'
    CONTENT_ENCODING_HEADER = 'Content-Encoding'
    ENCODING                = 'gzip'

    def call(env)
      env[:request_headers][ACCEPT_ENCODING_HEADER] = ENCODING if @options[:compress]
      @app.call(env).on_complete do |environment|
        on_complete(environment)
      end
    end

    def on_complete(env)
      env[:body] = decompress(env[:body]) if gzipped?(env)
    end

    # Internal: Returns true if the response is gzipped.
    def gzipped?(env)
      env[:response_headers][CONTENT_ENCODING_HEADER] == ENCODING
    end

    # Internal: Decompresses a gzipped string.
    def decompress(body)
      Zlib::GzipReader.new(StringIO.new(body)).read
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
frodo-0.12.8 lib/frodo/middleware/gzip.rb
frodo-0.12.7 lib/frodo/middleware/gzip.rb
frodo-0.12.6 lib/frodo/middleware/gzip.rb
frodo-0.12.5 lib/frodo/middleware/gzip.rb
frodo-0.12.4 lib/frodo/middleware/gzip.rb
frodo-0.12.2 lib/frodo/middleware/gzip.rb
frodo-0.12.1 lib/frodo/middleware/gzip.rb
frodo-0.12.0 lib/frodo/middleware/gzip.rb
frodo-0.11.0 lib/frodo/middleware/gzip.rb
frodo-0.10.8 lib/frodo/middleware/gzip.rb
frodo-0.10.7 lib/frodo/middleware/gzip.rb
frodo-0.10.6 lib/frodo/middleware/gzip.rb
frodo-0.10.5 lib/frodo/middleware/gzip.rb
frodo-0.10.4 lib/frodo/middleware/gzip.rb
frodo-0.10.3 lib/frodo/middleware/gzip.rb
frodo-0.10.2 lib/frodo/middleware/gzip.rb
frodo-0.10.1 lib/frodo/middleware/gzip.rb
frodo-0.10.0 lib/frodo/middleware/gzip.rb