class ActionController::Parameters
Constants
- NEVER_UNPERMITTED_PARAMS
Never raise an
UnpermittedParameters
exception because of these params are present. They are added by Rails and it's of no concern.
Attributes
permitted[RW]
permitted?[RW]
Public Class Methods
new(attributes = nil)
click to toggle source
Calls superclass method
# File lib/action_controller/parameters.rb, line 33 def initialize(attributes = nil) super(attributes) @permitted = false end
Public Instance Methods
[](key)
click to toggle source
Calls superclass method
# File lib/action_controller/parameters.rb, line 85 def [](key) convert_hashes_to_parameters(key, super) end
dup()
click to toggle source
# File lib/action_controller/parameters.rb, line 101 def dup duplicate = Parameters.new(self) duplicate.instance_variable_set :@permitted, @permitted duplicate end
fetch(key, *args)
click to toggle source
Calls superclass method
# File lib/action_controller/parameters.rb, line 89 def fetch(key, *args) convert_hashes_to_parameters(key, super) rescue KeyError, IndexError raise ActionController::ParameterMissing.new(key) end
permit(*filters)
click to toggle source
# File lib/action_controller/parameters.rb, line 54 def permit(*filters) params = self.class.new filters.each do |filter| case filter when Symbol, String then params[filter] = self[filter] if has_key?(filter) keys.grep(/\A#{Regexp.escape(filter.to_s)}\(\d+[if]?\)\z/).each { |key| params[key] = self[key] } when Hash then self.slice(*filter.keys).each do |key, value| return unless value key = key.to_sym params[key] = each_element(value) do |value| # filters are a Hash, so we expect value to be a Hash too next if filter.is_a?(Hash) && !value.is_a?(Hash) value = self.class.new(value) if !value.respond_to?(:permit) value.permit(*Array.wrap(filter[key])) end end end end unpermitted_parameters!(params) if self.class.action_on_unpermitted_parameters params.permit! end
permit!()
click to toggle source
# File lib/action_controller/parameters.rb, line 38 def permit! each_pair do |key, value| convert_hashes_to_parameters(key, value) self[key].permit! if self[key].respond_to? :permit! end @permitted = true self end
require(key)
click to toggle source
# File lib/action_controller/parameters.rb, line 48 def require(key) self[key].presence || raise(ActionController::ParameterMissing.new(key)) end
Also aliased as: required
slice(*keys)
click to toggle source
Calls superclass method
# File lib/action_controller/parameters.rb, line 95 def slice(*keys) self.class.new(super).tap do |new_instance| new_instance.instance_variable_set :@permitted, @permitted end end
Protected Instance Methods
convert_value(value)
click to toggle source
# File lib/action_controller/parameters.rb, line 108 def convert_value(value) if value.class == Hash self.class.new(value) elsif value.is_a?(Array) value.dup.replace(value.map { |e| convert_value(e) }) else value end end
Private Instance Methods
convert_hashes_to_parameters(key, value)
click to toggle source
# File lib/action_controller/parameters.rb, line 119 def convert_hashes_to_parameters(key, value) if value.is_a?(Parameters) || !value.is_a?(Hash) value else # Convert to Parameters on first access self[key] = self.class.new(value) end end
each_element(object) { |el| ... }
click to toggle source
# File lib/action_controller/parameters.rb, line 128 def each_element(object) if object.is_a?(Array) object.map { |el| yield el }.compact # fields_for on an array of records uses numeric hash keys elsif object.is_a?(Hash) && object.keys.all? { |k| k =~ /\A-?\d+\z/ } hash = object.class.new object.each { |k,v| hash[k] = yield v } hash else yield object end end
unpermitted_keys(params)
click to toggle source
# File lib/action_controller/parameters.rb, line 156 def unpermitted_keys(params) self.keys - params.keys - NEVER_UNPERMITTED_PARAMS end
unpermitted_parameters!(params)
click to toggle source
# File lib/action_controller/parameters.rb, line 141 def unpermitted_parameters!(params) return unless self.class.action_on_unpermitted_parameters unpermitted_keys = unpermitted_keys(params) if unpermitted_keys.any? case self.class.action_on_unpermitted_parameters when :log ActionController::Base.logger.debug "Unpermitted parameters: #{unpermitted_keys.join(", ")}" when :raise raise ActionController::UnpermittedParameters.new(unpermitted_keys) end end end