class Rack::RequestDecompressor

Constants

VERSION

Public Class Methods

new(app) click to toggle source
# File lib/rack/request_decompressor.rb, line 8
def initialize(app)
        @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/rack/request_decompressor.rb, line 12
def call(env)
        req = Rack::Request.new(env)
        env['rack.input'] = decompress(req.body, env['HTTP_CONTENT_ENCODING'])
        @app.call(env)
end
decompress(body, method) click to toggle source
# File lib/rack/request_decompressor.rb, line 18
def decompress(body, method)
        case method
        when 'gzip'
                Zlib::GzipReader.wrap(StringIO.new body.read)
        when 'deflate'
                StringIO.new(Zlib::Inflate.new(-Zlib::MAX_WBITS).inflate(body.read))
        when nil
                body
        else
                raise Rack::UnknownCompressMethod.new("unknown compressing method '#{method}'.")
        end
end