Sha256: 49b70cf84a778192da845f35967c27e01e66a65e293e6ba7b672be7cbc770805
Contents?: true
Size: 943 Bytes
Versions: 10
Compression:
Stored size: 943 Bytes
Contents
# frozen_string_literal: true module GitFame class Collector extend Dry::Initializer option :filter, type: Filter option :diff, type: Types::Any # @return [Collector] def call Result.new(contributions:) end private def contributions commits = Hash.new { |h, k| h[k] = Set.new } files = Hash.new { |h, k| h[k] = Set.new } lines = Hash.new(0) names = {} diff.each do |change| filter.call(change) do |loc, file, oid, name, email| commits[email].add(oid) files[email].add(file) names[email] = name lines[email] += loc end end lines.each_key.map do |email| Contribution.new({ lines: lines[email], commits: commits[email], files: files[email], author: { name: names[email], email: } }) end end end end
Version data entries
10 entries across 10 versions & 1 rubygems