Sha256: 7b9189fa8c4cf522c0a32228ec1b02d0f36f1a81d288e66736f8e734ac6da074
Contents?: true
Size: 1.43 KB
Versions: 1
Compression:
Stored size: 1.43 KB
Contents
require 'contributors_stats/reader' require 'contributors_stats/formatter' module ContributorsStats # Placeholder for user details resolution plugins module UserData end # Calculates statistics gathered from multiple sources class Calculator < Reader attr_accessor :user_data_type def initialize(options = {}) @user_data_type = options.delete(:user_data) if options[:user_data] super(options) end # 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] def format(type = :html, options = {}) ContributorsStats::Formatter.new(calculated_data, type, options) end private # group data, calculate contributions, sort by contributions 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 def contributions(data) data.map{|repo| repo['contributions'].to_i}.inject(&:+) end 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 end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
contributors_stats-1.0.0 | lib/contributors_stats/calculator.rb |