Class: RubstApi::Middleware::GZipMiddleware

Inherits:
Object
  • Object
show all
Defined in:
lib/rubst_api/middleware.rb

Instance Method Summary collapse

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