module ActionController::ParamsWrapper::ClassMethods

def _set_wrapper_options(options)

def _set_wrapper_options(options)
  self._wrapper_options = Options.from_hash(options)
end

def inherited(klass)

module is inherited.
wrapper key and attribute names. Called automatically when the
Sets the default wrapper key or model which will be used to determine
def inherited(klass)
  if klass._wrapper_options.format.any?
    params = klass._wrapper_options.dup
    params.klass = klass
    klass._wrapper_options = params
  end
  super
end

def wrap_parameters(name_or_model_or_options, options = {})

will exclude from a nested hash.
* :exclude - The list of attribute names which parameters wrapper
will wrap into a nested hash.
* :include - The list of attribute names which parameters wrapper
will be enabled.
* :format - The list of formats in which the parameters wrapper
==== Options

# disables parameters wrapping for this controller altogether.
wrap_parameters false

# wraps only +:username+ and +:title+ attributes from parameters.
wrap_parameters include: [:username, :title]

# (+person+, in this case) and the list of attribute names
# wraps parameters by determining the wrapper key from Person class
wrap_parameters Person

# wraps parameters into +params[:person]+ hash
wrap_parameters :person

# enables the parameter wrapper for XML format
wrap_parameters format: :xml
==== Examples

would use to determine the attribute names from.
Sets the name of the wrapper key, or the model which +ParamsWrapper+
def wrap_parameters(name_or_model_or_options, options = {})
  model = nil
  case name_or_model_or_options
  when Hash
    options = name_or_model_or_options
  when false
    options = options.merge(format: [])
  when Symbol, String
    options = options.merge(name: name_or_model_or_options)
  else
    model = name_or_model_or_options
  end
  opts = Options.from_hash _wrapper_options.to_h.slice(:format).merge(options)
  opts.model = model
  opts.klass = self
  self._wrapper_options = opts
end