class Hash
Public Instance Methods
blacklist(keymap)
click to toggle source
# File lib/shiplane/extensions.rb, line 29 def blacklist(keymap) self.dup.blacklist!(keymap) end
blacklist!(keymap, parentparts = nil)
click to toggle source
# 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)
click to toggle source
# File lib/shiplane/extensions.rb, line 14 def deep_subset(keymap) self.dup.deep_subset!(keymap) end
deep_subset!(keymap)
click to toggle source
# 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)
click to toggle source
# File lib/shiplane/extensions.rb, line 4 def whitelist(*keymaps) self.dup.whitelist!(*keymaps) end
whitelist!(*keymaps)
click to toggle source
# File lib/shiplane/extensions.rb, line 8 def whitelist!(*keymaps) keymaps.map do |map| deep_subset(map) end.inject(&:deep_merge) end