openstudio-workflow 0.2.0 → 1.0.0.pat0

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
  SHA1:
3
- metadata.gz: 859f53e5f54c14eee213cff7b0bdd7a6bc9d4c98
4
- data.tar.gz: b58de6c2993630809e26a27bf735fcac371280cc
3
+ metadata.gz: 8358ab81f9a6e7ba628d2d890aa6b072e855fa7c
4
+ data.tar.gz: 775d5d17b2d109c175d3bba6037edd9b577f20a6
5
5
  SHA512:
6
- metadata.gz: dcb4afd15fa0d9eecb08ee60835a87310c4dc4f8e7c3cc97d87919f6127c6c706df7074315200c054280c2cf6c84a0ce4baacebeefcc6fcdeded08a28dafdeff
7
- data.tar.gz: 9fd2d0449335fb0998b936851e042f1f1957817a55e0654bf37d3168420bf5def9bdab975b180ccc381cb66f80e963f9e54b38347d93db7804ea7036f6eddce4
6
+ metadata.gz: e2a92837bef82dc5f6fd3cbc07bcf01d50c865c6a6ed5ac26922836c20741eb903743946836489a671e643f4cd2412d1178f440b7d9908a77304b991f2cb6813
7
+ data.tar.gz: de3843c61ab7cb9c575579347800196c46f822a0a2009f803e5c1c415217d92530c320f3b90584f1b2517dc7fb56a8cbb9a20ccf80c6e6ada5a3e02a4dbf6333
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # OpenStudio::Workflow
2
- [![Circle CI](https://circleci.com/gh/NREL/OpenStudio-workflow-gem/tree/EnergyPlus-8.3.0.svg?style=svg)](https://circleci.com/gh/NREL/OpenStudio-workflow-gem/tree/EnergyPlus-8.3.0)
3
- [![Coverage Status](https://coveralls.io/repos/NREL/OpenStudio-workflow-gem/badge.svg?branch=EnergyPlus-8.3.0&service=github)](https://coveralls.io/github/NREL/OpenStudio-workflow-gem?branch=EnergyPlus-8.3.0)
2
+ [![Circle CI](https://circleci.com/gh/NREL/OpenStudio-workflow-gem/tree/develop.svg?style=svg)](https://circleci.com/gh/NREL/OpenStudio-workflow-gem/tree/develop)
3
+ [![Coverage Status](https://coveralls.io/repos/NREL/OpenStudio-workflow-gem/badge.svg?branch=develop&service=github)](https://coveralls.io/github/NREL/OpenStudio-workflow-gem?branch=develop)
4
4
  [![Dependency Status](https://www.versioneye.com/user/projects/5531fb7b10e714121100102e/badge.svg?style=flat)](https://www.versioneye.com/user/projects/5531fb7b10e714121100102e)
5
5
 
6
6
  Run an EnergyPlus simulation using a file-based workflow that is read from a Local or MongoDB adapter.
@@ -24,10 +24,6 @@ Add this line to your application's Gemfile:
24
24
 
25
25
  gem 'OpenStudio-workflow'
26
26
 
27
- Use this line if you want the bleeding edge:
28
-
29
- gem 'OpenStudio-workflow', github: 'NREL/OpenStudio-workflow-gem', branch: 'EnergyPlus-8.2.0'
30
-
31
27
  And then execute:
32
28
 
33
29
  Mac/Linux:
@@ -62,6 +62,8 @@ module OpenStudio
62
62
  def load(adapter_name, run_directory, options = {})
63
63
  defaults = { adapter_options: {} }
64
64
  options = defaults.merge(options)
65
+ # We don't have deep merge so just check for the rails_env
66
+ options[:adapter_options][:rails_env] = :development unless options[:adapter_options][:rails_env]
65
67
 
66
68
  # Convert various paths to absolute paths
67
69
  if options[:adapter_options] && options[:adapter_options][:mongoid_path] &&
@@ -3,15 +3,26 @@ class ExtendedRunner < OpenStudio::Ruleset::OSRunner
3
3
  # Allow former arguments to be set and read
4
4
  # TODO: Consider having the former arguments passed in in initialization, and define as attr_reader
5
5
  attr_accessor :former_workflow_arguments
6
+ attr_accessor :past_results
6
7
  attr_reader :workflow_arguments
7
8
 
8
9
  # Add in @workflow_arguments
9
- def initialize(multi_logger)
10
+ def initialize(multi_logger, analysis_hash, datapoint_hash)
10
11
  @multi_logger = multi_logger
12
+ @analysis = analysis_hash
13
+ @datapoint = datapoint_hash
11
14
  @workflow_arguments = nil
12
15
  super()
13
16
  end
14
17
 
18
+ def analysis
19
+ return @analysis
20
+ end
21
+
22
+ def datapoint
23
+ return @datapoint
24
+ end
25
+
15
26
  # Take the OS Argument type and map it correctly to the argument value.
16
27
  # OPENSTUDIO_ENUM( OSArgumentType,
17
28
  # ((Boolean)(Bool)(0))
@@ -41,7 +41,7 @@ module OpenStudio
41
41
 
42
42
  # how do we log within this file?
43
43
  if File.exist? "#{directory}/#{options[:datapoint_filename]}"
44
- ::MultiJson.load(File.read("#{directory}/#{options[:datapoint_filename]}"), symbolize_names: true)
44
+ ::JSON.parse(File.read("#{directory}/#{options[:datapoint_filename]}"), symbolize_names: true)
45
45
  else
46
46
  fail "Data point file does not exist for #{directory}/#{options[:datapoint_filename]}"
47
47
  end
@@ -54,7 +54,7 @@ module OpenStudio
54
54
  options = defaults.merge(options)
55
55
 
56
56
  if File.exist? "#{directory}/#{options[:problem_filename]}"
57
- ::MultiJson.load(File.read("#{directory}/#{options[:problem_filename]}"), symbolize_names: true)
57
+ ::JSON.parse(File.read("#{directory}/#{options[:problem_filename]}"), symbolize_names: true)
58
58
  else
59
59
  fail "Problem file does not exist for #{directory}/#{options[:problem_filename]}"
60
60
  end
@@ -46,7 +46,7 @@ module OpenStudio
46
46
  base_path = @options[:mongoid_path] ? @options[:mongoid_path] : "#{File.dirname(__FILE__)}/mongo"
47
47
 
48
48
  Dir["#{base_path}/models/*.rb"].each { |f| require f }
49
- Mongoid.load!("#{base_path}/mongoid.yml", :development)
49
+ Mongoid.load!("#{base_path}/mongoid.yml", @options[:rails_env])
50
50
  end
51
51
 
52
52
  # Tell the system that the process has started
@@ -126,8 +126,9 @@ module OpenStudio
126
126
  begin
127
127
  require measure_file_path
128
128
  measure = Object.const_get(measure_name).new
129
- runner = ExtendedRunner.new @logger
129
+ runner = ExtendedRunner.new(@logger, @analysis_json, @datapoint_json)
130
130
  runner.former_workflow_arguments = @workflow_arguments
131
+ runner.past_results = @past_results
131
132
  rescue => e
132
133
  log_message = "Error requiring measure #{__FILE__}. Failed with #{e.message}, #{e.backtrace.join("\n")}"
133
134
  raise log_message
@@ -190,6 +191,8 @@ module OpenStudio
190
191
  end
191
192
  @workflow_arguments[workflow_item[:name].to_sym] = runner.workflow_arguments
192
193
  @logger.info "Finished measure.run for '#{workflow_item[:name]}'"
194
+
195
+ # run garbage collector after every measure to help address race conditions
193
196
  GC.start
194
197
  rescue => e
195
198
  log_message = "Runner error #{__FILE__} failed with #{e.message}, #{e.backtrace.join("\n")}"
@@ -209,6 +212,11 @@ module OpenStudio
209
212
  begin
210
213
  measure_attributes = JSON.parse(OpenStudio.toJSON(result.attributes), symbolize_names: true)
211
214
  @output_attributes[workflow_item[:name].to_sym] = measure_attributes[:attributes]
215
+ @past_results[workflow_item[:name].to_sym] = measure_attributes[:attributes]
216
+
217
+ # add an applicability flag to all the measure results
218
+ @output_attributes[workflow_item[:name].to_sym][:applicable] = result.value.value != -1
219
+ @past_results[workflow_item[:name].to_sym][:applicable] = result.value.value != -1
212
220
  rescue => e
213
221
  log_message = "#{__FILE__} failed with #{e.message}, #{e.backtrace.join("\n")}"
214
222
  @logger.error log_message
@@ -24,7 +24,7 @@ class RunEnergyplus
24
24
  # Initialize
25
25
  # param directory: base directory where the simulation files are prepared
26
26
  # param logger: logger object in which to write log messages
27
- def initialize(directory, logger, time_logger, adapter, workflow_arguments, options = {})
27
+ def initialize(directory, logger, time_logger, adapter, workflow_arguments, past_results, options = {})
28
28
  @logger = logger
29
29
 
30
30
  energyplus_path = find_energyplus
@@ -39,6 +39,7 @@ class RunEnergyplus
39
39
  @adapter = adapter
40
40
  @time_logger = time_logger
41
41
  @workflow_arguments = workflow_arguments
42
+ @past_results = past_results
42
43
  @results = {}
43
44
 
44
45
  # container for storing the energyplus files there were copied into the local directory. These will be
@@ -258,12 +259,6 @@ class RunEnergyplus
258
259
  new_objects = []
259
260
  needs_monthlyoutput = false
260
261
 
261
- # this is a workaround for OpenStudio issue #1699
262
- needs_detailedvariable = false
263
- needs_hourlyvariable = false
264
- needs_dailyvariable = false
265
- needs_runperiodvariable = false
266
-
267
262
  idf = OpenStudio::IdfFile.load(idf_filename).get
268
263
  # save the pre-preprocess file
269
264
  File.open("#{File.dirname(idf_filename)}/pre-preprocess.idf", 'w') { |f| f << idf.to_s }
@@ -275,43 +270,11 @@ class RunEnergyplus
275
270
  idf.getObjectsByName('Building Energy Performance - District Heating').empty? ||
276
271
  idf.getObjectsByName('Building Energy Performance - District Cooling').empty?
277
272
 
278
- # this is a workaround for issue #1699 -- get all the meter requests
279
- meters = []
280
- meters += idf.getObjectsByType('Output:Meter'.to_IddObjectType) unless idf.getObjectsByType('Output:Meter'.to_IddObjectType).empty?
281
- meters += idf.getObjectsByType('Output:Meter:MeterFileOnly'.to_IddObjectType) unless idf.getObjectsByType('Output:Meter:MeterFileOnly'.to_IddObjectType).empty?
282
- meters += idf.getObjectsByType('Output:Meter:Cumulative'.to_IddObjectType) unless idf.getObjectsByType('Output:Meter:Cumulative'.to_IddObjectType).empty?
283
- meters += idf.getObjectsByType('Output:Meter:Cumulative:MeterFileOnly'.to_IddObjectType) unless idf.getObjectsByType('Output:Meter:Cumulative:MeterFileOnly'.to_IddObjectType).empty?
284
-
285
- # go through each meter and check the reporting frequency
286
- meters.each do |meter|
287
- reporting_frequency = meter.getString(1, true)
288
- if reporting_frequency =~ /detailed/i
289
- needs_detailedvariable = true
290
- elsif reporting_frequency =~ /hourly/i
291
- needs_hourlyvariable = true
292
- elsif reporting_frequency =~ /daily/i
293
- needs_dailyvariable = true
294
- elsif reporting_frequency =~ /monthly/i
295
- needs_monthlyvariable = true
296
- elsif reporting_frequency =~ /runperiod|environment|annual/i
297
- needs_runperiodvariable = true
298
- end
299
- end
300
-
301
- # turn off the requests if the meter is already a variable
302
- variables = idf.getObjectsByType('Output:Variable'.to_IddObjectType)
303
- variables.each do |variable|
304
- reporting_frequency = variable.getString(2, true)
305
- if reporting_frequency =~ /detailed/i
306
- needs_detailedvariable = false
307
- elsif reporting_frequency =~ /hourly/i
308
- needs_hourlyvariable = false
309
- elsif reporting_frequency =~ /daily/i
310
- needs_dailyvariable = false
311
- elsif reporting_frequency =~ /runperiod|environment|annual/i
312
- needs_runperiodvariable = false
313
- end
314
- end
273
+ # this is a workaround for issue #1699 -- remove when 1699 is closed.
274
+ new_objects << 'Output:Variable,*,Zone Air Temperature,Hourly;'
275
+ new_objects << 'Output:Variable,*,Zone Air Relative Humidity,Daily;'
276
+ new_objects << 'Output:Variable,*,Site Outdoor Air Drybulb Temperature,Monthly;'
277
+ new_objects << 'Output:Variable,*,Site Outdoor Air Wetbulb Temperature,Timestep;'
315
278
 
316
279
  if needs_sqlobj
317
280
  @logger.info 'Adding SQL Output to IDF'
@@ -323,24 +286,14 @@ class RunEnergyplus
323
286
 
324
287
  if needs_monthlyoutput
325
288
  monthly_report_idf = File.join(File.dirname(__FILE__), 'monthly_report.idf')
326
-
327
289
  idf_file = OpenStudio::IdfFile.load(File.read(monthly_report_idf), 'EnergyPlus'.to_IddFileType).get
328
290
  idf.addObjects(idf_file.objects)
329
291
  end
330
292
 
331
- new_objects << 'Output:Variable,*,Site Outdoor Air Drybulb Temperature,Detailed;' if needs_detailedvariable
332
- new_objects << 'Output:Variable,*,Site Outdoor Air Drybulb Temperature,Hourly;' if needs_hourlyvariable
333
- new_objects << 'Output:Variable,*,Site Outdoor Air Drybulb Temperature,Daily;' if needs_dailyvariable
334
- new_objects << 'Output:Variable,*,Site Outdoor Air Drybulb Temperature,RunPeriod;' if needs_runperiodvariable
335
-
336
293
  # These are supposedly needed for the calibration report
337
294
  new_objects << 'Output:Meter:MeterFileOnly,Gas:Facility,Daily;'
338
295
  new_objects << 'Output:Meter:MeterFileOnly,Electricity:Facility,Timestep;'
339
296
  new_objects << 'Output:Meter:MeterFileOnly,Electricity:Facility,Daily;'
340
- new_objects << 'Output:Variable,*,Zone Air Temperature,Hourly;'
341
- new_objects << 'Output:Variable,*,Zone Air Relative Humidity,Hourly;'
342
- new_objects << 'Output:Variable,*,Site Outdoor Air Drybulb Temperature,Monthly;'
343
- new_objects << 'Output:Variable,*,Site Outdoor Air Drybulb Temperature,Timestep;'
344
297
 
345
298
  # Always add in the timestep facility meters
346
299
  new_objects << 'Output:Meter,Electricity:Facility,Timestep;'
@@ -24,8 +24,8 @@ class RunOpenstudio
24
24
  # Initialize
25
25
  # param directory: base directory where the simulation files are prepared
26
26
  # param logger: logger object in which to write log messages
27
- def initialize(directory, logger, time_logger, adapter, workflow_arguments, options = {})
28
- defaults = { format: 'hash', use_monthly_reports: false, analysis_root_path: '.' }
27
+ def initialize(directory, logger, time_logger, adapter, workflow_arguments, past_results, options = {})
28
+ defaults = { format: 'hash', analysis_root_path: '.' }
29
29
  warn 'Option of use_monthly_reports is deprecated. Monthly reports are always generated.' if options[:use_monthly_reports]
30
30
 
31
31
  @options = defaults.merge(options)
@@ -37,6 +37,7 @@ class RunOpenstudio
37
37
  @logger = logger
38
38
  @time_logger = time_logger
39
39
  @workflow_arguments = workflow_arguments
40
+ @past_results = past_results
40
41
  @logger.info "#{self.class} passed the following options #{@options}"
41
42
 
42
43
  # initialize instance variables that are needed in the perform section
@@ -27,7 +27,7 @@ class RunPostprocess
27
27
  # Mixin the MeasureApplication module to apply measures
28
28
  include OpenStudio::Workflow::ApplyMeasures
29
29
 
30
- def initialize(directory, logger, time_logger, adapter, workflow_arguments, options = {})
30
+ def initialize(directory, logger, time_logger, adapter, workflow_arguments, past_results, options = {})
31
31
  defaults = {}
32
32
  @options = defaults.merge(options)
33
33
  @directory = directory
@@ -36,6 +36,7 @@ class RunPostprocess
36
36
  @logger = logger
37
37
  @time_logger = time_logger
38
38
  @workflow_arguments = workflow_arguments
39
+ @past_results = past_results
39
40
  @results = {}
40
41
  @output_attributes = {}
41
42
 
@@ -19,7 +19,7 @@
19
19
 
20
20
  # Run Prelight job to prepare the directory for simulations.
21
21
  class RunPreflight
22
- def initialize(directory, logger, time_logger, adapter, workflow_arguments, options = {})
22
+ def initialize(directory, logger, time_logger, adapter, workflow_arguments, past_results, options = {})
23
23
  defaults = {}
24
24
  @options = defaults.merge(options)
25
25
  @directory = directory
@@ -27,6 +27,7 @@ class RunPreflight
27
27
  @logger = logger
28
28
  @time_logger = time_logger
29
29
  @workflow_arguments = workflow_arguments
30
+ @past_results = past_results
30
31
  @results = {}
31
32
  end
32
33
 
@@ -25,7 +25,7 @@ class RunReportingMeasures
25
25
  # Mixin the MeasureApplication module to apply measures
26
26
  include OpenStudio::Workflow::ApplyMeasures
27
27
 
28
- def initialize(directory, logger, time_logger, adapter, workflow_arguments, options = {})
28
+ def initialize(directory, logger, time_logger, adapter, workflow_arguments, past_results, options = {})
29
29
  defaults = {}
30
30
  @options = defaults.merge(options)
31
31
  @directory = directory
@@ -34,6 +34,7 @@ class RunReportingMeasures
34
34
  @logger = logger
35
35
  @time_logger = time_logger
36
36
  @workflow_arguments = workflow_arguments
37
+ @past_results = past_results
37
38
  @results = {}
38
39
  @output_attributes = {}
39
40
 
@@ -139,7 +140,9 @@ class RunReportingMeasures
139
140
  # TODO: move this to cleaner logic. Use ostruct?
140
141
  if variable[:name].include? '.'
141
142
  k, v = variable[:name].split('.')
142
- if @results.key?(k.to_sym) && @results[k.to_sym][v.to_sym]
143
+
144
+ # look for the objective function key and make sure that it is not nil. False is an okay obj function.
145
+ if @results.key?(k.to_sym) && !@results[k.to_sym][v.to_sym].nil?
143
146
  @objective_functions["objective_function_#{variable[:objective_function_index] + 1}"] = @results[k.to_sym][v.to_sym]
144
147
  if variable[:objective_function_target]
145
148
  @logger.info "Found objective function target for #{variable[:name]}"
@@ -229,17 +232,24 @@ class RunReportingMeasures
229
232
  name: 'standard_reports'
230
233
  }
231
234
  @logger.info 'Running packaged Standard Reports measures'
232
- apply_measure(workflow_item)
235
+ begin
236
+ apply_measure(workflow_item)
237
+ rescue => e
238
+ @logger.warn "Error applying Standard Reports measure. Failed with #{e.message}, #{e.backtrace.join("\n")} \n Continuing."
239
+ end
233
240
 
234
- workflow_item = {
235
- display_name: 'Calibration Reports',
236
- measure_definition_directory: File.expand_path(File.join(OpenStudio::BCLMeasure.calibrationReportMeasure.directory.to_s, 'measure.rb')),
237
- measure_definition_class_name: 'CalibrationReports',
238
- measure_type: 'CalibrationReports',
239
- name: 'calibration_reports'
240
- }
241
- @logger.info 'Running packaged Calibration Reports measures'
242
- apply_measure(workflow_item)
241
+ @logger.info "Found #{@model.getUtilityBills.length} utility bills"
242
+ if @model.getUtilityBills.length > 0
243
+ workflow_item = {
244
+ display_name: 'Calibration Reports',
245
+ measure_definition_directory: File.expand_path(File.join(OpenStudio::BCLMeasure.calibrationReportMeasure.directory.to_s, 'measure.rb')),
246
+ measure_definition_class_name: 'CalibrationReports',
247
+ measure_type: 'CalibrationReports',
248
+ name: 'calibration_reports'
249
+ }
250
+ @logger.info 'Running packaged Calibration Reports measures'
251
+ apply_measure(workflow_item)
252
+ end
243
253
 
244
254
  @logger.info 'Finished Running Packaged Measures'
245
255
  end
@@ -27,7 +27,7 @@ class RunRunmanager
27
27
  # Initialize
28
28
  # param directory: base directory where the simulation files are prepared
29
29
  # param logger: logger object in which to write log messages
30
- def initialize(directory, logger, time_logger, adapter, workflow_arguments, options = {})
30
+ def initialize(directory, logger, time_logger, adapter, workflow_arguments, past_results, options = {})
31
31
  @logger = logger
32
32
 
33
33
  energyplus_path = find_energyplus
@@ -46,6 +46,7 @@ class RunRunmanager
46
46
  @logger.info "#{self.class} passed the following options #{@options}"
47
47
  @time_logger = time_logger
48
48
  @workflow_arguments = workflow_arguments
49
+ @past_results = past_results
49
50
 
50
51
  # initialize instance variables that are needed in the perform section
51
52
  @model = nil
@@ -22,7 +22,7 @@ require 'libxml'
22
22
  # This actually belongs as another class that gets added as a state dynamically
23
23
  class RunXml
24
24
  # RunXml
25
- def initialize(directory, logger, time_logger, adapter, workflow_arguments, options = {})
25
+ def initialize(directory, logger, time_logger, adapter, workflow_arguments, past_results, options = {})
26
26
  defaults = { analysis_root_path: '.', xml_library_file: 'xml_runner.rb' }
27
27
  @options = defaults.merge(options)
28
28
  @directory = directory
@@ -33,6 +33,7 @@ class RunXml
33
33
  @logger = logger
34
34
  @time_logger = time_logger
35
35
  @workflow_arguments = workflow_arguments
36
+ @past_results = past_results
36
37
  @logger.info "#{self.class} passed the following options #{@options}"
37
38
 
38
39
  # initialize instance variables that are needed in the perform section
@@ -95,6 +95,7 @@ module OpenStudio
95
95
  @directory = directory
96
96
  @time_logger = TimeLogger.new
97
97
  @workflow_arguments = {}
98
+ @past_results = {}
98
99
  # TODO: run directory is a convention right now. Move to a configuration item
99
100
  @run_directory = "#{@directory}/run"
100
101
 
@@ -310,7 +311,7 @@ module OpenStudio
310
311
  require_relative "jobs/#{from_method}/#{from_method}"
311
312
  klass_name = from_method.to_s.split('_').map(&:capitalize) * ''
312
313
  @logger.info "Getting method for state transition '#{from_method}'"
313
- klass = Object.const_get(klass_name).new(@directory, @logger, @time_logger, @adapter, @workflow_arguments, get_job_options)
314
+ klass = Object.const_get(klass_name).new(@directory, @logger, @time_logger, @adapter, @workflow_arguments, @past_results, get_job_options)
314
315
  klass
315
316
  end
316
317
  end
@@ -19,6 +19,6 @@
19
19
 
20
20
  module OpenStudio
21
21
  module Workflow
22
- VERSION = '0.2.0'
22
+ VERSION = '1.0.0.pat0'
23
23
  end
24
24
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openstudio-workflow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.0.pat0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicholas Long
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-09 00:00:00.000000000 Z
11
+ date: 2016-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - ~>
102
102
  - !ruby/object:Gem::Version
103
- version: 1.1.7
103
+ version: 1.2.0
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - ~>
109
109
  - !ruby/object:Gem::Version
110
- version: 1.1.7
110
+ version: 1.2.0
111
111
  description: Run OpenStudio based simulations using EnergyPlus
112
112
  email:
113
113
  - nicholas.long@nrel.gov
@@ -115,6 +115,10 @@ executables: []
115
115
  extensions: []
116
116
  extra_rdoc_files: []
117
117
  files:
118
+ - CHANGELOG.md
119
+ - README.md
120
+ - Rakefile
121
+ - lib/openstudio-workflow.rb
118
122
  - lib/openstudio/extended_runner.rb
119
123
  - lib/openstudio/workflow/adapter.rb
120
124
  - lib/openstudio/workflow/adapters/local.rb
@@ -132,10 +136,6 @@ files:
132
136
  - lib/openstudio/workflow/run.rb
133
137
  - lib/openstudio/workflow/time_logger.rb
134
138
  - lib/openstudio/workflow/version.rb
135
- - lib/openstudio-workflow.rb
136
- - README.md
137
- - CHANGELOG.md
138
- - Rakefile
139
139
  homepage: https://github.com/NREL/OpenStudio-workflow-gem
140
140
  licenses:
141
141
  - LGPL
@@ -151,12 +151,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
151
151
  version: 1.9.3
152
152
  required_rubygems_version: !ruby/object:Gem::Requirement
153
153
  requirements:
154
- - - '>='
154
+ - - '>'
155
155
  - !ruby/object:Gem::Version
156
- version: '0'
156
+ version: 1.3.1
157
157
  requirements: []
158
158
  rubyforge_project:
159
- rubygems_version: 2.0.14.1
159
+ rubygems_version: 2.6.6
160
160
  signing_key:
161
161
  specification_version: 4
162
162
  summary: Workflow Manager