module StrongerParameters::Parameters
Public Instance Methods
hash_filter_with_stronger_parameters(params, filter)
click to toggle source
# File lib/stronger_parameters/parameters.rb, line 128 def hash_filter_with_stronger_parameters(params, filter) stronger_filter = ActiveSupport::HashWithIndifferentAccess.new other_filter = ActiveSupport::HashWithIndifferentAccess.new filter.each do |k, v| if v.is_a?(Constraint) stronger_filter[k] = v else other_filter[k] = v end end hash_filter_without_stronger_parameters(params, other_filter) stronger_filter.keys.each do |key| value = fetch(key, nil) result = nil if value.nil? && self.class.allow_nil_for_everything params[key] = nil if key?(key) next end constraint = stronger_filter[key] if key?(key) result = constraint.value(value) elsif constraint.required? result = InvalidValue.new(nil, 'must be present') else next end if result.is_a?(InvalidValue) name = "invalid_parameter.action_controller" ActiveSupport::Notifications.publish(name, key: key, value: value, message: result.message) action = self.class.action_on_invalid_parameters case action when :raise, nil raise StrongerParameters::InvalidParameter.new(result, key) when Proc action.call(result, key) when :log Rails.logger.warn("#{key} #{result.message}, but was: #{value.inspect}") else raise ArgumentError, "Unsupported value in action_on_invalid_parameters: #{action}" end params[key] = value else params[key] = result end end end