class Gigest::Analytics
Attributes
account_details[R]
Public Class Methods
new(auth_params={})
click to toggle source
# File lib/gigest/analytics.rb, line 5 def initialize(auth_params={}) @connection = GithubConnection.new(auth_params) end
Public Instance Methods
all_repositories()
click to toggle source
# File lib/gigest/analytics.rb, line 18 def all_repositories @repositories end
all_repositories_with_gemfile()
click to toggle source
# File lib/gigest/analytics.rb, line 22 def all_repositories_with_gemfile all_repositories.select(&:has_gemfile?) end
analyzable?(account)
click to toggle source
# File lib/gigest/analytics.rb, line 9 def analyzable?(account) @connection.exists?(account) end
fork_repositories()
click to toggle source
# File lib/gigest/analytics.rb, line 34 def fork_repositories all_repositories.select(&:fork?) end
fork_repositories_with_gemfile()
click to toggle source
# File lib/gigest/analytics.rb, line 38 def fork_repositories_with_gemfile fork_repositories.select(&:has_gemfile?) end
process_for(account)
click to toggle source
# File lib/gigest/analytics.rb, line 13 def process_for(account) @account_details = @connection.details_for(account) @repositories = @connection.repositories_for(account) end
source_repositories()
click to toggle source
# File lib/gigest/analytics.rb, line 26 def source_repositories all_repositories.reject(&:fork?) end
source_repositories_with_gemfile()
click to toggle source
# File lib/gigest/analytics.rb, line 30 def source_repositories_with_gemfile source_repositories.select(&:has_gemfile?) end
statistics(type=:all)
click to toggle source
Returns statistic (sorted desc by count) Assuming GitHub user/org only has repo1 and repo2 [
{gem_name: gem1, repositories: ["repo1", "repo2"], count: 2, percentage: 100.0}, {gem_name: gem2, repositories: ["repo1"], count: 1, percentage: 50.0}
]
# File lib/gigest/analytics.rb, line 66 def statistics(type=:all) raise "Please specify GitHub account to analyse by invoking #process_for(account) method first!" if all_repositories.nil? repos_summary = summary(type) repo_type_count = get_repositories(type).count repos_summary.map do |gem, repos| { gem_name: gem, repositories: repos, count: repos.count, percentage: percentage(repos.count, repo_type_count) } end .sort_by { |statistic| statistic[:count] }.reverse end
summary(type=:all)
click to toggle source
Returns summary Assuming GitHub user/org only has repo1 and repo2 {
gem1: [repo1, repo2], gem2: [repo1, repo2]
}
# File lib/gigest/analytics.rb, line 48 def summary(type=:all) raise "Please specify GitHub account to analyse by invoking #process_for(account) method first!" if all_repositories.nil? get_repositories(type).reduce({}) do |summary, repository| repository.gems.each do |gem| summary[gem] ||= [] summary[gem] << repository.name unless summary[gem].include?(repository.name) end summary end end
Private Instance Methods
get_repositories(type)
click to toggle source
# File lib/gigest/analytics.rb, line 85 def get_repositories(type) send("#{type}_repositories_with_gemfile") end
percentage(numerator, denominator)
click to toggle source
# File lib/gigest/analytics.rb, line 89 def percentage(numerator, denominator) (numerator.to_f / denominator.to_f * 100).round(2) end