Class: ActionController::Parameters

Inherits:
HashWithIndifferentAccess
  • Object
show all
Defined in:
lib/action_controller/parameters.rb

Constant Summary collapse

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.

%w( controller action )

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attributes = nil) ⇒ Parameters

Returns a new instance of Parameters.



33
34
35
36
# File 'lib/action_controller/parameters.rb', line 33

def initialize(attributes = nil)
  super(attributes)
  @permitted = false
end

Instance Attribute Details

#permittedObject Also known as: permitted?

Returns the value of attribute permitted.



24
25
26
# File 'lib/action_controller/parameters.rb', line 24

def permitted
  @permitted
end

Instance Method Details

#[](key) ⇒ Object



85
86
87
# File 'lib/action_controller/parameters.rb', line 85

def [](key)
  convert_hashes_to_parameters(key, super)
end

#dupObject



101
102
103
104
105
# 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) ⇒ Object



89
90
91
92
93
# 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) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# 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!Object



38
39
40
41
42
43
44
45
46
# 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) ⇒ Object Also known as: required



48
49
50
# File 'lib/action_controller/parameters.rb', line 48

def require(key)
  self[key].presence || raise(ActionController::ParameterMissing.new(key))
end

#slice(*keys) ⇒ Object



95
96
97
98
99
# 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