module Gitlang::GithubStats

Module for extracting useful Github statistics.

Public Instance Methods

absolute_usage_per_language(usage_per_repo) click to toggle source

Creates a hash with the absolute usage for each language.

@param usage_per_repo [Array<Hash>]

@example

absolute_usage_per_language([{ python: 4, ruby: 2 }, { python: 3 }])
# File lib/gitlang/github_stats.rb, line 13
def absolute_usage_per_language(usage_per_repo)
  usage_per_repo.each_with_object(Hash.new(0)) do |repository, total|
    repository.each { |language, usage| total[language] += usage }
  end
end
relative_usage_per_language(usage_per_repo) click to toggle source

Creates a hash with the relative usage for each language.

@param usage_per_repo [Array<Hash>]

@example

relative_usage_per_language([{ python: 30, ruby: 70 }, { python: 100 }])
# File lib/gitlang/github_stats.rb, line 25
def relative_usage_per_language(usage_per_repo)
  absolute_usage = absolute_usage_per_language(usage_per_repo)
  total = absolute_usage.values.inject(&:+)
  results_pre_lare = absolute_usage.merge(absolute_usage) do |_, usage|
    (BigDecimal.new(usage) / total * 100)
  end

  return results_pre_lare if results_pre_lare.empty?

  # Largest remainder method is used in order to avoid cases where the sum
  # of the relative usage is over or under 100%.
  # More info at https://en.wikipedia.org/wiki/Largest_remainder_method.
  results_after_lare = LareRound.round(results_pre_lare, 2)
  results_after_lare.merge(results_after_lare) { |_, usage| usage.to_f }
end