Module: Ace::Git::Atoms::FileGrouper
- Defined in:
- lib/ace/git/atoms/file_grouper.rb
Overview
Group parsed numstat entries by package/layer/root buckets.
Constant Summary collapse
- DEFAULT_LAYERS =
%w[lib test handbook].freeze
Class Method Summary collapse
Class Method Details
.group(entries, layers: DEFAULT_LAYERS, dotfile_groups: []) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/ace/git/atoms/file_grouper.rb', line 11 def group(entries, layers: DEFAULT_LAYERS, dotfile_groups: []) normalized_layers = Array(layers).map(&:to_s) groups = {} Array(entries).each do |entry| group_key, layer_key, display_path = classify(entry, normalized_layers) groups[group_key] ||= initialize_group(group_key) group = groups[group_key] group[:layers][layer_key] ||= initialize_layer(layer_key) normalized_entry = entry.merge(display_path: display_path) add_to_group(group, group[:layers][layer_key], normalized_entry) end ordered_groups = sort_groups(groups.values, dotfile_groups) ordered_groups.each { |group| group[:layers] = sort_layers(group[:layers], normalized_layers) } { groups: ordered_groups, total: { additions: ordered_groups.sum { |g| g[:additions] }, deletions: ordered_groups.sum { |g| g[:deletions] }, files: ordered_groups.sum { |g| g[:file_count] } }, files: ordered_groups.flat_map { |g| g[:layers].flat_map { |l| l[:files].map { |f| f[:path] } } } } end |