Module: TogoStanza::Stanza::Grouping

Included in:
Base
Defined in:
lib/togostanza/stanza/grouping.rb

Class Method Summary collapse

Class Method Details

._grouping(rows, *keys) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/togostanza/stanza/grouping.rb', line 13

def _grouping(rows, *keys)
  (k1, a1), (k2, a2) = keys

  return rows.map {|row| row[k1] } if keys.size == 1

  rows.group_by {|row|
    k1.is_a?(Array) ? row.values_at(*k1) : row[k1]
  }.map {|vs, rs|
    {
      a1 => vs,
      a2 => _grouping(rs, *keys.drop(1))
    }
  }
end

.grouping(rows, *keys) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/togostanza/stanza/grouping.rb', line 5

def grouping(rows, *keys)
  normalized_keys = keys.inject([]) {|acc, key|
    acc + (key.is_a?(Hash) ? key.to_a : [[key, key]])
  }

  _grouping(rows, *normalized_keys)
end