Sha256: 39e8a60ba763f72c8ebd9535f8714c1c4fead41c7fcf7aef1f28a6b8afc9d9a8
Contents?: true
Size: 969 Bytes
Versions: 1
Compression:
Stored size: 969 Bytes
Contents
begin require 'json' rescue LoadError => e require 'json/pure' end module Rack # A Rack middleware for parsing POST/PUT body data when Content-Type is # not one of the standard supported types, like <tt>application/json</tt>. # # TODO: Find a better name. # class PostBodyContentTypeParser # Constants # CONTENT_TYPE = 'CONTENT_TYPE'.freeze POST_BODY = 'rack.input'.freeze FORM_INPUT = 'rack.request.form_input'.freeze FORM_HASH = 'rack.request.form_hash'.freeze # Supported Content-Types # APPLICATION_JSON = 'application/json'.freeze def initialize(app) @app = app end def call(env) if Rack::Request.new(env).media_type == APPLICATION_JSON && (body = env[POST_BODY].read).length != 0 env[POST_BODY].rewind # somebody might try to read this stream env.update(FORM_HASH => JSON.parse(body), FORM_INPUT => env[POST_BODY]) end @app.call(env) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rack-contrib-1.2.0 | lib/rack/contrib/post_body_content_type_parser.rb |