class ContributorsStats::Calculator

Calculates statistics gathered from multiple sources

Attributes

user_data_type[RW]

Public Class Methods

new(options = {}) click to toggle source
Calls superclass method
# File lib/contributors_stats/calculator.rb, line 14
def initialize(options = {})
  @user_data_type = options.delete(:user_data) if options[:user_data]
  super(options)
end

Public Instance Methods

format(type = :html, options = {}) click to toggle source

transform calculated data into asked format @param type [String] name of plugin to use for formatting @param options [Hash] list of options for the plugin to use @return [ContributorsStats::Formatter]

# File lib/contributors_stats/calculator.rb, line 23
def format(type = :html, options = {})
  ContributorsStats::Formatter.new(calculated_data, type, options)
end

Private Instance Methods

calculated_data() click to toggle source

group data, calculate contributions, sort by contributions

# File lib/contributors_stats/calculator.rb, line 30
def calculated_data
  @data ||= @raw_data.group_by { |contributor|
    contributor['login']
  }.map {|login, data|
    log "user: #{login}"
    [login, user_data(login, data)]
  }.sort_by{|login, data|
    [1000000/data['contributions'], login]
  }
end
contributions(data) click to toggle source
# File lib/contributors_stats/calculator.rb, line 41
def contributions(data)
  data.map{|repo| repo['contributions'].to_i}.inject(&:+)
end
user_data(login, data) click to toggle source
# File lib/contributors_stats/calculator.rb, line 45
def user_data(login, data)
  @user_data_plugin ||= plugins.first_class!("user_data", user_data_type || :simple)
  @user_data_plugin.load(login, data.first, contributions(data))
end