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
-
#initialize(params, controller) ⇒ Parameters
constructor
A new instance of Parameters.
- #permit(*permissions) ⇒ Object
- #permit! ⇒ Object
- #require(key) ⇒ Object
- #to_s ⇒ Object
- #with_shields_down ⇒ Object
Constructor Details
#initialize(params, controller) ⇒ Parameters
Returns a new instance of Parameters.
42 43 44 45 46 47 |
# File 'lib/shields_up/parameters.rb', line 42 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
6 7 8 9 10 11 12 |
# File 'lib/shields_up/parameters.rb', line 6 def self.param_type @param_type ||= if defined?(ActionController) && defined?(ActionController::Parameters) ActionController::Parameters else ActiveSupport::HashWithIndifferentAccess end end |
Instance Method Details
#[](key) ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/shields_up/parameters.rb', line 78 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
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/shields_up/parameters.rb', line 53 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 |
#permit! ⇒ Object
74 75 76 |
# File 'lib/shields_up/parameters.rb', line 74 def permit! deep_dup_to_hash(@params).symbolize_keys end |
#require(key) ⇒ Object
70 71 72 |
# File 'lib/shields_up/parameters.rb', line 70 def require(key) self[key] or raise ParameterMissing.new("Required parameter #{key} does not exist in #{to_s}") end |
#to_s ⇒ Object
49 50 51 |
# File 'lib/shields_up/parameters.rb', line 49 def to_s @params.inspect end |
#with_shields_down ⇒ Object
34 35 36 37 38 39 40 |
# File 'lib/shields_up/parameters.rb', line 34 def with_shields_down saved = @controller.params @controller.params = @original_params yield ensure @controller.params = saved end |