module Octokit::Client::Stats

Methods for the Repository Statistics API

@see developer.github.com/v3/repos/statistics/

Public Instance Methods

code_frequency_stats(repo, options = {}) click to toggle source

Get the number of additions and deletions per week

@param repo [Integer, String, Hash, Repository] A GitHub repository @option retry_timeout [Number] How long Octokit should keep trying to get stats (in seconds) @option retry_wait [Number] How long Octokit should wait between retries. @return [Array<Sawyer::Resource>] Weekly aggregate of the number of additions

and deletions pushed to a repository.

@see developer.github.com/v3/repos/statistics/#get-the-number-of-additions-and-deletions-per-week @example Get code frequency stats for octokit

@client.code_frequency_stats('octokit/octokit.rb')
# File lib/octokit/client/stats.rb, line 47
def code_frequency_stats(repo, options = {})
  get_stats(repo, "code_frequency", options)
end
commit_activity_stats(repo, options = {}) click to toggle source

Get the last year of commit activity data

@param repo [Integer, String, Hash, Repository] A GitHub repository @option retry_timeout [Number] How long Octokit should keep trying to get stats (in seconds) @option retry_wait [Number] How long Octokit should wait between retries. @return [Array<Sawyer::Resource>] The last year of commit activity grouped by

week. The days array is a group of commits per day, starting on Sunday.

@see developer.github.com/v3/repos/statistics/#get-the-last-year-of-commit-activity-data @example Get commit activity for octokit

@client.commit_activity_stats('octokit/octokit.rb')
# File lib/octokit/client/stats.rb, line 33
def commit_activity_stats(repo, options = {})
  get_stats(repo, "commit_activity", options)
end
contributor_stats(repo, options = {})
Alias for: contributors_stats
contributors_stats(repo, options = {}) click to toggle source

Get contributors list with additions, deletions, and commit counts

@param repo [Integer, String, Hash, Repository] A GitHub repository @option retry_timeout [Number] How long Octokit should keep trying to get stats (in seconds) @option retry_wait [Number] How long Octokit should wait between retries. @return [Array<Sawyer::Resource>] Array of contributor stats @see developer.github.com/v3/repos/statistics/#get-contributors-list-with-additions-deletions-and-commit-counts @example Get contributor stats for octokit

@client.contributors_stats('octokit/octokit.rb')
# File lib/octokit/client/stats.rb, line 18
def contributors_stats(repo, options = {})
  get_stats(repo, "contributors", options)
end
Also aliased as: contributor_stats
participation_stats(repo, options = {}) click to toggle source

Get the weekly commit count for the repo owner and everyone else

@param repo [Integer, String, Hash, Repository] A GitHub repository @option retry_timeout [Number] How long Octokit should keep trying to get stats (in seconds) @option retry_wait [Number] How long Octokit should wait between retries. @return [Sawyer::Resource] Total commit counts for the owner and total commit

counts in all. all is everyone combined, including the owner in the last
52 weeks. If you’d like to get the commit counts for non-owners, you can
subtract all from owner.

@see developer.github.com/v3/repos/statistics/#get-the-weekly-commit-count-for-the-repository-owner-and-everyone-else @example Get weekly commit counts for octokit

@client.participation_stats("octokit/octokit.rb")
# File lib/octokit/client/stats.rb, line 63
def participation_stats(repo, options = {})
  get_stats(repo, "participation", options)
end
punch_card(repo, options = {})
Alias for: punch_card_stats
punch_card_stats(repo, options = {}) click to toggle source

Get the number of commits per hour in each day

@param repo [Integer, String, Hash, Repository] A GitHub repository @option retry_timeout [Number] How long Octokit should keep trying to get stats (in seconds) @option retry_wait [Number] How long Octokit should wait between retries. @return [Array<Array>] Arrays containing the day number, hour number, and

number of commits

@see developer.github.com/v3/repos/statistics/#get-the-number-of-commits-per-hour-in-each-day @example Get octokit punch card

@octokit.punch_card_stats
# File lib/octokit/client/stats.rb, line 77
def punch_card_stats(repo, options = {})
  get_stats(repo, "punch_card", options)
end
Also aliased as: punch_card

Private Instance Methods

get_stats(repo, metric, options = {}) click to toggle source

@private Get stats for a repository

@param repo [Integer, String, Hash, Repository] A GitHub repository @param metric [String] The metrics you are looking for @return [Array<Sawyer::Resource> or nil] Stats in metric-specific format, or nil if not yet calculated. @see developer.github.com/v3/repos/statistics/

# File lib/octokit/client/stats.rb, line 90
def get_stats(repo, metric, options = {})
  options = options.dup
  if retry_timeout = options.delete(:retry_timeout)
    retry_wait = options.delete(:retry_wait) || 0.5
    timeout = Time.now + retry_timeout
  end
  loop do
    data = get("#{Repository.path repo}/stats/#{metric}", options)
    return data if last_response.status == 200
    return [] if last_response.status == 204
    return nil unless retry_timeout
    return nil if Time.now >= timeout
    sleep retry_wait if retry_wait
  end
end