4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/deep_slice.rb', line 4
def deep_slice(*keys)
hash_klass = self.class
result = hash_klass.new
keys.each do |key|
if key.is_a?(hash_klass)
key.keys.each do |sub_key|
if has_key?(sub_key)
recursive_keys = key[sub_key]
result[sub_key] = \
if self[sub_key].is_a?(Array)
self[sub_key].map { |val|
val.deep_slice(*[recursive_keys].flatten) unless val.nil?
}
else
self[sub_key].deep_slice(*[recursive_keys].flatten) unless self[sub_key].nil?
end
end
end
elsif has_key?(key)
result[key] = self[key]
end
end
result
end
|