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