Sha256: c4f32979ccc9b4bbc2c83a01ce41d07227755867cff9128bcb939a4fb83a6ba2
Contents?: true
Size: 1.94 KB
Versions: 2
Compression:
Stored size: 1.94 KB
Contents
require 'multi_json' require 'rack/utils' module Goliath module Rack URL_ENCODED = %r{^application/x-www-form-urlencoded} JSON_ENCODED = %r{^application/json} # A middle ware to parse params. This will parse both the # query string parameters and the body and place them into # the _params_ hash of the Goliath::Env for the request. # # @example # use Goliath::Rack::Params # class Params module Parser def retrieve_params(env) params = env['params'] || {} params.merge!(::Rack::Utils.parse_nested_query(env['QUERY_STRING'])) if env['rack.input'] post_params = ::Rack::Utils::Multipart.parse_multipart(env) unless post_params body = env['rack.input'].read env['rack.input'].rewind unless body.empty? begin post_params = case(env['CONTENT_TYPE']) when URL_ENCODED then ::Rack::Utils.parse_nested_query(body) when JSON_ENCODED then json = MultiJson.load(body) if json.is_a?(Hash) json else {'_json' => json} end else {} end rescue StandardError => e raise Goliath::Validation::BadRequestError, "Invalid parameters: #{e.class.to_s}" end else post_params = {} end end params.merge!(post_params) end params end end include Goliath::Rack::Validator include Parser def initialize(app) @app = app end def call(env) Goliath::Rack::Validator.safely(env) do env['params'] = retrieve_params(env) @app.call(env) end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
goliath-1.0.3 | lib/goliath/rack/params.rb |
goliath-1.0.2 | lib/goliath/rack/params.rb |