Class: ActionController::Parameters

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attributes = nil) ⇒ Parameters

Returns a new instance of Parameters.



18
19
20
21
# File 'lib/action_controller/parameters.rb', line 18

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

Instance Attribute Details

#permittedObject Also known as: permitted?

Returns the value of attribute permitted.



15
16
17
# File 'lib/action_controller/parameters.rb', line 15

def permitted
  @permitted
end

Instance Method Details

#[](key) ⇒ Object



68
69
70
# File 'lib/action_controller/parameters.rb', line 68

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

#dupObject



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

def dup
  duplicate = Parameters.new(self)
  duplicate.instance_variable_set :@permitted, @permitted
  duplicate
end

#fetch(key, *args) ⇒ Object



72
73
74
75
76
# File 'lib/action_controller/parameters.rb', line 72

def fetch(key, *args)
  convert_hashes_to_parameters(key, super)
rescue KeyError, IndexError
  raise ActionController::ParameterMissing.new(key)
end

#permit(*filters) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/action_controller/parameters.rb', line 39

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

  params.permit!
end

#permit!Object



23
24
25
26
27
28
29
30
31
# File 'lib/action_controller/parameters.rb', line 23

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



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

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

#slice(*keys) ⇒ Object



78
79
80
81
82
# File 'lib/action_controller/parameters.rb', line 78

def slice(*keys)
  self.class.new(super).tap do |new_instance|
    new_instance.instance_variable_set :@permitted, @permitted
  end
end