Class: URBANopt::REopt::URLConfig

Inherits:
Object
  • Object
show all
Defined in:
lib/urbanopt/reopt/url_config.rb

Overview

URLConfig provides centralized configuration for all REopt API endpoint URLs. Supports environment variable overrides and default production URLs.

Configuration priority:

  1. REOPT_BASE_URL environment variable

  2. Default production URL (developer.nlr.gov)

Constant Summary collapse

DEFAULT_BASE_URL =

Default production base URL for REopt API

'https://developer.nlr.gov/api/reopt/v3'

Instance Method Summary collapse

Constructor Details

#initialize(api_key: nil) ⇒ URLConfig

Initialize URL configuration

parameters:
  • api_key - String - API key for endpoints that require authentication



29
30
31
32
# File 'lib/urbanopt/reopt/url_config.rb', line 29

def initialize(api_key: nil)
  @api_key = api_key
  @base_url = determine_base_url
end

Instance Method Details

#base_urlObject

Get the base URL for REopt API

return:

String - Base URL without trailing slash



39
40
41
# File 'lib/urbanopt/reopt/url_config.rb', line 39

def base_url
  @base_url
end

#configure_ssl(http) ⇒ Object

Configure SSL settings for HTTP connection based on URL scheme

parameters:
  • http - Net::HTTP - HTTP connection object to configure



129
130
131
132
133
# File 'lib/urbanopt/reopt/url_config.rb', line 129

def configure_ssl(http)
  if @base_url.start_with?('https')
    http.use_ssl = true
  end
end

#erp_results_uri(run_uuid) ⇒ Object

Get URI for resilience results endpoint

parameters:
  • run_uuid - String - Unique identifier for the resilience job

return:

URI - Complete URI for resilience results



96
97
98
99
100
# File 'lib/urbanopt/reopt/url_config.rb', line 96

def erp_results_uri(run_uuid)
  url = "#{@base_url}/erp/#{run_uuid}/results"
  url += requires_api_key? ? "?api_key=#{@api_key}" : ''
  URI.parse(url)
end

#erp_submit_uriObject

Get URI for resilience job submission endpoint

return:

URI - Complete URI for ERP submission



82
83
84
85
86
# File 'lib/urbanopt/reopt/url_config.rb', line 82

def erp_submit_uri
  url = "#{@base_url}/erp"
  url += requires_api_key? ? "?api_key=#{@api_key}" : '/'
  URI.parse(url)
end

#requires_api_key?Boolean

Check if this URL requires an API key

return:

Bool - True if API key is required

Returns:

  • (Boolean)


48
49
50
# File 'lib/urbanopt/reopt/url_config.rb', line 48

def requires_api_key?
  @base_url.include?('developer.nlr.gov') || @base_url.include?('developer.nrel.gov')
end

#results_uri(run_uuid) ⇒ Object

Get URI for job results endpoint

parameters:
  • run_uuid - String - Unique identifier for the optimization job

return:

URI - Complete URI for job results



71
72
73
74
75
# File 'lib/urbanopt/reopt/url_config.rb', line 71

def results_uri(run_uuid)
  url = "#{@base_url}/job/#{run_uuid}/results"
  url += requires_api_key? ? "?api_key=#{@api_key}" : ''
  URI.parse(url)
end

#submit_uriObject

Get URI for job submission endpoint

return:

URI - Complete URI for job submission



57
58
59
60
61
# File 'lib/urbanopt/reopt/url_config.rb', line 57

def submit_uri
  url = "#{@base_url}/job"
  url += requires_api_key? ? "?api_key=#{@api_key}" : '/'
  URI.parse(url)
end

#url_for(endpoint, run_uuid: nil) ⇒ Object

Get URL string for any endpoint (used by GHP API)

parameters:
  • endpoint - String - Endpoint path (e.g., ‘job’, ‘erp’)

  • run_uuid - String - Optional run UUID for results endpoints

return:

String - Complete URL string



111
112
113
114
115
116
117
118
119
120
121
# File 'lib/urbanopt/reopt/url_config.rb', line 111

def url_for(endpoint, run_uuid: nil)
  path = run_uuid ? "/#{endpoint}/#{run_uuid}/results" : "/#{endpoint}"
  url = "#{@base_url}#{path}"
  
  if requires_api_key?
    separator = path.include?('/results') ? '?' : (endpoint == 'erp' ? '?' : '?')
    url += "#{separator}api_key=#{@api_key}"
  end
  
  url
end