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