Class: ShieldsUp::Parameters
- Inherits:
-
Object
- Object
- ShieldsUp::Parameters
- Defined in:
- lib/shields_up/parameters.rb
Constant Summary collapse
- 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, ]
Class Method Summary collapse
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.
40 41 42 43 44 45 |
# File 'lib/shields_up/parameters.rb', line 40 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 |
Class Method Details
.param_type ⇒ Object
4 5 6 7 8 9 10 |
# File 'lib/shields_up/parameters.rb', line 4 def self.param_type @param_type ||= if defined?(ActionController) && defined?(ActionController::Parameters) ActionController::Parameters else ActiveSupport::HashWithIndifferentAccess end end |
Instance Method Details
#[](key) ⇒ Object
def permit!
deep_dup_to_hash(@params).symbolize_keys
end
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/shields_up/parameters.rb', line 76 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
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/shields_up/parameters.rb', line 51 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
68 69 70 |
# File 'lib/shields_up/parameters.rb', line 68 def require(key) self[key] or raise ParameterMissing.new("Required parameter #{key} does not exist in #{to_s}") end |
#to_s ⇒ Object
47 48 49 |
# File 'lib/shields_up/parameters.rb', line 47 def to_s @params.inspect end |
#with_shields_down ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/shields_up/parameters.rb', line 32 def with_shields_down saved = @controller.params @controller.params = @original_params yield ensure @controller.params = saved end |