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)

key and attribute names. Called automatically when the module is inherited.
Sets the default wrapper key or model which will be used to determine wrapper
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 = {})


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
enabled.
* `:format` - The list of formats in which the parameters wrapper will be
#### 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

to determine the attribute names from.
Sets the name of the wrapper key, or the model which `ParamsWrapper` would use
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