From 25a516d6a68eeb8d4727d102ff81a3b89e243b5a Mon Sep 17 00:00:00 2001 From: heslinge Date: Thu, 9 Jul 2026 13:33:02 -0600 Subject: [PATCH] Make boss static --- lib/BOSS/boss.rb | 37 ++++++++----------- lib/boss_cli.rb | 14 +++---- .../integration/write_and_run_osws_spec.rb | 6 +-- 3 files changed, 22 insertions(+), 35 deletions(-) diff --git a/lib/BOSS/boss.rb b/lib/BOSS/boss.rb index ab17f31..2dfb32e 100644 --- a/lib/BOSS/boss.rb +++ b/lib/BOSS/boss.rb @@ -20,44 +20,36 @@ class Boss # @param output_dir [String] # @param epw_file_path [String] if provided, full/path/to/my.epw # @param standard_to_be_used [String] - def initialize(xml_file_path, output_dir, epw_file_path, standard_to_be_used) - @xml_file_path = xml_file_path - @output_dir = output_dir - @epw_file_path = epw_file_path - @standard_to_be_used = standard_to_be_used - + def self.write_baseline_osw(xml_file_path, output_dir, epw_file_path, standard_to_be_used) # check file exists if !File.exist?(xml_file_path) message = "File '#{xml_file_path}' does not exist" - OpenStudio.logFree(OpenStudio::Error, 'BOSS.initialize', message) + OpenStudio.logFree(OpenStudio::Error, 'BOSS.write_baseline_osw', message) raise message end - # open file + # open file and prepare to read it xml_data = File.read(xml_file_path) bsync_doc = REXML::Document.new(xml_data, ignore_whitespace_nodes: :all) + bsync_reader = BOSS::BuildingSyncReader.new(bsync_doc, epw_file_path, standard_to_be_used) - @bsync_reader = BOSS::BuildingSyncReader.new(bsync_doc, epw_file_path, standard_to_be_used) - end - - def write_baseline_osw # start with an empty baseline workflow file = File.read(EMPTY_BASELINE_OSW_PATH) baseline_osw = JSON.parse(file, symbolize_names: true) # populate the baseline measures - OSWArgPopulator::populate_set_run_period_args(baseline_osw, @bsync_reader) - OSWArgPopulator::populate_change_building_location_args(baseline_osw, @bsync_reader) + OSWArgPopulator::populate_set_run_period_args(baseline_osw, bsync_reader) + OSWArgPopulator::populate_change_building_location_args(baseline_osw, bsync_reader) - OSWArgPopulator::populate_create_bar_from_building_type_ratios_args(baseline_osw, @bsync_reader) - OSWArgPopulator::populate_create_typical_building_from_model_args(baseline_osw, @bsync_reader) + OSWArgPopulator::populate_create_bar_from_building_type_ratios_args(baseline_osw, bsync_reader) + OSWArgPopulator::populate_create_typical_building_from_model_args(baseline_osw, bsync_reader) - OSWArgPopulator::populate_set_lighting_loads_by_LPD_args(baseline_osw, @bsync_reader) - OSWArgPopulator::populate_set_electric_equipment_loads_by_epd_args(baseline_osw, @bsync_reader) - OSWArgPopulator::populate_openstudio_results_args(baseline_osw, @bsync_reader) + OSWArgPopulator::populate_set_lighting_loads_by_LPD_args(baseline_osw, bsync_reader) + OSWArgPopulator::populate_set_electric_equipment_loads_by_epd_args(baseline_osw, bsync_reader) + OSWArgPopulator::populate_openstudio_results_args(baseline_osw, bsync_reader) # write to file - workflow_dir = File.join(@output_dir, 'baseline') + workflow_dir = File.join(output_dir, 'baseline') FileUtils.mkdir_p(workflow_dir) osw_path = File.join(workflow_dir, 'in.osw') File.open(osw_path, 'w') do |file| @@ -66,9 +58,10 @@ def write_baseline_osw osw_path end - def run_baseline_osw + # @param osw_dir [String] path to osws + def self.run_baseline_osw(osw_dir) # assert we have a baseline osm - baseline_osw_path = File.join(@output_dir, 'baseline', 'in.osw') + baseline_osw_path = File.join(osw_dir, 'baseline', 'in.osw') # assert baseline exist if !File.file?(baseline_osw_path) diff --git a/lib/boss_cli.rb b/lib/boss_cli.rb index 1e22dcd..6d1743a 100755 --- a/lib/boss_cli.rb +++ b/lib/boss_cli.rb @@ -17,23 +17,19 @@ class CLI < Thor option :run, :aliases => "-r", :desc => "if set, will also run the baseline" def write_baseline_osw(buildingsync_file) standard_version = options[:standard_version] || ASHRAE90_1 - boss = BOSS::Boss.new(buildingsync_file, options[:output_path], options[:epw_path], standard_version) - osw_path = boss.write_baseline_osw + osw_path = BOSS::Boss.write_baseline_osw(buildingsync_file, options[:output_path], options[:epw_path], standard_version) puts "Baseline OSW written to: #{osw_path}" if options[:run] puts "running!" - boss.run_baseline_osw + BOSS::Boss.run_baseline_osw(options[:output_path]) end end - desc "run_osw BUILDINGSYNC_FILE", "runs an existing baseline osw from the output path." + desc "run_osw", "runs an existing baseline osw from the output path." option :output_path, :required => true, :aliases => "-o", :desc => "path where the baseline osw exists (expects baseline/in.osw)." - option :epw_path, :aliases => "-w", :desc => "path to weather file. If not given, one is derived from the BUILDINGSYNC_FILE." - option :standard_version, :aliases => "-v", :desc => "building standard to use (eg ASHRAE90.1 or CaliforniaTitle24). Defaults to ASHRAE90.1" - def run_osw(buildingsync_file) + def run_osw standard_version = options[:standard_version] || ASHRAE90_1 - boss = BOSS::Boss.new(buildingsync_file, options[:output_path], options[:epw_path], standard_version) - boss.run_baseline_osw + BOSS::Boss.run_baseline_osw(options[:output_path]) end end end diff --git a/spec/tests/integration/write_and_run_osws_spec.rb b/spec/tests/integration/write_and_run_osws_spec.rb index cbb2b10..180c111 100644 --- a/spec/tests/integration/write_and_run_osws_spec.rb +++ b/spec/tests/integration/write_and_run_osws_spec.rb @@ -48,11 +48,9 @@ output_path = File.join(SPEC_OUTPUT_DIR, schema_version, "write_and_run_baseline_osw" , "#{File.basename(xml_path, File.extname(xml_path))}") puts output_path - boss = BOSS::Boss.new(xml_path, output_path, epw_path, standard) - # Action - boss.write_baseline_osw - boss.run_baseline_osw + BOSS::Boss.write_baseline_osw(xml_path, output_path, epw_path, standard) + BOSS::Boss.run_baseline_osw(output_path) # Assertion puts output_path