Class: ChangeLog
- Inherits:
-
Object
- Object
- ChangeLog
- Defined in:
- lib/change_log.rb
Class Method Summary collapse
-
.help ⇒ Object
Class method to show how to use the API through Rake.
Instance Method Summary collapse
-
#initialize(user_and_repo, start_date = Date.today - 90, end_date = Date.today, apikey = nil) ⇒ ChangeLog
constructor
A new instance of ChangeLog.
- #print_issue(issue) ⇒ Object
- #print_issues ⇒ Object
-
#process ⇒ Object
Process Open Issues.
Constructor Details
#initialize(user_and_repo, start_date = Date.today - 90, end_date = Date.today, apikey = nil) ⇒ ChangeLog
Returns a new instance of ChangeLog.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/change_log.rb', line 12 def initialize(user_and_repo, start_date = Date.today - 90, end_date = Date.today, apikey = nil) @user_and_repo = user_and_repo @apikey = apikey @start_date = start_date @end_date = end_date # Convert dates to time objects @start_date = Time.parse(@start_date.to_s) if start_date.is_a? String @end_date = Time.parse(@end_date.to_s) if end_date.is_a? String # GitHub API uses Time and not the Date class, so ensure that we have Time @start_date = Time.parse(@start_date.to_s) @end_date = Time.parse(@end_date.to_s) @total_open_issues = [] @total_open_pull_requests = [] @new_issues = [] @closed_issues = [] @accepted_pull_requests = [] begin @github = Octokit::Client.new if apikey @github = Octokit::Client.new(access_token: apikey) end @github.auto_paginate = true rescue StandardError => e puts e. # write out the help message ChangeLog.help exit(1) end end |
Class Method Details
.help ⇒ Object
Class method to show how to use the API through Rake.
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/change_log.rb', line 46 def self.help puts 'Usage: bundle exec rake openstudio:change_log[<start_date>,<end_date>,<apikey>]' puts ' <start_date> = [Optional] Start of data (e.g., 2020-09-06), defaults to 90 days before today' puts ' <end_date> = [Optional] End of data (e.g., 2020-10-06), default to today' puts ' <apikey> = [Optional] GitHub API Key (used for private repos)' puts puts ' Ensure that the GitHub user/repo is set in your Rakefile, for example, ' puts " rake_task.set_extension_class(OpenStudio::Extension::Extension, 'nrel/openstudio-extension-gem')" puts puts ' Example usages:' puts ' bundle exec rake openstudio:change_log[2020-01-01]' puts ' bundle exec rake openstudio:change_log[2020-01-01,2020-06-30]' puts ' bundle exec rake openstudio:change_log[2020-01-01,2020-01-10,<private_api_key>]' puts puts ' Notes:' puts ' For creating token, see https://github.com/settings/tokens.' puts ' Note that if passing apikey, then you must pass start_date and end_date as well. There must be no spaces' puts ' between the arguments (see examples above).' end |
Instance Method Details
#print_issue(issue) ⇒ Object
102 103 104 105 106 107 108 109 110 111 |
# File 'lib/change_log.rb', line 102 def print_issue(issue) is_feature = false issue.labels.each { |label| is_feature = true if label.name == 'Feature Request' } if is_feature "- Improved [##{issue.number}]( #{issue.html_url} ), #{issue.title}" else "- Fixed [\##{issue.number}]( #{issue.html_url} ), #{issue.title}" end end |
#print_issues ⇒ Object
113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/change_log.rb', line 113 def print_issues puts "Total Open Issues: #{@total_open_issues.length}" puts "Total Open Pull Requests: #{@total_open_pull_requests.length}" puts "\nDate Range: #{@start_date.strftime('%m/%d/%y')} - #{@end_date.strftime('%m/%d/%y')}:" puts "\nNew Issues: #{@new_issues.length} (#{@new_issues.map(&:number).join(', ')})" puts "\nClosed Issues: #{@closed_issues.length}" @closed_issues.each { |issue| puts print_issue(issue) } puts "\nAccepted Pull Requests: #{@accepted_pull_requests.length}" @accepted_pull_requests.each { |issue| puts print_issue(issue) } puts "\nAll Open Issues: #{@total_open_issues.length} (" + @total_open_issues.map { |issue| "\##{issue.number}" }.join(', ') + ')' end |
#process ⇒ Object
Process Open Issues
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/change_log.rb', line 67 def process @github.list_issues(@user_and_repo, state: 'all').each do |issue| if issue.state == 'open' if issue.pull_request if issue.created_at >= @start_date && issue.created_at <= @end_date @total_open_pull_requests << issue end else @total_open_issues << issue if issue.created_at >= @start_date && issue.created_at <= @end_date @new_issues << issue end end else # the issue is closed if issue.closed_at >= @start_date && issue.closed_at <= @end_date if issue.pull_request @accepted_pull_requests << issue else @closed_issues << issue end end end end @closed_issues.sort! { |x, y| x.number <=> y.number } @new_issues.sort! { |x, y| x.number <=> y.number } @accepted_pull_requests.sort! { |x, y| x.number <=> y.number } @total_open_pull_requests.sort! { |x, y| x.number <=> y.number } rescue StandardError => e puts e. ChangeLog.help exit(1) end |