openstudio-extension 0.2.0 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4d0b42ef4c9c5ee88e2e750956e7147ec1971614d9bc46b0f8926332937aabbb
4
- data.tar.gz: 2177f877389dcc3587c575f361d10d0228269d875c59f22ba7f03bd5fa829d06
3
+ metadata.gz: 75c383235ef747996dd9484f715ab090201aeae62521c44f7166e4664057c83b
4
+ data.tar.gz: dc5e71c966b27041394772057b6c2625a735d34e6f1864e39d46378483743f3e
5
5
  SHA512:
6
- metadata.gz: a6796c88ae5bdd6a269377c4d9845421aa36318f60297dc55bba600f4ebc83143f0ed21fbae5d6ea0c1c05be3363dfdc97f4109866959070fb86dcbe27174dbe
7
- data.tar.gz: a96dd4fc093da1528f39b4401b0cab6a0ca195877dd979ace7e285fdb83674b19885a901f5df8d18c77a3a37a19f40a4683bbdf82e3181df4e575bb92dec97b5
6
+ metadata.gz: 0bca71f3d261ddd15966a690859f01c5c6344259e96069f844ebf0da0bd395c18d79d6d8e48a680faa74a627e30aae38833c00a4c3ae3f29dfd8f4f47a2499b8
7
+ data.tar.gz: b50492d24de160505451599128ee177289ceac185bfd9ea560cd2447683ecef7c569699f59094c6b531feaf61810c18e027c0aa8ab11b2c9f9b3748a3fae4ee4
data/.gitignore CHANGED
@@ -13,6 +13,8 @@
13
13
  /test/
14
14
  /lib/measures/test_results
15
15
  /lib/measures/.rubocop*
16
+ /lib/measures/staged
17
+ /lib/measures/staged/*
16
18
 
17
19
  # rspec failure tracking
18
20
  .rspec_status
@@ -6,5 +6,5 @@ AllCops:
6
6
  - lib/openstudio/extension/core/**/*
7
7
 
8
8
  inherit_from:
9
- - http://s3.amazonaws.com/openstudio-resources/styles/rubocop.yml
9
+ - http://s3.amazonaws.com/openstudio-resources/styles/rubocop_v3.yml
10
10
 
@@ -1,11 +1,55 @@
1
1
  # OpenStudio Extension Gem
2
2
 
3
+ ## Version 0.2.5
4
+
5
+ * Support runner options for bundle_install_path and gemfile_path
6
+ * Laboratory and Data Center Support
7
+
8
+ - Fixed [#71]( https://github.com/NREL/openstudio-extension-gem/pull/71 ), another fix for bcl rake tasks
9
+ - Fixed [#72]( https://github.com/NREL/openstudio-extension-gem/pull/72 ), Add laboratory and data centers to os_lib_model_generation
10
+ - Fixed [#74]( https://github.com/NREL/openstudio-extension-gem/pull/74 ), adding bundle path and gemfile path options
11
+
12
+ ## Version 0.2.4
13
+
14
+ * Fixed upload of measures to BCL using rake tasks.
15
+ * Support economizer modeling when create_typical measure is split into two parts
16
+
17
+ Closed Issues: 1
18
+ - Fixed [#64]( https://github.com/NREL/openstudio-extension-gem/issues/64 ), README updates
19
+
20
+ ## Version 0.2.3
21
+
22
+ * Use new version of rubocop style from S3
23
+ * Remove frozen string literals in comments
24
+
25
+ ## Version 0.2.2
26
+
27
+ * Exclude measure tests from being released with the gem (reduces the size of the installed gem significantly)
28
+ * Add BCL commands to upload measures
29
+ * Update GitHub changelog gem to use Octokit compared to github_api (which was last released 3 years ago)
30
+ * Promote GitHub changelog creation to a rake task to be inherited by all downstream extension gems
31
+
32
+ ## Version 0.2.1
33
+
34
+ * Changes from 0.1.5 (runner.conf bug)
35
+ * Changes from 0.1.6 (update core library)
36
+ * Update measure tester to 0.2.2 (with Rubocop 0.54)
37
+
3
38
  ## Version 0.2.0
4
39
 
5
40
  * Upgrade Bundler to 2.1.x
6
41
  * Restrict to Ruby ~> 2.5.0
7
42
  * Remove json_pure gem
8
43
  * Update measure tester to 0.2.0 (removes need for github checkout)
44
+ * Note that this version does not include the changes from Version 0.1.5
45
+
46
+ ## Version 0.1.6
47
+
48
+ * Update core library methods with what was in OpenStudio-measures
49
+
50
+ ## Version 0.1.5
51
+
52
+ * Fix bug to respect the runner.conf file when using Extension::Runner with no options
9
53
 
10
54
  ## Version 0.1.4
11
55
 
@@ -25,4 +69,4 @@
25
69
 
26
70
  ## Version 0.1.1
27
71
 
28
- * Initial release
72
+ * Initial release
@@ -1,10 +1,10 @@
1
- //Jenkins pipelines are stored in shared libaries. Please see: https://github.com/tijcolem/nrel_cbci_jenkins_libs
1
+ //Jenkins pipelines are stored in shared libaries. Please see: https://github.com/NREL/cbci_jenkins_libs
2
2
 
3
3
  @Library('cbci_shared_libs') _
4
4
 
5
5
  // Build for PR to develop branch only.
6
6
  if ((env.CHANGE_ID) && (env.CHANGE_TARGET) ) { // check if set
7
7
 
8
- openstudio_extension_gems_3_x()
8
+ openstudio_extension_gems()
9
9
 
10
10
  }
data/README.md CHANGED
@@ -31,27 +31,27 @@ Each OpenStudio extension gem should define its own module name to ensure that t
31
31
 
32
32
  ## Installation
33
33
 
34
- To use this and other extension gems, you will need Ruby 2.2.4 and OpenStudio 2.7.1 or greater.
34
+ To use this and other extension gems, you will need Ruby 2.5.x and OpenStudio 3.0.0 or greater.
35
35
 
36
36
  ### Windows Installation
37
- Install Ruby using the [RubyInstaller](https://rubyinstaller.org/downloads/archives/) for [Ruby 2.2.4 (x64)](https://dl.bintray.com/oneclick/rubyinstaller/rubyinstaller-2.2.4-x64.exe).
37
+ Install Ruby using the [RubyInstaller](https://rubyinstaller.org/downloads/archives/) for [Ruby 2.5.5 (x64)](https://dl.bintray.com/oneclick/rubyinstaller/rubyinstaller-2.5.5-x64.exe).
38
38
 
39
39
  Install Devkit using the [mingw64](https://dl.bintray.com/oneclick/rubyinstaller/DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe) installer.
40
40
 
41
- Check the ruby installation returns the correct Ruby version (2.2.4):
41
+ Check the ruby installation returns the correct Ruby version (2.5.x):
42
42
  ```
43
43
  ruby -v
44
44
  ```
45
45
 
46
46
  Install bundler from the command line
47
47
  ```
48
- gem install bundler -v 1.17
48
+ gem install bundler -v 2.1
49
49
  ```
50
50
 
51
- Install OpenStudio. Create a file ```C:\ruby-2.2.4-x64-mingw32\lib\ruby\site_ruby\openstudio.rb``` and point it to your OpenStudio installation by editing the contents. E.g.:
51
+ Install OpenStudio. Create a file ```C:\ruby-2.5.5-x64-mingw32\lib\ruby\site_ruby\openstudio.rb``` and point it to your OpenStudio installation by editing the contents. E.g.:
52
52
 
53
53
  ```ruby
54
- require 'C:\openstudio-2.7.1\Ruby\openstudio.rb'
54
+ require 'C:\openstudio-3.0.0\Ruby\openstudio.rb'
55
55
  ```
56
56
 
57
57
  Verify your OpenStudio and Ruby configuration:
@@ -65,19 +65,20 @@ rbenv can be installed via [Homebrew](https://brew.sh/):
65
65
  ```
66
66
  brew install rbenv
67
67
  rbenv init
68
- rbenv install 2.2.4
68
+ rbenv install 2.5.5
69
69
  ```
70
70
 
71
71
  Also install bundler
72
72
  ```
73
- gem install bundler -v 1.17
73
+ gem install bundler -v 2.1
74
74
  ```
75
75
 
76
76
  Install [OpenStudio](https://www.openstudio.net/downloads).
77
77
 
78
- Add the RUBYLIB environment variable to your `bash_profile` (or similar) file. It should point to the Ruby folder within the OpenStudio Application you just downloaded (replace 2.7.2 with the version you are using):
78
+ Add the RUBYLIB environment variable to your `bash_profile` (or similar) file. It should point to the Ruby folder within
79
+ the OpenStudio Application you just downloaded (replace 3.0.0 with the version you are using):
79
80
  ```
80
- export RUBYLIB=/Applications/OpenStudio-2.7.2/Ruby
81
+ export RUBYLIB=/Applications/OpenStudio-3.0.0/Ruby
81
82
  ```
82
83
 
83
84
 
@@ -145,14 +146,17 @@ Common Rake Tasks that are available to derivative extension gems include:
145
146
 
146
147
  | Rake Task | Description |
147
148
  | --------- | ----------- |
149
+ | openstudio:bcl:test_login | Test BCL login |
150
+ | openstudio:bcl:search_measures | Search BCL |
151
+ | openstudio:bcl:stage[reset] | Copy the measures/components to a staging location |
152
+ | openstudio:bcl:push | Upload measures from the staging location |
153
+ | openstudio:change_log[start_date,end_date,apikey] | Print the change log from GitHub. Specify dates in yyyy-mm-dd format |
148
154
  | openstudio:list_measures | List all measures in the calling gem |
149
155
  | openstudio:measures:add_license | Add License File to measures in the calling gem |
150
156
  | openstudio:measures:add_readme | Add README.md.erb file if it and the README markdown file do not already exist for a measure |
151
157
  | openstudio:measures:copy_resources | Copy the resources files to individual measures in the calling gem |
152
158
  | openstudio:measures:update_copyright | Update copyright on measure files in the calling gem |
153
- | openstudio`:runner:`init | Create a runner.conf file running simulations |
154
- | openstudio:stage_bcl | Copy the measures to a location that can be uploaded to BCL |
155
- | openstudio:push_bcl | Upload measures from the specified location to the BCL |
159
+ | openstudio`:runner:`init | Create a runner.conf file running simulations |
156
160
  | openstudio:test_with_docker | Use openstudio docker image to run tests |
157
161
  | openstudio:test_with_openstudio | Use openstudio system ruby to run tests |
158
162
  | openstudio:update_measures | Run the CLI task to check for measure updates and update the measure xml files |
@@ -175,8 +179,12 @@ The following table contains all current extension gems.
175
179
  | OpenStudio Common Measures Gem | openstudio-common-measures | https://github.com/NREL/openstudio-common-measures-gem |
176
180
  | OpenStudio Model Articulation Gem | openstudio-model-articulation | https://github.com/NREL/openstudio-model-articulation-gem |
177
181
  | OpenStudio AEDG Gem | openstudio-aedg | https://github.com/NREL/openstudio-aedg-gem |
182
+ | OpenStudio Calibration Gem | openstudio-calibration | https://github.com/NREL/openstudio-calibration-gem |
183
+ | OpenStudio EE Gem | openstudio-ee | https://github.com/NREL/openstudio-ee-gem |
178
184
  | OpenStudio District Systems Gem | openstudio-district-systems | https://github.com/NREL/openstudio-district-systems-gem |
179
- | UrbanOpt GeoJSON Gem | urbanopt-geojson | https://github.com/urbanopt/urbanopt-geojson-gem |
185
+ | URBANopt Core Gem | urbanopt-core | https://github.com/urbanopt/urbanopt-core-gem |
186
+ | URBANopt GeoJSON Gem | urbanopt-geojson | https://github.com/urbanopt/urbanopt-geojson-gem |
187
+ | URBANopt Scenario Gem | urbanopt-scenario | https://github.com/urbanopt/urbanopt-scenario-gem |
180
188
  | BuildingSync Gem | buildingsync | https://github.com/BuildingSync/BuildingSync-gem |
181
189
 
182
190
  ### Initializing a new Extension Gem
@@ -235,22 +243,8 @@ Or install it yourself as:
235
243
 
236
244
  # TODO
237
245
 
238
- - [X] Finalize documentation on naming conventions, etc
239
- - [X] Add test measure
240
- - [X] Rake task ```openstudio:update_measures```
241
- - [X] Rake task ```openstudio:test_with_openstudio```
242
- - [ ] Rake task ```stage_bcl``` _DLM: BCL gem should be a development dependency only until we can reduce its dependencies and remove native dependencies? should probably put it into a special group so we can bundle without it in openstudio-gems._
243
- - [ ] Rake task ```push_bcl``` _DLM: how do we want to test this?
244
- - [X] Get all rake tasks working on Travis
245
246
  - [ ] Capture useful output from Travis (measure dashboard results, log files, zip of build products, etc) and put it somewhere (s3? naming convention?)
246
- - [X] ```Extension::openstudio_extension_version``` _DLM: should we rename? should people overwrite this in their class?_
247
- - [X] ```Extension::measures_dir``` _DLM: I think this can have a default implementation, right? If something does not need to be overridden should it be a module method rather than a class one? KAF: this is in rake task for now
248
- - [X] ```Extension::list_measures``` _DLM: I think this can have a default implementation, right?_KAF: In Rake task for now
249
247
  - [ ] ```Extension::files_dir``` _DLM: I think this can have a default implementation, right?_
250
248
  - [ ] ```Extension::minimum_openstudio_version``` _DLM: should we rename? should people overwrite this in their class?_
251
- - [X] ```Runner::initialize``` _DLM: should say that the path argument should be for a dir with a Gemfile right?_
252
- - [X] ```Runner::configure_osw``` _DLM: should take in an OSW, add paths to all measure and file dirs for loaded OpenStudio Extensions, write out configured OSW_
253
- - [ ] Run rubocop on all of the core files and remove exclusion from .rubocop.yml file.
254
249
  - [ ] Cleanup task after running tests (may need to be in the OpenStudio Measure Tester)
255
- - [X] Add a `rake init new_ext_gem` to Rakefile
256
250
  - [ ] Add tests to the extension/core
data/Rakefile CHANGED
@@ -34,7 +34,7 @@ RSpec::Core::RakeTask.new(:spec)
34
34
  require 'openstudio/extension/rake_task'
35
35
  require 'openstudio/extension'
36
36
  rake_task = OpenStudio::Extension::RakeTask.new
37
- rake_task.set_extension_class(OpenStudio::Extension::Extension)
37
+ rake_task.set_extension_class(OpenStudio::Extension::Extension, 'nrel/openstudio-extension-gem')
38
38
 
39
39
  require 'rubocop/rake_task'
40
40
  RuboCop::RakeTask.new
@@ -1,147 +1,157 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'github_api'
1
+ # *******************************************************************************
2
+ # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
3
+ # All rights reserved.
4
+ # Redistribution and use in source and binary forms, with or without
5
+ # modification, are permitted provided that the following conditions are met:
6
+ #
7
+ # (1) Redistributions of source code must retain the above copyright notice,
8
+ # this list of conditions and the following disclaimer.
9
+ #
10
+ # (2) Redistributions in binary form must reproduce the above copyright notice,
11
+ # this list of conditions and the following disclaimer in the documentation
12
+ # and/or other materials provided with the distribution.
13
+ #
14
+ # (3) Neither the name of the copyright holder nor the names of any contributors
15
+ # may be used to endorse or promote products derived from this software without
16
+ # specific prior written permission from the respective party.
17
+ #
18
+ # (4) Other than as required in clauses (1) and (2), distributions in any form
19
+ # of modifications or other derivative works may not use the "OpenStudio"
20
+ # trademark, "OS", "os", or any other confusingly similar designation without
21
+ # specific prior written permission from Alliance for Sustainable Energy, LLC.
22
+ #
23
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
24
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
25
+ # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
27
+ # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
28
+ # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
29
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
30
+ # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
32
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33
+ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
+ # *******************************************************************************
35
+
36
+ require 'octokit'
4
37
  require 'date'
5
38
  require 'optparse'
6
39
  require 'optparse/date'
7
40
 
8
- # Instructions:
9
- # Get a token from github's settings (https://github.com/settings/tokens)
10
- #
11
- # Example:
12
- # ruby change_log.rb -t abcdefghijklmnopqrstuvwxyz -s 2017-09-06
13
- #
14
-
15
- options = {}
16
- OptionParser.new do |opts|
17
- opts.banner = "Usage: change_log.rb [options]\n" +
18
- "Prints New, Open, Closed Issues, and number of accepted PRs"
19
- opts.separator ""
20
-
21
- # defaults, go back 90 days
22
- options[:start_date] = Date.today - 90
23
- options[:end_date] = Date.today
24
-
25
- opts.on('-s', '--start-date [DATE]', Date, 'Start of data (e.g. 2017-09-06)') do |v|
26
- options[:start_date] = v
27
- end
28
- opts.on('-e', '--end-date [DATE]', Date, 'End of data (e.g. 2017-09-13)') do |v|
29
- options[:end_date] = v
30
- end
31
- opts.on('-t', '--token [String]', String, 'Github API Token') do |v|
32
- options[:token] = v
41
+ class ChangeLog
42
+ def initialize(user_and_repo, start_date = Date.today - 90, end_date = Date.today, apikey = nil)
43
+ @user_and_repo = user_and_repo
44
+ @apikey = apikey
45
+ @start_date = start_date
46
+ @end_date = end_date
47
+
48
+ # Convert dates to time objects
49
+ @start_date = Time.parse(@start_date.to_s) if start_date.is_a? String
50
+ @end_date = Time.parse(@end_date.to_s) if end_date.is_a? String
51
+ # GitHub API uses Time and not the Date class, so ensure that we have Time
52
+ @start_date = Time.parse(@start_date.to_s)
53
+ @end_date = Time.parse(@end_date.to_s)
54
+
55
+ @total_open_issues = []
56
+ @total_open_pull_requests = []
57
+ @new_issues = []
58
+ @closed_issues = []
59
+ @accepted_pull_requests = []
60
+
61
+ begin
62
+ @github = Octokit::Client.new
63
+ if apikey
64
+ @github = Octokit::Client.new(access_token: apikey)
65
+ end
66
+ @github.auto_paginate = true
67
+ rescue StandardError => e
68
+ puts e.message
69
+ # write out the help message
70
+ ChangeLog.help
71
+ exit(1)
72
+ end
33
73
  end
34
- end.parse!
35
-
36
- # Convert dates to time objects
37
- options[:start_date] = Time.parse(options[:start_date].to_s)
38
- options[:end_date] = Time.parse(options[:end_date].to_s)
39
- puts options
40
74
 
41
- ### Repository options
42
- repo_owner = 'NREL'
43
- repo = 'openstudio-extension-gem'
44
-
45
- github = Github.new
46
- if options[:token]
47
- puts 'Using github token'
48
- github = Github.new oauth_token: options[:token]
49
- end
50
-
51
- total_open_issues = []
52
- total_open_pull_requests = []
53
- new_issues = []
54
- closed_issues = []
55
- accepted_pull_requests = []
56
-
57
- def get_num(issue)
58
- issue.html_url.split('/')[-1].to_i
59
- end
60
-
61
- def get_issue_num(issue)
62
- "\##{get_num(issue)}"
63
- end
64
-
65
- def get_html_url(issue)
66
- issue.html_url
67
- end
68
-
69
- def get_title(issue)
70
- issue.title
71
- end
72
-
73
- def print_issue(issue)
74
- is_feature = false
75
- issue.labels.each { |label| is_feature = true if label.name == 'Feature Request' }
76
-
77
- if is_feature
78
- "- Improved [#{get_issue_num(issue)}]( #{get_html_url(issue)} ), #{get_title(issue)}"
79
- else
80
- "- Fixed [#{get_issue_num(issue)}]( #{get_html_url(issue)} ), #{get_title(issue)}"
75
+ # Class method to show how to use the API through Rake.
76
+ def self.help
77
+ puts 'Usage: bundle exec rake openstudio:change_log[<start_date>,<end_date>,<apikey>]'
78
+ puts ' <start_date> = [Optional] Start of data (e.g., 2020-09-06), defaults to 90 days before today'
79
+ puts ' <end_date> = [Optional] End of data (e.g., 2020-10-06), default to today'
80
+ puts ' <apikey> = [Optional] GitHub API Key (used for private repos)'
81
+ puts
82
+ puts ' Ensure that the GitHub user/repo is set in your Rakefile, for example, '
83
+ puts " rake_task.set_extension_class(OpenStudio::Extension::Extension, 'nrel/openstudio-extension-gem')"
84
+ puts
85
+ puts ' Example usages:'
86
+ puts ' bundle exec rake openstudio:change_log[2020-01-01]'
87
+ puts ' bundle exec rake openstudio:change_log[2020-01-01,2020-06-30]'
88
+ puts ' bundle exec rake openstudio:change_log[2020-01-01,2020-01-10,<private_api_key>]'
89
+ puts
90
+ puts ' Notes:'
91
+ puts ' For creating token, see https://github.com/settings/tokens.'
92
+ puts ' Note that if passing apikey, then you must pass start_date and end_date as well. There must be no spaces'
93
+ puts ' between the arguments (see examples above).'
81
94
  end
82
- end
83
95
 
84
- # Process Open Issues
85
- results = -1
86
- page = 1
87
- while results != 0
88
- resp = github.issues.list user: repo_owner, repo: repo, sort: 'created', direction: 'asc',
89
- state: 'open', per_page: 100, page: page
90
- results = resp.length
91
- resp.env[:body].each do |issue, _index|
92
- created = Time.parse(issue.created_at)
93
- if !issue.key?(:pull_request)
94
- total_open_issues << issue
95
- if created >= options[:start_date] && created <= options[:end_date]
96
- new_issues << issue
96
+ # Process Open Issues
97
+ def process
98
+ @github.list_issues(@user_and_repo, state: 'all').each do |issue|
99
+ if issue.state == 'open'
100
+ if issue.pull_request
101
+ if issue.created_at >= @start_date && issue.created_at <= @end_date
102
+ @total_open_pull_requests << issue
103
+ end
104
+ else
105
+ @total_open_issues << issue
106
+ if issue.created_at >= @start_date && issue.created_at <= @end_date
107
+ @new_issues << issue
108
+ end
109
+ end
110
+ else
111
+ # the issue is closed
112
+ if issue.closed_at >= @start_date && issue.closed_at <= @end_date
113
+ if issue.pull_request
114
+ @accepted_pull_requests << issue
115
+ else
116
+ @closed_issues << issue
117
+ end
118
+ end
97
119
  end
98
- else
99
- total_open_pull_requests << issue
100
120
  end
121
+
122
+ @closed_issues.sort! { |x, y| x.number <=> y.number }
123
+ @new_issues.sort! { |x, y| x.number <=> y.number }
124
+ @accepted_pull_requests.sort! { |x, y| x.number <=> y.number }
125
+ @total_open_pull_requests.sort! { |x, y| x.number <=> y.number }
126
+ rescue StandardError => e
127
+ puts e.message
128
+ ChangeLog.help
129
+ exit(1)
101
130
  end
102
131
 
103
- page += 1
104
- end
132
+ def print_issue(issue)
133
+ is_feature = false
134
+ issue.labels.each { |label| is_feature = true if label.name == 'Feature Request' }
105
135
 
106
- # Process Closed Issues
107
- results = -1
108
- page = 1
109
- while results != 0
110
- resp = github.issues.list user: repo_owner, repo: repo, sort: 'created', direction: 'asc',
111
- state: 'closed', per_page: 100, page: page
112
- results = resp.length
113
- resp.env[:body].each do |issue, _index|
114
- created = Time.parse(issue.created_at)
115
- closed = Time.parse(issue.closed_at)
116
- if !issue.key?(:pull_request)
117
- if created >= options[:start_date] && created <= options[:end_date]
118
- new_issues << issue
119
- end
120
- if closed >= options[:start_date] && closed <= options[:end_date]
121
- closed_issues << issue
122
- end
123
- elsif closed >= options[:start_date] && closed <= options[:end_date]
124
- accepted_pull_requests << issue
136
+ if is_feature
137
+ "- Improved [##{issue.number}]( #{issue.html_url} ), #{issue.title}"
138
+ else
139
+ "- Fixed [\##{issue.number}]( #{issue.html_url} ), #{issue.title}"
125
140
  end
126
141
  end
127
142
 
128
- page += 1
129
- end
130
-
131
- closed_issues.sort! { |x, y| get_num(x) <=> get_num(y) }
132
- new_issues.sort! { |x, y| get_num(x) <=> get_num(y) }
133
- accepted_pull_requests.sort! { |x, y| get_num(x) <=> get_num(y) }
134
- total_open_pull_requests.sort! { |x, y| get_num(x) <=> get_num(y) }
135
-
136
- puts "Total Open Issues: #{total_open_issues.length}"
137
- puts "Total Open Pull Requests: #{total_open_pull_requests.length}"
138
- puts "\nDate Range: #{options[:start_date].strftime('%m/%d/%y')} - #{options[:end_date].strftime('%m/%d/%y')}:"
139
- puts "\nNew Issues: #{new_issues.length} (" + new_issues.map { |issue| get_issue_num(issue) }.join(', ') + ')'
143
+ def print_issues
144
+ puts "Total Open Issues: #{@total_open_issues.length}"
145
+ puts "Total Open Pull Requests: #{@total_open_pull_requests.length}"
146
+ puts "\nDate Range: #{@start_date.strftime('%m/%d/%y')} - #{@end_date.strftime('%m/%d/%y')}:"
147
+ puts "\nNew Issues: #{@new_issues.length} (" + @new_issues.map(&:number).join(', ') + ')'
140
148
 
141
- puts "\nClosed Issues: #{closed_issues.length}"
142
- closed_issues.each { |issue| puts print_issue(issue) }
149
+ puts "\nClosed Issues: #{@closed_issues.length}"
150
+ @closed_issues.each { |issue| puts print_issue(issue) }
143
151
 
144
- puts "\nAccepted Pull Requests: #{accepted_pull_requests.length}"
145
- accepted_pull_requests.each { |issue| puts print_issue(issue) }
152
+ puts "\nAccepted Pull Requests: #{@accepted_pull_requests.length}"
153
+ @accepted_pull_requests.each { |issue| puts print_issue(issue) }
146
154
 
147
- puts "\nAll Open Issues: #{total_open_issues.length} (" + total_open_issues.map { |issue| get_issue_num(issue) }.join(', ') + ')'
155
+ puts "\nAll Open Issues: #{@total_open_issues.length} (" + @total_open_issues.map { |issue| "\##{issue.number}" }.join(', ') + ')'
156
+ end
157
+ end