Module: ActionDispatch::Http::Parameters

Extended by:
ActiveSupport::Concern
Included in:
Request
Defined in:
lib/action_dispatch/http/parameters.rb

Defined Under Namespace

Modules: ClassMethods Classes: ParseError

Constant Summary collapse

PARAMETERS_KEY =
"action_dispatch.request.path_parameters"
DEFAULT_PARSERS =
{
  Mime[:json].symbol => -> (raw_post) {
    data = ActiveSupport::JSON.decode(raw_post)
    data.is_a?(Hash) ? data : { _json: data }
  }
}

Instance Method Summary collapse

Instance Method Details

#parametersObject Also known as: params

Returns both GET and POST parameters in a single hash.



50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/action_dispatch/http/parameters.rb', line 50

def parameters
  params = get_header("action_dispatch.request.parameters")
  return params if params

  params = begin
             request_parameters.merge(query_parameters)
           rescue EOFError
             query_parameters.dup
           end
  params.merge!(path_parameters)
  set_header("action_dispatch.request.parameters", params)
  params
end

#path_parametersObject

Returns a hash with the parameters used to form the path of the request. Returned hash keys are strings:

{'action' => 'my_action', 'controller' => 'my_controller'}


82
83
84
# File 'lib/action_dispatch/http/parameters.rb', line 82

def path_parameters
  get_header(PARAMETERS_KEY) || set_header(PARAMETERS_KEY, {})
end

#path_parameters=(parameters) ⇒ Object

:nodoc:



65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/action_dispatch/http/parameters.rb', line 65

def path_parameters=(parameters) #:nodoc:
  delete_header("action_dispatch.request.parameters")

  parameters = Request::Utils.set_binary_encoding(self, parameters, parameters[:controller], parameters[:action])
  # If any of the path parameters has an invalid encoding then
  # raise since it's likely to trigger errors further on.
  Request::Utils.check_param_encoding(parameters)

  set_header PARAMETERS_KEY, parameters
rescue Rack::Utils::ParameterTypeError, Rack::Utils::InvalidParameterError => e
  raise ActionController::BadRequest.new("Invalid path parameters: #{e.message}")
end