123456789_123456789_123456789_123456789_123456789_

Module: ActionDispatch::Http::Parameters

Relationships & Source Files
Namespace Children
Modules:
Exceptions:
Extension / Inclusion / Inheritance Descendants
Included In:
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Defined in: actionpack/lib/action_dispatch/http/parameters.rb

Constant Summary

Class Method Summary

::ActiveSupport::Concern - Extended

class_methods

Define class methods from given block.

included

Evaluate given block in context of base class, so that you can write class macros here.

prepended

Evaluate given block in context of base class, so that you can write class macros here.

append_features, prepend_features

Instance Attribute Summary

Instance Method Summary

DSL Calls

included

[ GitHub ]


27
28
29
30
31
32
33
34
# File 'actionpack/lib/action_dispatch/http/parameters.rb', line 27

included do
  class << self
    # Returns the parameter parsers.
    attr_reader :parameter_parsers
  end

  self.parameter_parsers = DEFAULT_PARSERS
end

Instance Attribute Details

#path_parameters (rw)

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

{ action: "my_action", controller: "my_controller" }
[ GitHub ]

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

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

#path_parameters=(parameters) (rw)

This method is for internal use only.
[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/http/parameters.rb', line 67

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

Instance Method Details

#log_parse_error_once (private)

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/http/parameters.rb', line 102

def log_parse_error_once
  @parse_error_logged ||= begin
    parse_logger = logger || ActiveSupport::Logger.new($stderr)
    parse_logger.debug <<~MSG.chomp
      Error occurred while parsing request parameters.
      Contents:

      #{raw_post}
    MSG
  end
end

#parameters Also known as: #params

Returns both GET and POST parameters in a single hash.

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/http/parameters.rb', line 52

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

#params

Alias for #parameters.

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/http/parameters.rb', line 65

alias :params :parameters

#params_parsers (private)

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/http/parameters.rb', line 114

def params_parsers
  ActionDispatch::Request.parameter_parsers
end

#parse_formatted_parameters(parsers) (private)

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/http/parameters.rb', line 89

def parse_formatted_parameters(parsers)
  return yield if content_length.zero? || content_mime_type.nil?

  strategy = parsers.fetch(content_mime_type.symbol) { return yield }

  begin
    strategy.call(raw_post)
  rescue # JSON or Ruby code block errors.
    log_parse_error_once
    raise ParseError, "Error occurred while parsing request parameters"
  end
end