Class: InputSanitizer::RestrictedHash
- Inherits:
-
Hash
- Object
- Hash
- InputSanitizer::RestrictedHash
- Defined in:
- lib/input_sanitizer/restricted_hash.rb
Instance Method Summary collapse
- #[](key) ⇒ Object
- #[]=(key, val) ⇒ Object
-
#initialize(allowed_keys) ⇒ RestrictedHash
constructor
A new instance of RestrictedHash.
- #key_allowed?(key) ⇒ Boolean
- #merge(hash, &block) ⇒ Object
- #merge!(hash, &block) ⇒ Object
- #store(key, val) ⇒ Object
- #transform_keys ⇒ Object
- #transform_keys! ⇒ Object
Constructor Details
#initialize(allowed_keys) ⇒ RestrictedHash
Returns a new instance of RestrictedHash.
3 4 5 6 |
# File 'lib/input_sanitizer/restricted_hash.rb', line 3 def initialize(allowed_keys) @allowed_keys = Set.new(allowed_keys) super() end |
Instance Method Details
#[](key) ⇒ Object
8 9 10 11 |
# File 'lib/input_sanitizer/restricted_hash.rb', line 8 def [](key) raise_not_allowed(key) unless key_allowed?(key) fetch(key, nil) end |
#[]=(key, val) ⇒ Object
13 14 15 16 |
# File 'lib/input_sanitizer/restricted_hash.rb', line 13 def []=(key, val) @allowed_keys.add(key) super end |
#key_allowed?(key) ⇒ Boolean
33 34 35 |
# File 'lib/input_sanitizer/restricted_hash.rb', line 33 def key_allowed?(key) @allowed_keys.include?(key) end |
#merge(hash, &block) ⇒ Object
28 29 30 31 |
# File 'lib/input_sanitizer/restricted_hash.rb', line 28 def merge(hash, &block) @allowed_keys.merge(Set[*hash.keys]) super end |
#merge!(hash, &block) ⇒ Object
23 24 25 26 |
# File 'lib/input_sanitizer/restricted_hash.rb', line 23 def merge!(hash, &block) @allowed_keys.merge(Set[*hash.keys]) super end |
#store(key, val) ⇒ Object
18 19 20 21 |
# File 'lib/input_sanitizer/restricted_hash.rb', line 18 def store(key, val) @allowed_keys.add(key) super end |
#transform_keys ⇒ Object
37 38 39 40 41 42 43 44 45 46 |
# File 'lib/input_sanitizer/restricted_hash.rb', line 37 def transform_keys return enum_for(:transform_keys) unless block_given? new_allowed_keys = @allowed_keys.map { |key| yield(key) } result = self.class.new(new_allowed_keys) each_key do |key| result[yield(key)] = self[key] end result end |
#transform_keys! ⇒ Object
48 49 50 51 52 53 54 55 56 |
# File 'lib/input_sanitizer/restricted_hash.rb', line 48 def transform_keys! return enum_for(:transform_keys!) unless block_given? @allowed_keys.map! { |key| yield(key) } keys.each do |key| self[yield(key)] = delete(key) end self end |