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