Class: Hash

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

Instance Method Summary collapse

Instance Method Details

#deep_slice(*keys) ⇒ Object



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)
  # use self.class so sublclasses of Hash can be deep_sliced
  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