Method: RorHack::ArrayHack#multi_group_by

Defined in:
lib/ror_hack/array_hack.rb

#multi_group_by(*keys) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/ror_hack/array_hack.rb', line 3

def multi_group_by(*keys)
  group_by_block = lambda do |array, ks|
    key = ks.shift
    return array unless key
    if key.is_a? Proc
      hash = array.group_by(&key)
    else
      hash = array.group_by { |i| i[key] }
    end
    if ks.present?
      hash.keys.each do |k|
        hash[k] = group_by_block.call hash[k], ks.dup
      end
    end
    return hash
  end
  group_by_block.call self, keys
end