Class: ShieldsUp::Parameters
- Inherits:
-
Object
- Object
- ShieldsUp::Parameters
- Defined in:
- lib/shields_up/parameters.rb
Constant Summary collapse
- PARAM_TYPE =
ActiveSupport::HashWithIndifferentAccess
- PERMITTED_SCALAR_TYPES =
[ String, Symbol, NilClass, Numeric, TrueClass, FalseClass, Date, Time, # DateTimes are Dates, we document the type but avoid the redundant check. StringIO, IO, ]
Instance Method Summary collapse
-
#[](key) ⇒ Object
def permit! deep_dup_to_hash(@params).symbolize_keys end.
-
#initialize(params, controller) ⇒ Parameters
constructor
A new instance of Parameters.
- #permit(*permissions) ⇒ Object
- #require(key) ⇒ Object
- #to_s ⇒ Object
- #with_shields_down ⇒ Object
Constructor Details
#initialize(params, controller) ⇒ Parameters
Returns a new instance of Parameters.
38 39 40 41 42 43 |
# File 'lib/shields_up/parameters.rb', line 38 def initialize(params, controller) raise UnsupportedParameterType.new unless params.is_a? ActiveSupport::HashWithIndifferentAccess @original_params = params @controller = controller @params = deep_dup_to_hash(params) end |
Instance Method Details
#[](key) ⇒ Object
def permit!
deep_dup_to_hash(@params).symbolize_keys
end
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/shields_up/parameters.rb', line 74 def [](key) key = key.to_s value = @params[key] if value.is_a?(Hash) self.class.new(@original_params[key], @controller) elsif value.is_a?(Array) [].tap do |array| value.each_with_index do |element, i| if permitted_scalar?(element) array << element elsif element.is_a? Hash array << self.class.new(@original_params[key][i], @controller) end end end else permit_scalar(key) end end |
#permit(*permissions) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/shields_up/parameters.rb', line 49 def permit(*) {}.tap do |permitted| .each do || , key = (.is_a?(Symbol) || .is_a?(String)) ? [, .to_s] : [.values.first, .keys.first.to_s] if @params.has_key?(key) if .is_a?(Symbol) || .is_a?(String) result = permit_scalar(key) permitted[key] = result if @params[key] == result else result = permit_nested(key, ) permitted[key] = result if result end end end end.symbolize_keys end |
#require(key) ⇒ Object
66 67 68 |
# File 'lib/shields_up/parameters.rb', line 66 def require(key) self[key] or raise ParameterMissing.new("Required parameter #{key} does not exist in #{to_s}") end |
#to_s ⇒ Object
45 46 47 |
# File 'lib/shields_up/parameters.rb', line 45 def to_s @params.inspect end |
#with_shields_down ⇒ Object
30 31 32 33 34 35 36 |
# File 'lib/shields_up/parameters.rb', line 30 def with_shields_down saved = @controller.params @controller.params = @original_params yield ensure @controller.params = saved end |