Class: UspsApi::Configuration

Inherits:
CoreLibrary::HttpClientConfiguration
  • Object
show all
Defined in:
lib/usps_api/configuration.rb

Overview

All configuration including auth info and base URI for the API access are configured in this class.

Constant Summary collapse

ENVIRONMENTS =

All the environments the SDK can run in.

{
  Environment::PRODUCTION => {
    Server::DEFAULT => 'https://apis.usps.com/',
    Server::AUTH_SERVER => 'https://apis.usps.com/oauth2/v3'
  },
  Environment::TESTING => {
    Server::DEFAULT => 'https://apis-tem.usps.com/',
    Server::AUTH_SERVER => 'https://apis-tem.usps.com/oauth2/v3'
  }
}.freeze

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(connection: nil, adapter: :net_http_persistent, timeout: 30, max_retries: 0, retry_interval: 1, backoff_factor: 2, retry_statuses: [408, 413, 429, 500, 502, 503, 504, 521, 522, 524], retry_methods: %i[get put],, http_callback: nil, proxy_settings: nil, logging_configuration: nil, environment: Environment::PRODUCTION, oauth_authorization_code_credentials: nil, oauth_client_credentials_credentials: nil, basic_auth_credentials: nil, bearer_token_auth_credentials: nil) ⇒ Configuration

Returns a new instance of Configuration.



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/usps_api/configuration.rb', line 65

def initialize(
  connection: nil, adapter: :net_http_persistent, timeout: 30,
  max_retries: 0, retry_interval: 1, backoff_factor: 2,
  retry_statuses: [408, 413, 429, 500, 502, 503, 504, 521, 522, 524],
  retry_methods: %i[get put], http_callback: nil, proxy_settings: nil,
  logging_configuration: nil, environment: Environment::PRODUCTION,
  oauth_authorization_code_credentials: nil,
  oauth_client_credentials_credentials: nil, basic_auth_credentials: nil,
  bearer_token_auth_credentials: nil
)
  super connection: connection, adapter: adapter, timeout: timeout,
        max_retries: max_retries, retry_interval: retry_interval,
        backoff_factor: backoff_factor, retry_statuses: retry_statuses,
        retry_methods: retry_methods, http_callback: http_callback,
        proxy_settings: proxy_settings,
        logging_configuration: logging_configuration

  # Current API environment
  @environment = String(environment)

  # The object holding OAuth 2 Authorization Code Grant credentials
  @oauth_authorization_code_credentials = oauth_authorization_code_credentials

  # The object holding OAuth 2 Client Credentials Grant credentials
  @oauth_client_credentials_credentials = oauth_client_credentials_credentials

  # The object holding Basic Authentication credentials
  @basic_auth_credentials = basic_auth_credentials

  # The object holding OAuth 2 Bearer token credentials
  @bearer_token_auth_credentials = bearer_token_auth_credentials

  # The Http Client to use for making requests.
  set_http_client CoreLibrary::FaradayClient.new(self)
end

Class Attribute Details

.environmentsObject (readonly)

Returns the value of attribute environments.



62
63
64
# File 'lib/usps_api/configuration.rb', line 62

def environments
  @environments
end

Instance Attribute Details

#basic_auth_credentialsObject (readonly)

The attribute readers for properties.



57
58
59
# File 'lib/usps_api/configuration.rb', line 57

def basic_auth_credentials
  @basic_auth_credentials
end

#bearer_token_auth_credentialsObject (readonly)

The attribute readers for properties.



57
58
59
# File 'lib/usps_api/configuration.rb', line 57

def bearer_token_auth_credentials
  @bearer_token_auth_credentials
end

#environmentObject (readonly)

The attribute readers for properties.



57
58
59
# File 'lib/usps_api/configuration.rb', line 57

def environment
  @environment
end

#oauth_authorization_code_credentialsObject (readonly)

The attribute readers for properties.



57
58
59
# File 'lib/usps_api/configuration.rb', line 57

def oauth_authorization_code_credentials
  @oauth_authorization_code_credentials
end

#oauth_client_credentials_credentialsObject (readonly)

The attribute readers for properties.



57
58
59
# File 'lib/usps_api/configuration.rb', line 57

def oauth_client_credentials_credentials
  @oauth_client_credentials_credentials
end

Class Method Details

.build_default_config_from_envObject

Builds a Configuration instance using environment variables.



162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
# File 'lib/usps_api/configuration.rb', line 162

def self.build_default_config_from_env
  # === Core environment ===
  environment = Environment.from_value(ENV.fetch('ENVIRONMENT', 'production'))
  timeout = (ENV['TIMEOUT'] || 30).to_f
  max_retries = (ENV['MAX_RETRIES'] || 0).to_i
  retry_interval = (ENV['RETRY_INTERVAL'] || 1).to_f
  backoff_factor = (ENV['BACKOFF_FACTOR'] || 2).to_f
  retry_statuses = ENV.fetch('RETRY_STATUSES',
                             '[408, 413, 429, 500, 502, 503, 504, 521, 522, 524]').gsub(/[\[\]]/, '')
                                      .split(',')
                                      .map(&:strip)
                                      .map do |item|
                                        item.match?(/\A\d+\z/) ? item.to_i : item.downcase
                                      end
  retry_methods = ENV.fetch('RETRY_METHODS', '%i[get put]').gsub(/[\[\]]/, '')
                                      .split(',')
                                      .map(&:strip)
                                      .map do |item|
                                        item.match?(/\A\d+\z/) ? item.to_i : item.downcase
                                      end

  # === Authentication credentials ===
  oauth_authorization_code_credentials = OauthAuthorizationCodeCredentials.from_env
  oauth_client_credentials_credentials = OauthClientCredentialsCredentials.from_env
  basic_auth_credentials = BasicAuthCredentials.from_env
  bearer_token_auth_credentials = BearerTokenAuthCredentials.from_env

  # === Proxy settings ===
  proxy_settings = ProxySettings.from_env
  # === Logging Configuration ===
  logging_configuration = LoggingConfiguration.from_env if LoggingConfiguration.any_logging_configured?

  Configuration.new(
    environment: environment,
    timeout: timeout,
    max_retries: max_retries,
    retry_interval: retry_interval,
    backoff_factor: backoff_factor,
    retry_statuses: retry_statuses,
    retry_methods: retry_methods,
    oauth_authorization_code_credentials: oauth_authorization_code_credentials,
    oauth_client_credentials_credentials: oauth_client_credentials_credentials,
    basic_auth_credentials: basic_auth_credentials,
    bearer_token_auth_credentials: bearer_token_auth_credentials,
    proxy_settings: proxy_settings,
    logging_configuration: logging_configuration
  )
end

Instance Method Details

#clone_with(connection: nil, adapter: nil, timeout: nil, max_retries: nil, retry_interval: nil, backoff_factor: nil, retry_statuses: nil, retry_methods: nil, http_callback: nil, proxy_settings: nil, logging_configuration: nil, environment: nil, oauth_authorization_code_credentials: nil, oauth_client_credentials_credentials: nil, basic_auth_credentials: nil, bearer_token_auth_credentials: nil) ⇒ Object



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/usps_api/configuration.rb', line 101

def clone_with(connection: nil, adapter: nil, timeout: nil,
               max_retries: nil, retry_interval: nil, backoff_factor: nil,
               retry_statuses: nil, retry_methods: nil, http_callback: nil,
               proxy_settings: nil, logging_configuration: nil,
               environment: nil, oauth_authorization_code_credentials: nil,
               oauth_client_credentials_credentials: nil,
               basic_auth_credentials: nil,
               bearer_token_auth_credentials: nil)
  connection ||= self.connection
  adapter ||= self.adapter
  timeout ||= self.timeout
  max_retries ||= self.max_retries
  retry_interval ||= self.retry_interval
  backoff_factor ||= self.backoff_factor
  retry_statuses ||= self.retry_statuses
  retry_methods ||= self.retry_methods
  http_callback ||= self.http_callback
  proxy_settings ||= self.proxy_settings
  logging_configuration ||= self.logging_configuration
  environment ||= self.environment
  oauth_authorization_code_credentials ||= self.oauth_authorization_code_credentials
  oauth_client_credentials_credentials ||= self.oauth_client_credentials_credentials
  basic_auth_credentials ||= self.basic_auth_credentials
  bearer_token_auth_credentials ||= self.bearer_token_auth_credentials

  Configuration.new(
    connection: connection, adapter: adapter, timeout: timeout,
    max_retries: max_retries, retry_interval: retry_interval,
    backoff_factor: backoff_factor, retry_statuses: retry_statuses,
    retry_methods: retry_methods, http_callback: http_callback,
    proxy_settings: proxy_settings,
    logging_configuration: logging_configuration, environment: environment,
    oauth_authorization_code_credentials: oauth_authorization_code_credentials,
    oauth_client_credentials_credentials: oauth_client_credentials_credentials,
    basic_auth_credentials: basic_auth_credentials,
    bearer_token_auth_credentials: bearer_token_auth_credentials
  )
end

#get_base_uri(server = Server::DEFAULT) ⇒ String

Generates the appropriate base URI for the environment and the server. required.

Parameters:

  • server (Configuration::Server) (defaults to: Server::DEFAULT)

    The server enum for which the base URI is

Returns:

  • (String)

    The base URI.



157
158
159
# File 'lib/usps_api/configuration.rb', line 157

def get_base_uri(server = Server::DEFAULT)
  ENVIRONMENTS[environment][server].clone
end