Class: URBANopt::CLI::UrbanOptCLI::DefaultContextLoader

Inherits:
Object
  • Object
show all
Defined in:
lib/uo_cli.rb

Overview

Helper class: Manages loading or generating default post-processor context Encapsulates logic for cache validation and CSV header rehydration

Instance Method Summary collapse

Constructor Details

#initialize(root_dir, scenario_name, run_func) ⇒ DefaultContextLoader

Returns a new instance of DefaultContextLoader.



52
53
54
55
56
57
58
59
60
61
# File 'lib/uo_cli.rb', line 52

def initialize(root_dir, scenario_name, run_func)
  @root_dir = root_dir
  @scenario_name = scenario_name
  @run_func = run_func
  @run_dir = File.join(root_dir, 'run', scenario_name.downcase)
  @default_report_json = File.join(@run_dir, 'default_scenario_report.json')
  @default_report_csv = File.join(@run_dir, 'default_scenario_report.csv')
  @post_processor = nil
  @scenario_report = nil
end

Instance Method Details

#load_or_generateObject

Load existing default report from cache, or generate if missing



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/uo_cli.rb', line 64

def load_or_generate
  @post_processor ||= URBANopt::Scenario::ScenarioDefaultPostProcessor.new(@run_func)

  if File.exist?(@default_report_json) && File.exist?(@default_report_csv)
    puts "\nDefault post-process outputs already exist for '#{@scenario_name}'. Skipping default re-run."
    begin
      @scenario_report = load_cached_report
      puts 'Loaded existing default post-process outputs.'
    rescue StandardError => e
      puts "\nWARNING: Error loading cached default report: #{e.message}. Re-running default post-processor."
      @scenario_report = @post_processor.run
      @scenario_report.save(file_name = 'default_scenario_report', save_feature_reports: false)
      @scenario_report.feature_reports.each(&:save)
      puts 'Default post-process complete.'
    end
  else
    puts "\nDefault post-process outputs not found for '#{@scenario_name}'. Running default post-process first."
    @scenario_report = @post_processor.run
    @scenario_report.save(file_name = 'default_scenario_report', save_feature_reports: false)
    @scenario_report.feature_reports.each(&:save)
    puts 'Default post-process complete.'
  end

  @scenario_report
end

#post_processorObject

Get the post-processor instance



91
92
93
94
# File 'lib/uo_cli.rb', line 91

def post_processor
  @post_processor ||= URBANopt::Scenario::ScenarioDefaultPostProcessor.new(@run_func)
  @post_processor
end