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.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/change_log.rb', line 42 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.
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/change_log.rb', line 76 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
132 133 134 135 136 137 138 139 140 141 |
# File 'lib/change_log.rb', line 132 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
143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/change_log.rb', line 143 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
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/change_log.rb', line 97 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 |