Class: InputSanitizer::RestrictedHash

Inherits:
Hash
  • Object
show all
Defined in:
lib/input_sanitizer/restricted_hash.rb

Instance Method Summary collapse

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

Returns:

  • (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_keysObject



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