Class: Hash
- Inherits:
-
Object
- Object
- Hash
- Defined in:
- lib/shiplane/extensions.rb
Instance Method Summary collapse
- #blacklist(keymap) ⇒ Object
- #blacklist!(keymap, parentparts = nil) ⇒ Object
- #deep_subset(keymap) ⇒ Object
- #deep_subset!(keymap) ⇒ Object
- #whitelist(*keymaps) ⇒ Object
- #whitelist!(*keymaps) ⇒ Object
Instance Method Details
#blacklist(keymap) ⇒ Object
29 30 31 |
# File 'lib/shiplane/extensions.rb', line 29 def blacklist(keymap) self.dup.blacklist!(keymap) end |
#blacklist!(keymap, parentparts = nil) ⇒ Object
33 34 35 36 37 38 39 40 41 |
# File 'lib/shiplane/extensions.rb', line 33 def blacklist!(keymap, parentparts = nil) keypart, *rest = keymap.split(".") keychain = [parentparts, keypart].compact.join(".") self.each do |k, v| v.blacklist!(Array(rest).join("."), keychain) if v.is_a?(Hash) && k.to_s == keypart.to_s self.delete(k) if k.to_s == keypart.to_s && rest.empty? end end |
#deep_subset(keymap) ⇒ Object
14 15 16 |
# File 'lib/shiplane/extensions.rb', line 14 def deep_subset(keymap) self.dup.deep_subset!(keymap) end |
#deep_subset!(keymap) ⇒ Object
18 19 20 21 22 23 24 25 26 27 |
# File 'lib/shiplane/extensions.rb', line 18 def deep_subset!(keymap) keypath_keys = keymap.split('.') return {} unless keypath_keys.size >= 1 deepest_subset = { keypath_keys.last => dig(*keypath_keys) } keypath_keys[0..-2].reverse.inject(deepest_subset)do |accum, key| accum = { key => accum } end end |
#whitelist(*keymaps) ⇒ Object
4 5 6 |
# File 'lib/shiplane/extensions.rb', line 4 def whitelist(*keymaps) self.dup.whitelist!(*keymaps) end |
#whitelist!(*keymaps) ⇒ Object
8 9 10 11 12 |
# File 'lib/shiplane/extensions.rb', line 8 def whitelist!(*keymaps) keymaps.map do |map| deep_subset(map) end.inject(&:deep_merge) end |