Class: Rack::RequestDecompressor

Inherits:
Object
  • Object
show all
Defined in:
lib/rack/request_decompressor.rb,
lib/rack/request_decompressor/version.rb

Constant Summary collapse

VERSION =
"0.0.2"

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ RequestDecompressor



8
9
10
# File 'lib/rack/request_decompressor.rb', line 8

def initialize(app)
	@app = app
end

Instance Method Details

#call(env) ⇒ Object



12
13
14
15
16
# 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) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
# 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