18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/goliath/rack/params.rb', line 18
def retrieve_params(env)
params = env['params'] || {}
begin
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?
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
else
post_params = {}
end
end
params.merge!(post_params)
end
rescue StandardError => e
raise Goliath::Validation::BadRequestError, "Invalid parameters: #{e.class.to_s}"
end
params
end
|