Sha256: 567704b8ced354ea3944507dc946b53fe877091d01752411c9b0ed34e34f9da9

Contents?: true

Size: 600 Bytes

Versions: 31

Compression:

Stored size: 600 Bytes

Contents

module TogoStanza::Stanza
  module Grouping
    module_function

    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

    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
  end
end

Version data entries

31 entries across 31 versions & 1 rubygems

Version Path
togostanza-2.2.2 lib/togostanza/stanza/grouping.rb
togostanza-2.2.1 lib/togostanza/stanza/grouping.rb
togostanza-2.2.0 lib/togostanza/stanza/grouping.rb
togostanza-2.1.3 lib/togostanza/stanza/grouping.rb
togostanza-2.1.2 lib/togostanza/stanza/grouping.rb
togostanza-2.1.1 lib/togostanza/stanza/grouping.rb
togostanza-2.1.0 lib/togostanza/stanza/grouping.rb
togostanza-2.0.0 lib/togostanza/stanza/grouping.rb
togostanza-1.5.0 lib/togostanza/stanza/grouping.rb
togostanza-1.4.1 lib/togostanza/stanza/grouping.rb
togostanza-1.4.0 lib/togostanza/stanza/grouping.rb
togostanza-1.3.3 lib/togostanza/stanza/grouping.rb
togostanza-1.3.2 lib/togostanza/stanza/grouping.rb
togostanza-1.3.1 lib/togostanza/stanza/grouping.rb
togostanza-1.3.0 lib/togostanza/stanza/grouping.rb
togostanza-1.2.2 lib/togostanza/stanza/grouping.rb
togostanza-1.2.1 lib/togostanza/stanza/grouping.rb
togostanza-1.2.0 lib/togostanza/stanza/grouping.rb
togostanza-1.1.0 lib/togostanza/stanza/grouping.rb
togostanza-1.0.6 lib/togostanza/stanza/grouping.rb