module Goliath::Rack::Params::Parser

Public Instance Methods

retrieve_params(env) click to toggle source
# File lib/actn/api/goliath/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 = Oj.load(body)
            if json.is_a?(Hash)
              json
            else
              {'_json' => json}
            end
          else
            {}
          end
        else
          post_params = {}
        end
      end
      params = { 'query' => params, 'data' => post_params }
    end
  rescue StandardError => e
    raise Goliath::Validation::BadRequestError, "Invalid parameters: #{e.class.to_s}"
  end
  params
end