Class: ActiveSupport::ParameterFilter::CompiledFilter
- Defined in:
- lib/active_support/parameter_filter.rb
Overview
:nodoc:
Instance Attribute Summary collapse
-
#blocks ⇒ Object
readonly
Returns the value of attribute blocks.
-
#deep_regexps ⇒ Object
readonly
Returns the value of attribute deep_regexps.
-
#regexps ⇒ Object
readonly
Returns the value of attribute regexps.
Class Method Summary collapse
Instance Method Summary collapse
- #call(params, parents = [], original_params = params) ⇒ Object
-
#initialize(regexps, deep_regexps, blocks, mask:) ⇒ CompiledFilter
constructor
A new instance of CompiledFilter.
- #value_for_key(key, value, parents = [], original_params = nil) ⇒ Object
Constructor Details
#initialize(regexps, deep_regexps, blocks, mask:) ⇒ CompiledFilter
Returns a new instance of CompiledFilter.
91 92 93 94 95 96 |
# File 'lib/active_support/parameter_filter.rb', line 91 def initialize(regexps, deep_regexps, blocks, mask:) @regexps = regexps @deep_regexps = deep_regexps&.any? ? deep_regexps : nil @blocks = blocks @mask = mask end |
Instance Attribute Details
#blocks ⇒ Object (readonly)
Returns the value of attribute blocks.
89 90 91 |
# File 'lib/active_support/parameter_filter.rb', line 89 def blocks @blocks end |
#deep_regexps ⇒ Object (readonly)
Returns the value of attribute deep_regexps.
89 90 91 |
# File 'lib/active_support/parameter_filter.rb', line 89 def deep_regexps @deep_regexps end |
#regexps ⇒ Object (readonly)
Returns the value of attribute regexps.
89 90 91 |
# File 'lib/active_support/parameter_filter.rb', line 89 def regexps @regexps end |
Class Method Details
.compile(filters, mask:) ⇒ Object
[View source]
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 84 85 86 87 |
# File 'lib/active_support/parameter_filter.rb', line 58 def self.compile(filters, mask:) return lambda { |params| params.dup } if filters.empty? strings, regexps, blocks, deep_regexps, deep_strings = [], [], [], nil, nil filters.each do |item| case item when Proc blocks << item when Regexp if item.to_s.include?("\\.") (deep_regexps ||= []) << item else regexps << item end else s = Regexp.escape(item.to_s) if s.include?("\\.") (deep_strings ||= []) << s else strings << s end end end regexps << Regexp.new(strings.join("|"), true) unless strings.empty? (deep_regexps ||= []) << Regexp.new(deep_strings.join("|"), true) if deep_strings&.any? new regexps, deep_regexps, blocks, mask: mask end |
Instance Method Details
#call(params, parents = [], original_params = params) ⇒ Object
[View source]
98 99 100 101 102 103 104 105 106 |
# File 'lib/active_support/parameter_filter.rb', line 98 def call(params, parents = [], original_params = params) filtered_params = params.class.new params.each do |key, value| filtered_params[key] = value_for_key(key, value, parents, original_params) end filtered_params end |
#value_for_key(key, value, parents = [], original_params = nil) ⇒ Object
[View source]
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/active_support/parameter_filter.rb', line 108 def value_for_key(key, value, parents = [], original_params = nil) parents.push(key) if deep_regexps if regexps.any? { |r| r.match?(key.to_s) } value = @mask elsif deep_regexps && (joined = parents.join(".")) && deep_regexps.any? { |r| r.match?(joined) } value = @mask elsif value.is_a?(Hash) value = call(value, parents, original_params) elsif value.is_a?(Array) # If we don't pop the current parent it will be duplicated as we # process each array value. parents.pop if deep_regexps value = value.map { |v| value_for_key(key, v, parents, original_params) } # Restore the parent stack after processing the array. parents.push(key) if deep_regexps elsif blocks.any? key = key.dup if key.duplicable? value = value.dup if value.duplicable? blocks.each { |b| b.arity == 2 ? b.call(key, value) : b.call(key, value, original_params) } end parents.pop if deep_regexps value end |