Class: Hash

Inherits:
Object
  • Object
show all
Defined in:
lib/shiplane/extensions.rb

Instance Method Summary collapse

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