bcl 0.5.9 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +21 -0
- data/.rubocop.yml +9 -0
- data/CHANGELOG.md +66 -0
- data/Gemfile +11 -0
- data/License.txt +65 -0
- data/README.md +40 -0
- data/Rakefile +312 -0
- data/bcl.gemspec +39 -0
- data/lib/bcl.rb +2 -2
- data/lib/bcl/component_methods.rb +12 -13
- data/lib/bcl/version.rb +1 -1
- data/schemas/v2/component_2012_11_08.xsd +291 -0
- data/schemas/v2/measure_2013_3_26.xsd +153 -0
- data/schemas/v3/common_bcl_v3.xsd +422 -0
- data/schemas/v3/component_v3.xsd +445 -0
- data/schemas/v3/measure_v3.xsd +496 -0
- metadata +70 -77
- data/lib/files/downloads/40237ee0-5ea7-0130-ad9b-14109fdf0b37.tar.gz +0 -0
- data/lib/files/staged/components/Asphalt_Shingles_1_8_in/Asphalt_Shingles_1_8_in.tar.gz +0 -0
- data/lib/files/staged/components/Asphalt_Shingles_1_8_in/component.xml +0 -81
- data/lib/files/staged/components/Built_up_Roofing_3_8_in/Built_up_Roofing_3_8_in.tar.gz +0 -0
- data/lib/files/staged/components/Built_up_Roofing_3_8_in/component.xml +0 -76
- data/lib/files/staged/components/Metal_Surface_1_16_in/Metal_Surface_1_16_in.tar.gz +0 -0
- data/lib/files/staged/components/Metal_Surface_1_16_in/component.xml +0 -76
- data/lib/files/staged/components/Shingle_Backer_1_4_in/Shingle_Backer_1_4_in.tar.gz +0 -0
- data/lib/files/staged/components/Shingle_Backer_1_4_in/component.xml +0 -81
- data/lib/files/staged/components/Shingle_Backer_3_8_in/Shingle_Backer_3_8_in.tar.gz +0 -0
- data/lib/files/staged/components/Shingle_Backer_3_8_in/component.xml +0 -81
- data/lib/files/staged/components/Wood_Shingles_1_4_in/Wood_Shingles_1_4_in.tar.gz +0 -0
- data/lib/files/staged/components/Wood_Shingles_1_4_in/component.xml +0 -81
- data/lib/files/staged/gather/1/Asphalt_Shingles_1_8_in.tar.gz +0 -0
- data/lib/files/staged/gather/1/Built_up_Roofing_3_8_in.tar.gz +0 -0
- data/lib/files/staged/gather/1/Metal_Surface_1_16_in.tar.gz +0 -0
- data/lib/files/staged/gather/1/Shingle_Backer_1_4_in.tar.gz +0 -0
- data/lib/files/staged/gather/1/Shingle_Backer_3_8_in.tar.gz +0 -0
- data/lib/files/staged/gather/1/Wood_Shingles_1_4_in.tar.gz +0 -0
- data/lib/files/staged/gather/components_1.tar.gz +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f509d5e458bab1b477c6e4695a5333766e6f3e19be91ac2452d87452fcfcd981
|
4
|
+
data.tar.gz: ccd36a253abd3c64635959edf253ad4aac87789e95958787d11bda1b1e3dfb9c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ebba6c382b8a2d2576a8ffff66c8571161df38a01c6ff5ff17cc0b834cecd995c96ffb29749cde7302aa0650cb957ff859607fc89247b5594f2e691f423e099
|
7
|
+
data.tar.gz: 37e1f02ffd32494cbf49f83c04b305e0b7782b6527fe549c758be26ef0f8a683e797e18c1b68a5ecaa809cf750e72cf2184d276e7108f26ce14c3a8025cd3a13
|
data/.gitignore
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
.DS_Store
|
2
|
+
.bundle
|
3
|
+
.idea
|
4
|
+
.ruby-version
|
5
|
+
.Rhistory
|
6
|
+
faraday.log
|
7
|
+
gems/
|
8
|
+
*.swp
|
9
|
+
*.gem
|
10
|
+
tmp/*
|
11
|
+
rubocop-results.xml
|
12
|
+
.rubocop-http*
|
13
|
+
Gemfile.lock
|
14
|
+
/spec/bcl/output
|
15
|
+
/spec/reports
|
16
|
+
/spec/api/resources/*.receipt
|
17
|
+
measures/
|
18
|
+
staged/
|
19
|
+
lib/files/staged/
|
20
|
+
lib/files/downloads/
|
21
|
+
.rubocop-https*
|
data/.rubocop.yml
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
# Change Log
|
2
|
+
|
3
|
+
## Version 0.6.0
|
4
|
+
|
5
|
+
* Support Ruby > 2.5
|
6
|
+
* Update dependencies
|
7
|
+
|
8
|
+
## Version 0.5.9
|
9
|
+
* Update copyrights
|
10
|
+
* Update rubocop version (security)
|
11
|
+
* Updates to support OpenStudio Extension gem
|
12
|
+
|
13
|
+
## Version 0.5.8
|
14
|
+
* Cleanup code (rubocop)
|
15
|
+
|
16
|
+
## Version 0.5.7
|
17
|
+
* Update to_underscore method to not break apart EnergyPlus nor OpenStudio
|
18
|
+
|
19
|
+
## Version 0.5.6
|
20
|
+
* Allow no display name when parsing measure arguments (measure argument does not have setDisplayName)
|
21
|
+
* Parse measure display name, description, modeler description, and argument units
|
22
|
+
* Add basic validation that prints to the terminal
|
23
|
+
* Upgrade spec and ci reporter
|
24
|
+
* New branch for development (develop)
|
25
|
+
|
26
|
+
## Version 0.5.5
|
27
|
+
* Read as binary for .tar.gz
|
28
|
+
* When downloading and parsing measures, skip instance where the measure class name is already the directory name.
|
29
|
+
|
30
|
+
## Version 0.5.2-4
|
31
|
+
* Remove libxml dependency
|
32
|
+
* Add OpenStudio static measure parsing method
|
33
|
+
* Add translate to CSV from static measures to support OpenStudio-analysis spreadsheet
|
34
|
+
* Fix Group ID
|
35
|
+
* Pull UUID out of tar.gz files
|
36
|
+
* More testing around measures and components API
|
37
|
+
* Rubocop
|
38
|
+
|
39
|
+
## Version 0.5.1
|
40
|
+
* Fix bug when parsing BCL measures and nil arguments
|
41
|
+
|
42
|
+
## Version 0.5.0
|
43
|
+
* Remove support for Ruby 1.8.7. Only supporting > 1.9.2
|
44
|
+
* Remove JSON gem. Using multi_json
|
45
|
+
* Removed obsolete tests
|
46
|
+
* Removed RestClient in favor of Faraday (used for testing)
|
47
|
+
|
48
|
+
## Version 0.4.1
|
49
|
+
* Several fixes to previous gem
|
50
|
+
* Put required gems into the gemspec
|
51
|
+
|
52
|
+
### New Features
|
53
|
+
* Able to specify the group_id when you create the component methods
|
54
|
+
* Added parsing of BCL measures for extracting arguments
|
55
|
+
|
56
|
+
## Version 0.3.7
|
57
|
+
|
58
|
+
### New Features
|
59
|
+
* Added a search for measures that returns the JSON
|
60
|
+
* Added the ability to download a component (measure or component). Result returns the file data that needes to be persisted.
|
61
|
+
|
62
|
+
## Version 0.1.7
|
63
|
+
|
64
|
+
### New Features
|
65
|
+
* Added rspec for testing
|
66
|
+
* Made a datatype method in BCL class to resolve the appropriate values per BCL convention (i.e. int, float, string)
|
data/Gemfile
ADDED
data/License.txt
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
Copyright (c) 2008-2019, Alliance for Sustainable Energy.
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
NOTICE
|
5
|
+
|
6
|
+
This computer software (Software) is code in development prepared by the
|
7
|
+
Alliance for Sustainable Energy, (hereinafter the "Contractor"), under
|
8
|
+
Contract DE-AC36-08GO28308 (Contract) with the Department of Energy (DOE).
|
9
|
+
The United States Government has been granted for itself and others acting
|
10
|
+
on its behalf a paid-up, non-exclusive, irrevocable, worldwide license in
|
11
|
+
the Software to reproduce, prepare derivative works, and perform publicly
|
12
|
+
and display publicly. Beginning five (5) years after the date permission
|
13
|
+
to assert copyright is obtained from the DOE, and subject to any
|
14
|
+
subsequent five (5) year renewals, the United States Government is granted
|
15
|
+
for itself and others acting on its behalf a paid-up, non-exclusive,
|
16
|
+
irrevocable, worldwide license in the Software to reproduce, prepare
|
17
|
+
derivative works, distribute copies to the public, perform publicly and
|
18
|
+
display publicly, and to permit others to do so. If the Contractor ceases
|
19
|
+
to make this computer software available, it may be obtained from DOE's
|
20
|
+
Office of Scientific and Technical Information's Energy Science and
|
21
|
+
Technology Software Center (ESTSC) at P.O. Box 1020, Oak Ridge, TN 37831-
|
22
|
+
1020.
|
23
|
+
|
24
|
+
DISCLAIMER
|
25
|
+
|
26
|
+
THIS SOFTWARE IS PROVIDED BY THE CONTRACTOR "AS IS" AND ANY EXPRESS OR
|
27
|
+
IMPLIED WARRANTIES, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
28
|
+
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
|
29
|
+
NO EVENT SHALL THE CONTRACTOR OR THE U.S. GOVERNMENT BE LIABLE FOR ANY
|
30
|
+
SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER,
|
31
|
+
INCLUDING BUT NOT LIMITED TO CLAIMS ASSOCIATED WITH THE LOSS OF DATA OR
|
32
|
+
PROFITS, WHICH MAY RESULT FROM AN ACTION IN CONTRACT, NEGLIGENCE OR OTHER
|
33
|
+
TORTIOUS CLAIM THAT ARISES OUT OF OR IN CONNECTION WITH THE ACCESS, USE OR
|
34
|
+
PERFORMANCE OF THIS SOFTWARE.
|
35
|
+
|
36
|
+
YOU AGREE TO INDEMNIFY DOE/NREL/ALLIANCE, AND ITS SUBSIDIARIES,
|
37
|
+
AFFILIATES, OFFICERS, AGENTS, AND EMPLOYEES AGAINST ANY CLAIM OR DEMAND,
|
38
|
+
INCLUDING REASONABLE ATTORNEYS' FEES, RELATED TO YOUR USE OF THESE DATA.
|
39
|
+
|
40
|
+
DOE/NREL/Alliance is not obligated to provide the user with any support,
|
41
|
+
consulting, training or assistance of any kind with regard to the use of
|
42
|
+
these Data or to provide the user with any updates, revisions or new
|
43
|
+
versions of these Data.
|
44
|
+
|
45
|
+
The names DOE/NREL/Alliance may not be used in any advertising or
|
46
|
+
publicity to endorse or promote any products or commercial entities unless
|
47
|
+
specific written permission is obtained from DOE/NREL/Alliance.
|
48
|
+
|
49
|
+
|
50
|
+
OPEN SOURCE LICENSE
|
51
|
+
|
52
|
+
This library is free software; you can redistribute it and/or
|
53
|
+
modify it under the terms of the GNU Lesser General Public
|
54
|
+
License as published by the Free Software Foundation; either
|
55
|
+
version 2.1 of the License, or (at your option) any later version.
|
56
|
+
|
57
|
+
This library is distributed in the hope that it will be useful,
|
58
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
59
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
60
|
+
Lesser General Public License for more details here.
|
61
|
+
|
62
|
+
You should have received a copy of the GNU Lesser General Public
|
63
|
+
License along with this library; if not, write to the Free Software
|
64
|
+
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
65
|
+
|
data/README.md
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# BCL Gem
|
2
|
+
|
3
|
+
All the methods to build, test, and release the gem available as rake tasks via bundler/gem_tasks. Note that you can see all the rake tasks by calling `rake -T` at the command line.
|
4
|
+
|
5
|
+
## Building BCL Gem
|
6
|
+
|
7
|
+
If this is a new version that will be release first edit the ./lib/bcl/version.rb file and increment the version number. This will automatically propagate through the build process.
|
8
|
+
|
9
|
+
`rake build`
|
10
|
+
|
11
|
+
To install:
|
12
|
+
|
13
|
+
`rake install`
|
14
|
+
|
15
|
+
## Releasing Gem
|
16
|
+
|
17
|
+
Note: Releasing the gem will call the build command, tag it in Git, and push to rubygems.
|
18
|
+
|
19
|
+
run `rake release`
|
20
|
+
|
21
|
+
## Testing
|
22
|
+
|
23
|
+
`rake spec`
|
24
|
+
|
25
|
+
## Uninstall
|
26
|
+
|
27
|
+
run `gem uninstall bcl -a`
|
28
|
+
|
29
|
+
## Workflow for pushing content to BCL
|
30
|
+
|
31
|
+
run `rake bcl:stage_and_upload[/path/to/content, resetFlag]`
|
32
|
+
|
33
|
+
where `path/to/content` is a path to the directory of measures or components to upload and `resetFlag` is a boolean flag indicating whether to clear already staged content and receipt files (true), or to keep the staged content and receipt files (false).
|
34
|
+
|
35
|
+
Staging and Uploading tasks can be called separately:
|
36
|
+
|
37
|
+
`rake bcl:stage_content[/path/to/content, resetFlag]`
|
38
|
+
|
39
|
+
`rake bcl:upload_content[resetFlag]`
|
40
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,312 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler.setup
|
3
|
+
|
4
|
+
require 'rake'
|
5
|
+
require 'rspec/core/rake_task'
|
6
|
+
require 'bundler/gem_tasks'
|
7
|
+
|
8
|
+
require 'pathname'
|
9
|
+
|
10
|
+
$LOAD_PATH.unshift File.expand_path('lib', __dir__)
|
11
|
+
require 'bcl'
|
12
|
+
require 'bcl/version'
|
13
|
+
|
14
|
+
RSpec::Core::RakeTask.new('spec') do |spec|
|
15
|
+
puts 'running tests...'
|
16
|
+
spec.rspec_opts = ['--format', 'progress']
|
17
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
18
|
+
end
|
19
|
+
|
20
|
+
namespace :test do
|
21
|
+
desc 'test search all functionality'
|
22
|
+
task :search_all do
|
23
|
+
# search with all=true
|
24
|
+
# ensure that a) results are returned (> 0) and b) [:measure][:name] is a string
|
25
|
+
# search with all=false
|
26
|
+
# ensure the same a) and b) as above
|
27
|
+
bcl = BCL::ComponentMethods.new
|
28
|
+
bcl.login
|
29
|
+
results = bcl.search('Add', 'show_rows=10', false)
|
30
|
+
puts "there are #{results[:result].count} results"
|
31
|
+
results[:result].each do |res|
|
32
|
+
puts (res[:measure][:name]).to_s
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
desc 'test measure upload'
|
37
|
+
task :measure_upload do
|
38
|
+
bcl = BCL::ComponentMethods.new
|
39
|
+
bcl.login
|
40
|
+
filename = "#{File.dirname(__FILE__)}/spec/api/resources/measure_original.tar.gz"
|
41
|
+
valid, res = bcl.push_content(filename, false, 'nrel_measure')
|
42
|
+
end
|
43
|
+
|
44
|
+
desc 'test the BCL login credentials defined in .bcl/config.yml'
|
45
|
+
task :bcl_login do
|
46
|
+
bcl = BCL::ComponentMethods.new
|
47
|
+
bcl.login
|
48
|
+
end
|
49
|
+
|
50
|
+
desc 'test component spreadsheet'
|
51
|
+
task :spreadsheet do
|
52
|
+
bclcomponents = BCL::ComponentFromSpreadsheet.new(File.expand_path('lib/files/Components.xls', __dir__), ['Roofing'])
|
53
|
+
bclcomponents.save(File.expand_path('lib/files/staged', __dir__))
|
54
|
+
end
|
55
|
+
|
56
|
+
desc 'test measure download'
|
57
|
+
task :measure_download do
|
58
|
+
# find a component with keyword 'Ashrae'
|
59
|
+
query = 'ashrae'
|
60
|
+
filter = 'fq[]=bundle:nrel_component&show_rows=3'
|
61
|
+
|
62
|
+
bcl = BCL::ComponentMethods.new
|
63
|
+
bcl.login
|
64
|
+
|
65
|
+
results = bcl.search(query, filter)
|
66
|
+
uids = []
|
67
|
+
results[:result].each do |result|
|
68
|
+
uids << result[:component][:uuid]
|
69
|
+
end
|
70
|
+
|
71
|
+
content = bcl.download_component(uids[0])
|
72
|
+
|
73
|
+
# save as tar.gz
|
74
|
+
download_path = File.expand_path('lib/files/downloads', __dir__)
|
75
|
+
FileUtils.mkdir(download_path) if !File.exist? download_path
|
76
|
+
f = File.open("#{download_path}/#{uids[0]}.tar.gz", 'wb')
|
77
|
+
f.write(content)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
namespace :bcl do
|
82
|
+
STAGED_PATH = Pathname.new(Dir.pwd + '/staged')
|
83
|
+
|
84
|
+
# initialize BCL and login
|
85
|
+
bcl = BCL::ComponentMethods.new
|
86
|
+
bcl.login
|
87
|
+
|
88
|
+
# to call: rake "bcl:stage_and_upload[/path/to/your/content/directory, true]"
|
89
|
+
# content_path arg: path to components or measures to upload
|
90
|
+
# reset flag:
|
91
|
+
# If TRUE: content in the staged directory will be re-generated and receipt files will be deleted.
|
92
|
+
# If FALSE, content that already exists in the staged directory will remain and content with receipt files will not be re-uploaded.
|
93
|
+
desc 'stage and push/update all content in a repo'
|
94
|
+
task :stage_and_upload, [:content_path, :reset] do |t, args|
|
95
|
+
options = { reset: false }
|
96
|
+
options[:content_path] = Pathname.new args[:content_path]
|
97
|
+
if args[:reset].to_s == 'true'
|
98
|
+
options[:reset] = true
|
99
|
+
end
|
100
|
+
|
101
|
+
current_dir = Dir.pwd
|
102
|
+
|
103
|
+
# stage content
|
104
|
+
Rake.application.invoke_task("bcl:stage_content[#{options[:content_path]}, #{options[:reset]}]")
|
105
|
+
Dir.chdir(current_dir)
|
106
|
+
|
107
|
+
# upload (new and updated). pass in skip flag
|
108
|
+
Rake.application.invoke_task("bcl:upload_content[#{options[:reset]}]")
|
109
|
+
end
|
110
|
+
|
111
|
+
# to call: rake "bcl:upload_content[true]"
|
112
|
+
# TODO: catch errors and continue
|
113
|
+
desc 'upload/update BCL content'
|
114
|
+
task :upload_content, [:reset] do |t, args|
|
115
|
+
# process options
|
116
|
+
options = { reset: false }
|
117
|
+
if args[:reset].to_s == 'true'
|
118
|
+
options[:reset] = true
|
119
|
+
end
|
120
|
+
|
121
|
+
total_count = 0
|
122
|
+
successes = 0
|
123
|
+
errors = 0
|
124
|
+
skipped = 0
|
125
|
+
|
126
|
+
# grab all the new measure and component tar files and push to bcl
|
127
|
+
['measure', 'component'].each do |content_type|
|
128
|
+
items = []
|
129
|
+
paths = Pathname.glob(STAGED_PATH.to_s + "/push/#{content_type}/*.tar.gz")
|
130
|
+
paths.each do |path|
|
131
|
+
# puts path
|
132
|
+
items << path.to_s
|
133
|
+
end
|
134
|
+
|
135
|
+
items.each do |item|
|
136
|
+
puts item.split('/').last
|
137
|
+
total_count += 1
|
138
|
+
|
139
|
+
receipt_file = File.dirname(item) + '/' + File.basename(item, '.tar.gz') + '.receipt'
|
140
|
+
if !options[:reset] && File.exist?(receipt_file)
|
141
|
+
skipped += 1
|
142
|
+
puts 'SKIP: receipt file found'
|
143
|
+
next
|
144
|
+
end
|
145
|
+
|
146
|
+
valid, res = bcl.push_content(item, true, "nrel_#{content_type}")
|
147
|
+
if valid
|
148
|
+
successes += 1
|
149
|
+
else
|
150
|
+
errors += 1
|
151
|
+
if res.key?(:error)
|
152
|
+
puts " ERROR MESSAGE: #{res[:error]}"
|
153
|
+
else
|
154
|
+
puts "ERROR: #{res.inspect.chomp}"
|
155
|
+
end
|
156
|
+
end
|
157
|
+
puts '', '---'
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
# grab all the updated content (measures and components) tar files and push to bcl
|
162
|
+
items = []
|
163
|
+
paths = Pathname.glob(STAGED_PATH.to_s + '/update/*.tar.gz')
|
164
|
+
paths.each do |path|
|
165
|
+
# puts path
|
166
|
+
items << path.to_s
|
167
|
+
end
|
168
|
+
items.each do |item|
|
169
|
+
puts item.split('/').last
|
170
|
+
total_count += 1
|
171
|
+
|
172
|
+
receipt_file = File.dirname(item) + '/' + File.basename(item, '.tar.gz') + '.receipt'
|
173
|
+
if !options[:reset] && File.exist?(receipt_file)
|
174
|
+
skipped += 1
|
175
|
+
puts 'SKIP: receipt file found'
|
176
|
+
next
|
177
|
+
end
|
178
|
+
|
179
|
+
valid, res = bcl.update_content(item, true)
|
180
|
+
if valid
|
181
|
+
successes += 1
|
182
|
+
else
|
183
|
+
errors += 1
|
184
|
+
if res.key?(:error)
|
185
|
+
puts " ERROR MESSAGE: #{res[:error]}"
|
186
|
+
else
|
187
|
+
puts "ERROR MESSAGE: #{res.inspect.chomp}"
|
188
|
+
end
|
189
|
+
end
|
190
|
+
puts '', '---'
|
191
|
+
end
|
192
|
+
|
193
|
+
puts "****UPLOAD DONE**** #{total_count} total, #{successes} success, #{errors} failures, #{skipped} skipped"
|
194
|
+
end
|
195
|
+
|
196
|
+
# to call: rake "bcl:stage_content[/path/to/your/content/directory, true]"
|
197
|
+
desc 'stage content for BCL'
|
198
|
+
task :stage_content, [:content_path, :reset] do |t, args|
|
199
|
+
# process options
|
200
|
+
options = { reset: false }
|
201
|
+
options[:content_path] = Pathname.new args[:content_path]
|
202
|
+
if args[:reset].to_s == 'true'
|
203
|
+
options[:reset] = true
|
204
|
+
end
|
205
|
+
puts "OPTIONS -- content_path: #{options[:content_path]}, reset: #{options[:reset]}"
|
206
|
+
|
207
|
+
FileUtils.mkdir_p(STAGED_PATH)
|
208
|
+
|
209
|
+
# delete existing tarballs if reset is true
|
210
|
+
if options[:reset]
|
211
|
+
FileUtils.rm_rf(Dir.glob("#{STAGED_PATH}/*"))
|
212
|
+
end
|
213
|
+
|
214
|
+
# create new and existing directories
|
215
|
+
FileUtils.mkdir_p(STAGED_PATH.to_s + '/update')
|
216
|
+
FileUtils.mkdir_p(STAGED_PATH.to_s + '/push/component')
|
217
|
+
FileUtils.mkdir_p(STAGED_PATH.to_s + '/push/measure')
|
218
|
+
|
219
|
+
# keep track of noop, update, push
|
220
|
+
noops = 0
|
221
|
+
new_ones = 0
|
222
|
+
updates = 0
|
223
|
+
|
224
|
+
# get all content directories to process
|
225
|
+
dirs = Dir.glob("#{options[:content_path]}/*")
|
226
|
+
|
227
|
+
dirs.each do |dir|
|
228
|
+
next if dir.include?('Rakefile')
|
229
|
+
|
230
|
+
current_d = Dir.pwd
|
231
|
+
content_name = File.basename(dir)
|
232
|
+
puts '', '---'
|
233
|
+
puts "Generating #{content_name}"
|
234
|
+
|
235
|
+
Dir.chdir(dir)
|
236
|
+
|
237
|
+
# figure out whether to upload new or update existing
|
238
|
+
files = Pathname.glob('**/*')
|
239
|
+
uuid = nil
|
240
|
+
vid = nil
|
241
|
+
content_type = 'measure'
|
242
|
+
|
243
|
+
paths = []
|
244
|
+
files.each do |file|
|
245
|
+
# don't tar tests/outputs directory
|
246
|
+
next if file.to_s.start_with?('tests/output') # From measure testing process
|
247
|
+
next if file.to_s.start_with?('tests/test') # From openstudio-measure-tester-gem
|
248
|
+
next if file.to_s.start_with?('tests/coverage') # From openstudio-measure-tester-gem
|
249
|
+
next if file.to_s.start_with?('test_results') # From openstudio-measure-tester-gem
|
250
|
+
|
251
|
+
paths << file.to_s
|
252
|
+
if file.to_s =~ /^.{0,2}component.xml$/ || file.to_s =~ /^.{0,2}measure.xml$/
|
253
|
+
if file.to_s =~ /^.{0,2}component.xml$/
|
254
|
+
content_type = 'component'
|
255
|
+
end
|
256
|
+
# extract uuid and vid
|
257
|
+
uuid, vid = bcl.uuid_vid_from_xml(file)
|
258
|
+
end
|
259
|
+
end
|
260
|
+
puts "UUID: #{uuid}, VID: #{vid}"
|
261
|
+
|
262
|
+
# note: if uuid is missing, will assume new content
|
263
|
+
action = bcl.search_by_uuid(uuid, vid)
|
264
|
+
puts "#{content_name} ACTION TO TAKE: #{action}"
|
265
|
+
# new content functionality needs to know if measure or component. update is agnostic.
|
266
|
+
if action == 'noop' # ignore up-to-date content
|
267
|
+
puts " - WARNING: local #{content_name} uuid and vid match BCL... no update will be performed"
|
268
|
+
noops += 1
|
269
|
+
next
|
270
|
+
elsif action == 'update'
|
271
|
+
# puts "#{content_name} labeled as update for BCL"
|
272
|
+
destination = STAGED_PATH.join(action, "#{content_name}.tar.gz")
|
273
|
+
updates += 1
|
274
|
+
elsif action == 'push'
|
275
|
+
# puts "#{content_name} labeled as new content for BCL"
|
276
|
+
destination = STAGED_PATH.join(action, content_type, "#{content_name}.tar.gz")
|
277
|
+
new_ones += 1
|
278
|
+
end
|
279
|
+
|
280
|
+
puts "destination: #{destination}"
|
281
|
+
|
282
|
+
# copy over only if 'reset_receipts' is set to TRUE. otherwise ignore if file exists already
|
283
|
+
if File.exist?(destination)
|
284
|
+
if options[:reset]
|
285
|
+
FileUtils.rm(destination)
|
286
|
+
BCL.tarball(destination, paths)
|
287
|
+
else
|
288
|
+
puts "*** WARNING: File #{content_name}.tar.gz already exists in staged directory... keeping existing file. To overwrite, set reset_receipts arg to true ***"
|
289
|
+
end
|
290
|
+
else
|
291
|
+
BCL.tarball(destination, paths)
|
292
|
+
end
|
293
|
+
Dir.chdir(current_d)
|
294
|
+
end
|
295
|
+
puts '', "****STAGING DONE**** #{new_ones} new content, #{updates} updates, #{noops} skipped (already up-to-date on BCL)", ''
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
require 'rubocop/rake_task'
|
300
|
+
desc 'Run RuboCop on the lib directory'
|
301
|
+
RuboCop::RakeTask.new(:rubocop) do |task|
|
302
|
+
# only show the files with failures
|
303
|
+
task.options = ['--no-color', '--out=rubocop-results.xml']
|
304
|
+
task.formatters = ['RuboCop::Formatter::CheckstyleFormatter']
|
305
|
+
task.requires = ['rubocop/formatter/checkstyle_formatter']
|
306
|
+
# don't abort rake on failure
|
307
|
+
task.fail_on_error = false
|
308
|
+
end
|
309
|
+
|
310
|
+
desc 'Default task run rspec tests'
|
311
|
+
task test: :spec
|
312
|
+
task default: :spec
|