Class: RubstApi::Middleware::GZipMiddleware
- Inherits:
-
Object
- Object
- RubstApi::Middleware::GZipMiddleware
- Defined in:
- lib/rubst_api/middleware.rb
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(app, minimum_size: 500, compresslevel: 9) ⇒ GZipMiddleware
constructor
A new instance of GZipMiddleware.
Constructor Details
#initialize(app, minimum_size: 500, compresslevel: 9) ⇒ GZipMiddleware
Returns a new instance of GZipMiddleware.
37 38 39 |
# File 'lib/rubst_api/middleware.rb', line 37 def initialize(app, minimum_size: 500, compresslevel: 9) @app, @minimum_size, @level = app, minimum_size, compresslevel end |
Instance Method Details
#call(env) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/rubst_api/middleware.rb', line 40 def call(env) status, headers, body = @app.call(env) content = body.respond_to?(:each) ? body.to_a.join : body.to_s return [status, headers, [content]] unless env["HTTP_ACCEPT_ENCODING"].to_s.include?("gzip") && content.bytesize >= @minimum_size require "zlib" require "stringio" io = StringIO.new writer = Zlib::GzipWriter.new(io, @level) writer.write(content) writer.close headers = headers.merge("content-encoding" => "gzip", "content-length" => io.string.bytesize.to_s, "vary" => "Accept-Encoding") [status, headers, [io.string]] end |