openstudio-analysis 1.0.3 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -0
- data/CHANGELOG.md +19 -0
- data/lib/openstudio-analysis.rb +1 -0
- data/lib/openstudio/analysis/translator/datapoints.rb +23 -37
- data/lib/openstudio/analysis/translator/workflow.rb +4 -3
- data/lib/openstudio/analysis/version.rb +3 -1
- data/lib/openstudio/analysis/workflow.rb +27 -35
- data/lib/openstudio/analysis/workflow_step.rb +4 -7
- data/lib/openstudio/helpers/utils.rb +66 -0
- data/openstudio-analysis.gemspec +2 -3
- metadata +9 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96f9b0f5f3e8ae95a9efe4389c7d642764442072a18573bbedad60a3ae769252
|
4
|
+
data.tar.gz: a0b1b3a971e9fb51d95aef3c6e4e95f0da121d527e7dd43b204b2302a04e84c6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 652a4113d0638a6c738d4f35b8daf96a00f972fa6c7886d7d1179dbccf73d06fcc768cb6f1952b973dadf29e5e7ee09bf687915a81545d7031adad590531167e
|
7
|
+
data.tar.gz: 652ad3b9699b047fa904394fd9b4e784952285daf753aba89d1ef6e64f4c3825d25ae22e7806f766005ccf5fcde7f8a000a0ecba0b5b3982628ed3b386c898f8
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,25 @@
|
|
1
1
|
OpenStudio Analysis Gem Change Log
|
2
2
|
==================================
|
3
3
|
|
4
|
+
Version 1.1.0
|
5
|
+
--------------------------
|
6
|
+
* Allow for blank :seed, :weather_file and :workflow sections of OSA
|
7
|
+
|
8
|
+
Version 1.0.6
|
9
|
+
-------------
|
10
|
+
* Always include ../lib to the file paths to search
|
11
|
+
|
12
|
+
Version 1.0.5
|
13
|
+
-------------
|
14
|
+
* Upgrade to latest BCL (0.6.1)
|
15
|
+
* Remove the need for the measure.json (which has been deprecated in BCL gem). Now parses the measure.xml.
|
16
|
+
* Upgrade Faraday (1.0.1)
|
17
|
+
* Remove dependency on Nokogiri.
|
18
|
+
|
19
|
+
Version 1.0.4
|
20
|
+
-------------
|
21
|
+
* Update dependency Nokogiri
|
22
|
+
|
4
23
|
Version 1.0.3
|
5
24
|
-------------
|
6
25
|
* Update dependencies roo and rubyzip
|
data/lib/openstudio-analysis.rb
CHANGED
@@ -58,7 +58,7 @@ module OpenStudio
|
|
58
58
|
attr_accessor :name
|
59
59
|
attr_reader :analysis_name
|
60
60
|
|
61
|
-
require '
|
61
|
+
require 'rexml/document'
|
62
62
|
|
63
63
|
# Pass in the filename to read
|
64
64
|
def initialize(csv_filename)
|
@@ -368,16 +368,16 @@ module OpenStudio
|
|
368
368
|
data = []
|
369
369
|
measures.each_with_index do |measure, measure_index|
|
370
370
|
data[measure_index] = {}
|
371
|
-
|
371
|
+
measure_parsed = find_measure(measure.to_s)
|
372
372
|
|
373
|
-
raise "Could not find measure #{measure} xml in measure_paths: '#{@measure_paths.join("\n")}'" unless
|
373
|
+
raise "Could not find measure #{measure} xml in measure_paths: '#{@measure_paths.join("\n")}'" unless measure_parsed
|
374
374
|
measure_data = {}
|
375
|
-
measure_data[:classname] =
|
376
|
-
measure_data[:name] =
|
377
|
-
measure_data[:display_name] =
|
378
|
-
measure_data[:measure_type] = measure_type
|
379
|
-
measure_data[:uid] =
|
380
|
-
measure_data[:version_id] =
|
375
|
+
measure_data[:classname] = measure_parsed[:classname]
|
376
|
+
measure_data[:name] = measure_parsed[:name]
|
377
|
+
measure_data[:display_name] = measure_parsed[:display_name]
|
378
|
+
measure_data[:measure_type] = measure_parsed[:measure_type]
|
379
|
+
measure_data[:uid] = measure_parsed[:uid]
|
380
|
+
measure_data[:version_id] = measure_parsed[:version_id]
|
381
381
|
data[measure_index][:measure_data] = measure_data
|
382
382
|
data[measure_index][:vars] = []
|
383
383
|
vars = measure_map[measure]
|
@@ -389,8 +389,8 @@ module OpenStudio
|
|
389
389
|
next if var.to_s == 'None'
|
390
390
|
var_hash = {}
|
391
391
|
found_arg = nil
|
392
|
-
|
393
|
-
if var.to_s == '__SKIP__' || arg
|
392
|
+
measure_parsed[:arguments].each do |arg|
|
393
|
+
if var.to_s == '__SKIP__' || arg[:name] == var.to_s
|
394
394
|
found_arg = arg
|
395
395
|
break
|
396
396
|
end
|
@@ -404,8 +404,8 @@ module OpenStudio
|
|
404
404
|
var_type = 'boolean'
|
405
405
|
var_units = ''
|
406
406
|
else
|
407
|
-
var_type = found_arg.
|
408
|
-
var_units = found_arg
|
407
|
+
var_type = found_arg[:variable_type].downcase
|
408
|
+
var_units = found_arg[:units]
|
409
409
|
end
|
410
410
|
|
411
411
|
var_hash[:name] = var.to_s
|
@@ -437,7 +437,8 @@ module OpenStudio
|
|
437
437
|
var_hash[:distribution][:type] = 'discrete'
|
438
438
|
var_hash[:distribution][:units] = var_hash[:units]
|
439
439
|
if var_hash[:type] == 'choice'
|
440
|
-
var_hash[:distribution][:enumerations] = found_arg.xpath('choices/choice').map { |s| s.xpath('value').text }
|
440
|
+
# var_hash[:distribution][:enumerations] = found_arg.xpath('choices/choice').map { |s| s.xpath('value').text }
|
441
|
+
# This would need to be updated if we want to do this again... sorry.
|
441
442
|
elsif var_hash[:type] == 'bool'
|
442
443
|
var_hash[:distribution][:enumerations] = []
|
443
444
|
var_hash[:distribution][:enumerations] << true
|
@@ -447,13 +448,13 @@ module OpenStudio
|
|
447
448
|
end
|
448
449
|
data[measure_index][:args] = []
|
449
450
|
|
450
|
-
|
451
|
+
measure_parsed[:arguments].each do |arg_xml|
|
451
452
|
arg = {}
|
452
|
-
arg[:value_type] = arg_xml
|
453
|
-
arg[:name] = arg_xml
|
454
|
-
arg[:display_name] = arg_xml
|
453
|
+
arg[:value_type] = arg_xml[:variable_type]
|
454
|
+
arg[:name] = arg_xml[:name]
|
455
|
+
arg[:display_name] = arg_xml[:display_name].downcase
|
455
456
|
arg[:display_name_short] = arg[:display_name]
|
456
|
-
arg[:default_value] = arg_xml
|
457
|
+
arg[:default_value] = arg_xml[:default_value].downcase
|
457
458
|
arg[:value] = arg[:default_value]
|
458
459
|
data[measure_index][:args] << arg
|
459
460
|
end
|
@@ -470,27 +471,12 @@ module OpenStudio
|
|
470
471
|
measure_xml = File.join(mp, measure_name, 'measure.xml')
|
471
472
|
measure_rb = File.join(mp, measure_name, 'measure.rb')
|
472
473
|
if File.exist?(measure_xml) && File.exist?(measure_rb)
|
473
|
-
|
474
|
+
measure_parsed = parse_measure_xml(measure_xml)
|
475
|
+
return measure_parsed
|
474
476
|
end
|
475
477
|
end
|
476
478
|
|
477
|
-
return nil
|
478
|
-
end
|
479
|
-
|
480
|
-
def parse_measure_type(measure_filename)
|
481
|
-
measure_string = File.read(measure_filename)
|
482
|
-
|
483
|
-
if measure_string =~ /OpenStudio::Ruleset::WorkspaceUserScript/
|
484
|
-
return 'EnergyPlusMeasure'
|
485
|
-
elsif measure_string =~ /OpenStudio::Ruleset::ModelUserScript/
|
486
|
-
return 'RubyMeasure'
|
487
|
-
elsif measure_string =~ /OpenStudio::Ruleset::ReportingUserScript/
|
488
|
-
return 'ReportingMeasure'
|
489
|
-
elsif measure_string =~ /OpenStudio::Ruleset::UtilityUserScript/
|
490
|
-
return 'UtilityUserScript'
|
491
|
-
else
|
492
|
-
raise "measure type is unknown with an inherited class in #{measure_filename}"
|
493
|
-
end
|
479
|
+
return nil
|
494
480
|
end
|
495
481
|
end
|
496
482
|
end
|
@@ -65,14 +65,15 @@ module OpenStudio
|
|
65
65
|
@osw_version = '0.0.1'
|
66
66
|
@options = options
|
67
67
|
@file_paths = options[:file_paths] ? options[:file_paths] : []
|
68
|
+
@file_paths << '../lib'
|
68
69
|
@measure_paths = options[:measure_paths] ? options[:measure_paths] : []
|
69
70
|
|
70
71
|
# Initialize static inputs from the OSA
|
71
|
-
@seed_file = File.basename(@osa[:seed][:path])
|
72
|
+
!@osa[:seed].nil? ? @seed_file = File.basename(@osa[:seed][:path]) : @seed_file = ''
|
72
73
|
if @options[:seed]
|
73
74
|
@seed_file = @options[:seed]
|
74
75
|
end
|
75
|
-
@weather_file = File.basename(@osa[:weather_file][:path])
|
76
|
+
!@osa[:weather_file].nil? ? @weather_file = File.basename(@osa[:weather_file][:path]) : @weather_file = ''
|
76
77
|
@osa_id = @osa[:_id]
|
77
78
|
@steps = []
|
78
79
|
@osa[:problem][:workflow].each_with_index do |step, i|
|
@@ -96,7 +97,7 @@ module OpenStudio
|
|
96
97
|
step_hash[:modeler_description] = step[:modeler_description] if step[:modeler_description]
|
97
98
|
step_hash[:taxonomy] = step[:taxonomy] if step[:taxonomy]
|
98
99
|
step_hash[:measure_type] = step[:measure_type]
|
99
|
-
step_hash[:measure_type] = 'ModelMeasure'
|
100
|
+
step_hash[:measure_type] = 'ModelMeasure'
|
100
101
|
@steps << step_hash
|
101
102
|
end
|
102
103
|
end
|
@@ -53,8 +53,7 @@ module OpenStudio
|
|
53
53
|
@items.clear
|
54
54
|
end
|
55
55
|
|
56
|
-
# Add a measure to the workflow from a path.
|
57
|
-
# if not, the BCL gem is used to create the measure.json file.
|
56
|
+
# Add a measure to the workflow from a path. This will parse the measure.xml which must exist.
|
58
57
|
#
|
59
58
|
# @params instance_name [String] The name of the instance. This allows for multiple measures to be added to the workflow with uni que names
|
60
59
|
# @params instance_display_name [String] The display name of the instance. This allows for multiple measures to be added to the workflow with unique names
|
@@ -69,19 +68,11 @@ module OpenStudio
|
|
69
68
|
end
|
70
69
|
|
71
70
|
if Dir.exist?(local_path_to_measure) && File.directory?(local_path_to_measure)
|
72
|
-
# Watch out for namespace conflicts (use ::BCL)
|
73
|
-
b = ::BCL::ComponentMethods.new
|
74
71
|
measure_hash = nil
|
75
|
-
|
76
|
-
measure_hash =
|
77
|
-
|
78
|
-
|
79
|
-
end
|
80
|
-
|
81
|
-
if measure_hash.nil? && File.exist?(File.join(local_path_to_measure, 'measure.json'))
|
82
|
-
measure_hash = JSON.parse(File.read(File.join(local_path_to_measure, 'measure.json')), symbolize_names: true)
|
83
|
-
elsif measure_hash.nil?
|
84
|
-
raise 'measure.json was not found and was not automatically created'
|
72
|
+
if File.exist?(File.join(local_path_to_measure, 'measure.xml'))
|
73
|
+
measure_hash = parse_measure_xml(File.join(local_path_to_measure, 'measure.xml'))
|
74
|
+
else
|
75
|
+
raise 'Could not find measure.xml'
|
85
76
|
end
|
86
77
|
|
87
78
|
add_measure(instance_name, instance_display_name, local_path_to_measure, measure_hash)
|
@@ -92,12 +83,12 @@ module OpenStudio
|
|
92
83
|
@items.last
|
93
84
|
end
|
94
85
|
|
95
|
-
# Add a measure from the custom hash format without reading the measure.rb or measure.
|
86
|
+
# Add a measure from the custom hash format without reading the measure.rb or measure.xml file
|
96
87
|
#
|
97
88
|
# @params instance_name [String] The name of the instance. This allows for multiple measures to be added to the workflow with unique names
|
98
89
|
# @params instance_display_name [String] The display name of the instance. This allows for multiple measures to be added to the workflow with unique names
|
99
90
|
# @param local_path_to_measure [String] This is the local path to the measure directory, relative or absolute. It is used when zipping up all the measures.
|
100
|
-
# @param measure_metadata [Hash] Format of the measure.
|
91
|
+
# @param measure_metadata [Hash] Format of the measure.xml in JSON format
|
101
92
|
# @return [Object] Returns the measure that was added as an OpenStudio::AnalysisWorkflowStep object
|
102
93
|
def add_measure(instance_name, instance_display_name, local_path_to_measure, measure_metadata)
|
103
94
|
@items << OpenStudio::Analysis::WorkflowStep.from_measure_hash(instance_name, instance_display_name, local_path_to_measure, measure_metadata)
|
@@ -110,7 +101,7 @@ module OpenStudio
|
|
110
101
|
# @params instance_name [String] The name of the instance. This allows for multiple measures to be added to the workflow with unique names
|
111
102
|
# @params instance_display_name [String] The display name of the instance. This allows for multiple measures to be added to the workflow with unique names
|
112
103
|
# @param local_path_to_measure [String] This is the local path to the measure directory, relative or absolute. It is used when zipping up all the measures.
|
113
|
-
# @param measure_metadata [Hash] Format of the measure.
|
104
|
+
# @param measure_metadata [Hash] Format of the measure.xml in JSON format
|
114
105
|
# @return [Object] Returns the measure that was added as an OpenStudio::AnalysisWorkflowStep object
|
115
106
|
def add_measure_from_analysis_hash(instance_name, instance_display_name, local_path_to_measure, measure_metadata)
|
116
107
|
@items << OpenStudio::Analysis::WorkflowStep.from_analysis_hash(instance_name, instance_display_name, local_path_to_measure, measure_metadata)
|
@@ -271,29 +262,30 @@ module OpenStudio
|
|
271
262
|
|
272
263
|
o = OpenStudio::Analysis::Workflow.new
|
273
264
|
|
274
|
-
h[:workflow]
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
265
|
+
if h[:workflow]
|
266
|
+
h[:workflow].each do |wf|
|
267
|
+
puts "Adding measure #{wf[:name]}"
|
268
|
+
|
269
|
+
# Go though the defined measure paths and try and find the local measure
|
270
|
+
local_measure_dir = nil
|
271
|
+
if wf[:measure_definition_directory_local] && Dir.exist?(wf[:measure_definition_directory_local])
|
272
|
+
local_measure_dir = wf[:measure_definition_directory_local]
|
273
|
+
else
|
274
|
+
# search in the measure paths for the measure
|
275
|
+
OpenStudio::Analysis.measure_paths.each do |p|
|
276
|
+
test_dir = File.join(p, File.basename(wf[:measure_definition_directory]))
|
277
|
+
if Dir.exist?(test_dir)
|
278
|
+
local_measure_dir = test_dir
|
279
|
+
break
|
280
|
+
end
|
288
281
|
end
|
289
282
|
end
|
290
|
-
end
|
291
283
|
|
292
|
-
|
284
|
+
raise "Could not find local measure when loading workflow for #{wf[:measure_definition_class_name]} in #{File.basename(wf[:measure_definition_directory])}. You may have to add measure paths to OpenStudio::Analysis.measure_paths" unless local_measure_dir
|
293
285
|
|
294
|
-
|
286
|
+
o.add_measure_from_analysis_hash(wf[:name], wf[:display_name], local_measure_dir, wf)
|
287
|
+
end
|
295
288
|
end
|
296
|
-
|
297
289
|
o
|
298
290
|
end
|
299
291
|
|
@@ -60,7 +60,7 @@ module OpenStudio
|
|
60
60
|
@name = ''
|
61
61
|
@display_name = ''
|
62
62
|
|
63
|
-
# The type of item being added (
|
63
|
+
# The type of item being added (ModelMeasure, EnergyPlusMeasure, ...)
|
64
64
|
@type = nil
|
65
65
|
|
66
66
|
@measure_definition_class_name = nil
|
@@ -267,15 +267,12 @@ module OpenStudio
|
|
267
267
|
#
|
268
268
|
# @param instance_name [String] Machine name of the instance
|
269
269
|
# @param instance_display_name [String] Display name of the instance
|
270
|
-
# @param path_to_measure [String] This is the local path to the measure
|
271
|
-
# @param hash [Hash] Measure hash in the format of
|
270
|
+
# @param path_to_measure [String] This is the local path to the measure directory, relative or absolute. It is used when zipping up all the measures.
|
271
|
+
# @param hash [Hash] Measure hash in the format of a converted measure.xml hash (from the Analysis Spreadsheet project)
|
272
272
|
# @param options [Hash] Optional arguments
|
273
273
|
# @option options [Boolean] :ignore_not_found Do not raise an exception if the measure could not be found on the machine
|
274
274
|
# @return [Object] Returns the OpenStudio::Analysis::WorkflowStep
|
275
275
|
def self.from_measure_hash(instance_name, instance_display_name, path_to_measure, hash, options = {})
|
276
|
-
# TODO: Validate the hash
|
277
|
-
# TODO: validate that the measure exists?
|
278
|
-
|
279
276
|
if File.directory? path_to_measure
|
280
277
|
path_to_measure = File.join(path_to_measure, 'measure.rb')
|
281
278
|
end
|
@@ -352,7 +349,7 @@ module OpenStudio
|
|
352
349
|
# @param instance_name [String] Machine name of the instance
|
353
350
|
# @param instance_display_name [String] Display name of the instance
|
354
351
|
# @param path_to_measure [String] This is the local path to the measure directroy, relative or absolute. It is used when zipping up all the measures.
|
355
|
-
# @param hash [Hash] Measure hash in the format of the measure.
|
352
|
+
# @param hash [Hash] Measure hash in the format of the measure.xml converted to JSON (from the Analysis Spreadsheet project)
|
356
353
|
# @param options [Hash] Optional arguments
|
357
354
|
# @option options [Boolean] :ignore_not_found Do not raise an exception if the measure could not be found on the machine
|
358
355
|
# @return [Object] Returns the OpenStudio::Analysis::WorkflowStep
|
@@ -0,0 +1,66 @@
|
|
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 HOLDERS AND CONTRIBUTORS "AS IS"
|
24
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
25
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
26
|
+
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER, THE UNITED STATES
|
27
|
+
# GOVERNMENT, OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
28
|
+
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
29
|
+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
30
|
+
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
31
|
+
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
32
|
+
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
33
|
+
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
34
|
+
# *******************************************************************************
|
35
|
+
|
36
|
+
require 'rexml/document'
|
37
|
+
|
38
|
+
def parse_measure_xml(measure_xml_filename)
|
39
|
+
measure_hash = {}
|
40
|
+
xml_to_parse = File.open(measure_xml_filename)
|
41
|
+
xml_root = REXML::Document.new(xml_to_parse).root
|
42
|
+
|
43
|
+
# pull out some information
|
44
|
+
measure_hash[:classname] = xml_root.elements['//measure/class_name'].text
|
45
|
+
measure_hash[:name] = xml_root.elements['//measure/name'].text
|
46
|
+
measure_hash[:display_name] = xml_root.elements['//measure/display_name'].text
|
47
|
+
measure_hash[:display_name_titleized] = measure_hash[:name].titleize
|
48
|
+
measure_hash[:measure_type] = xml_root.elements['//measure/attributes/attribute[name="Measure Type"]/value'].text
|
49
|
+
measure_hash[:description] = xml_root.elements['//measure/description'].text
|
50
|
+
measure_hash[:modeler_description] = xml_root.elements['//measure/modeler_description'].text
|
51
|
+
measure_hash[:uid] = xml_root.elements['//measure/uid'].text
|
52
|
+
measure_hash[:version_id] = xml_root.elements['//measure/version_id'].text
|
53
|
+
measure_hash[:arguments] = []
|
54
|
+
|
55
|
+
REXML::XPath.each(xml_root, '//measure/arguments/argument') do |arg|
|
56
|
+
measure_hash[:arguments] << {
|
57
|
+
name: arg.elements['name'].text,
|
58
|
+
display_name: arg.elements['display_name'].text,
|
59
|
+
variable_type: arg.elements['type'].text.downcase,
|
60
|
+
default_value: arg.elements['default_value'].text,
|
61
|
+
units: arg.elements['units'] ? arg.elements['units'].text : ''
|
62
|
+
}
|
63
|
+
end
|
64
|
+
|
65
|
+
measure_hash
|
66
|
+
end
|
data/openstudio-analysis.gemspec
CHANGED
@@ -23,10 +23,9 @@ Gem::Specification.new do |s|
|
|
23
23
|
|
24
24
|
s.required_ruby_version = '~> 2.5.0'
|
25
25
|
|
26
|
-
s.add_dependency 'bcl', '
|
26
|
+
s.add_dependency 'bcl', '~> 0.6.1'
|
27
27
|
s.add_dependency 'dencity', '~> 0.1.0'
|
28
|
-
s.add_dependency 'faraday', '~> 0.
|
29
|
-
s.add_dependency 'nokogiri', '~> 1.8.2'
|
28
|
+
s.add_dependency 'faraday', '~> 1.0.1'
|
30
29
|
s.add_dependency 'roo', '~> 2.8.3'
|
31
30
|
s.add_dependency 'rubyzip', '~> 2.3.0'
|
32
31
|
s.add_dependency 'semantic', '~> 1.4'
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openstudio-analysis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nicholas Long
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bcl
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.6.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.6.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: dencity
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,28 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0.14'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: nokogiri
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 1.8.2
|
47
|
+
version: 1.0.1
|
62
48
|
type: :runtime
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
52
|
- - "~>"
|
67
53
|
- !ruby/object:Gem::Version
|
68
|
-
version: 1.
|
54
|
+
version: 1.0.1
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: roo
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -194,6 +180,7 @@ files:
|
|
194
180
|
- lib/openstudio/analysis/workflow_step.rb
|
195
181
|
- lib/openstudio/helpers/hash.rb
|
196
182
|
- lib/openstudio/helpers/string.rb
|
183
|
+
- lib/openstudio/helpers/utils.rb
|
197
184
|
- lib/openstudio/weather/epw.rb
|
198
185
|
- openstudio-analysis.gemspec
|
199
186
|
- update_license.rb
|