module StrongerParameters::ControllerSupport::PermittedParameters::ClassMethods

Public Class Methods

extended(base) click to toggle source
# File lib/stronger_parameters/controller_support/permitted_parameters.rb, line 38
def self.extended(base)
  base.send :class_attribute, :log_unpermitted_parameters, instance_accessor: false
end

Public Instance Methods

log_invalid_parameters!() click to toggle source
# File lib/stronger_parameters/controller_support/permitted_parameters.rb, line 42
def log_invalid_parameters!
  self.log_unpermitted_parameters = true
end
permitted_parameters(action, permitted) click to toggle source
# File lib/stronger_parameters/controller_support/permitted_parameters.rb, line 46
def permitted_parameters(action, permitted)
  if permit_parameters[action] == :skip || permitted == :skip
    permit_parameters[action] = permitted
  else
    action_permitted = (permit_parameters[action] ||= {})
    action_permitted.deep_merge!(permitted)
  end
end
permitted_parameters_for(action) click to toggle source
# File lib/stronger_parameters/controller_support/permitted_parameters.rb, line 55
def permitted_parameters_for(action)
  unless for_action = permit_parameters[action]
    # NOTE: there is no easy way to test this, so make sure to test with
    # a real rails controller if you make changes.
    message = "Action #{action} for #{self} does not have any permitted parameters"
    message += " (#{instance_method(action).source_location.join(":")})" if method_defined?(action)
    raise(KeyError, message)
  end
  return :skip if for_action == :skip

  # FYI: we should be able to call sugar on the result of deep_merge, but it breaks tests
  permit_parameters[:all].deep_merge(for_action).
    each_with_object({}) { |(k, v), a| a[k] = PermittedParameters.sugar(v) }
end

Private Instance Methods

permit_parameters() click to toggle source
# File lib/stronger_parameters/controller_support/permitted_parameters.rb, line 72
def permit_parameters
  @permit_parameters ||= if superclass.respond_to?(:permit_parameters, true)
    superclass.send(:permit_parameters).deep_dup
  else
    {all: DEFAULT_PERMITTED.deep_dup}
  end
end