class Rack::Inflater
Constants
- VERSION
Public Class Methods
new(app)
click to toggle source
# File lib/rack/inflater.rb, line 7 def initialize(app) @app = app end
Public Instance Methods
call(env)
click to toggle source
# File lib/rack/inflater.rb, line 11 def call(env) if decompress?(env) character_set = env["rack.input".freeze].external_encoding extracted = decode( env["rack.input".freeze], env["HTTP_CONTENT_ENCODING".freeze] ) env.delete("HTTP_CONTENT_ENCODING".freeze) env["CONTENT_LENGTH".freeze] = extracted.bytesize input = StringIO.new(extracted).set_encoding(character_set).set_encoding("UTF-8") env['rack.input'.freeze] = input end @app.call(env) end
Private Instance Methods
decode(input, content_encoding)
click to toggle source
# File lib/rack/inflater.rb, line 43 def decode(input, content_encoding) decompressed = "".force_encoding("ASCII-8BIT") decoder = HttpDecoders.decoder_for_encoding(content_encoding).new do |data| decompressed << data end decoder << input.read decoder.finalize! decompressed end
decompress?(env)
click to toggle source
# File lib/rack/inflater.rb, line 30 def decompress?(env) method_handled?(env["REQUEST_METHOD".freeze]) && encoding_handled?(env["HTTP_CONTENT_ENCODING".freeze]) end
encoding_handled?(encoding)
click to toggle source
# File lib/rack/inflater.rb, line 39 def encoding_handled?(encoding) HttpDecoders.accepted_encodings.include? encoding end
method_handled?(method)
click to toggle source
# File lib/rack/inflater.rb, line 35 def method_handled?(method) %w[POST PUT PATCH DELETE].include? method end