Class: Async::HTTP::ContentEncoding
- Inherits:
-
Middleware
- Object
- Middleware
- Async::HTTP::ContentEncoding
- Defined in:
- lib/async/http/content_encoding.rb
Overview
Encode a response according the the request’s acceptable encodings.
Constant Summary collapse
- DEFAULT_WRAPPERS =
{ 'gzip' => Body::Deflate.method(:for) }
- DEFAULT_CONTENT_TYPES =
%r{^(text/.*?)|(.*?/json)|(.*?/javascript)$}
Instance Method Summary collapse
- #call(request) ⇒ Object
-
#initialize(app, content_types = DEFAULT_CONTENT_TYPES, wrappers = DEFAULT_WRAPPERS) ⇒ ContentEncoding
constructor
A new instance of ContentEncoding.
Methods inherited from Middleware
Constructor Details
#initialize(app, content_types = DEFAULT_CONTENT_TYPES, wrappers = DEFAULT_WRAPPERS) ⇒ ContentEncoding
Returns a new instance of ContentEncoding.
36 37 38 39 40 41 |
# File 'lib/async/http/content_encoding.rb', line 36 def initialize(app, content_types = DEFAULT_CONTENT_TYPES, wrappers = DEFAULT_WRAPPERS) super(app) @content_types = content_types @wrappers = wrappers end |
Instance Method Details
#call(request) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/async/http/content_encoding.rb', line 43 def call(request, *) response = super if !response.body.empty? and accept_encoding = request.headers['accept-encoding'] if content_type = response.headers['content-type'] and @content_types.match?(content_type) # TODO use http-accept and sort by priority encodings = accept_encoding.split(/\s*,\s*/) body = response.body encodings.each do |name| if wrapper = @wrappers[name] response.headers['content-encoding'] = name body = wrapper.call(body) break end end response.body = body end end return response end |