Class: PetstoreApiClient::Configuration

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

Overview

Configuration management for Petstore API client

Centralized configuration for all client settings including authentication, timeouts, retries, and pagination. Supports multiple authentication strategies via feature flags.

rubocop:disable Metrics/ClassLength

Examples:

Basic configuration

config = Configuration.new
config.api_key = "special-key"
config.timeout = 60

Block-based configuration

config = Configuration.new
config.configure do |c|
  c.auth_strategy = :oauth2
  c.oauth2_client_id = "my-id"
  c.oauth2_client_secret = "my-secret"
end

Since:

  • 0.1.0

Constant Summary collapse

DEFAULT_BASE_URL =

Default API base URL for Petstore API

Since:

  • 0.1.0

"https://petstore.swagger.io/v2"
DEFAULT_PAGE_SIZE =

Default number of items per page for paginated endpoints

Since:

  • 0.1.0

25
MAX_PAGE_SIZE =

Maximum allowed page size to prevent abuse

Since:

  • 0.1.0

100
VALID_AUTH_STRATEGIES =

Valid authentication strategy options

Since:

  • 0.1.0

%i[none api_key oauth2 both].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Initialize configuration with default values

Sets sensible defaults for all configuration options:

  • base_url: Petstore API endpoint

  • timeout: 30 seconds

  • retry_enabled: true

  • auth_strategy: :api_key (backward compatible)

Examples:

config = Configuration.new
config.base_url # => "https://petstore.swagger.io/v2"
config.timeout # => 30

Since:

  • 0.1.0



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/petstore_api_client/configuration.rb', line 91

def initialize
  @base_url = DEFAULT_BASE_URL
  @api_key = nil
  @timeout = 30 # seconds
  @open_timeout = 10 # seconds
  @retry_enabled = true # Auto-retry transient failures
  @max_retries = 2 # Number of retries for failed requests
  @default_page_size = DEFAULT_PAGE_SIZE # Default items per page for pagination
  @max_page_size = MAX_PAGE_SIZE # Maximum items per page (prevents abuse)
  @auth_strategy = :api_key # Default strategy for backward compatibility

  # OAuth2 credentials
  @oauth2_client_id = nil
  @oauth2_client_secret = nil
  @oauth2_token_url = nil
  @oauth2_scope = nil
end

Instance Attribute Details

#api_keyObject

Since:

  • 0.1.0



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

def api_key
  @api_key
end

#auth_strategySymbol

Returns Authentication strategy (:none, :api_key, :oauth2, :both).

Returns:

  • (Symbol)

    Authentication strategy (:none, :api_key, :oauth2, :both)



66
67
68
# File 'lib/petstore_api_client/configuration.rb', line 66

def auth_strategy
  @auth_strategy
end

#base_urlString

Returns Base URL for API endpoints.

Returns:

  • (String)

    Base URL for API endpoints



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

def base_url
  @base_url
end

#default_page_sizeInteger

Returns Default items per page for pagination.

Returns:

  • (Integer)

    Default items per page for pagination



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

attr_accessor :base_url, :timeout, :open_timeout, :retry_enabled, :max_retries,
:default_page_size, :max_page_size

#max_page_sizeInteger

Returns Maximum items per page for pagination.

Returns:

  • (Integer)

    Maximum items per page for pagination



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

attr_accessor :base_url, :timeout, :open_timeout, :retry_enabled, :max_retries,
:default_page_size, :max_page_size

#max_retriesInteger

Returns Maximum number of retry attempts.

Returns:

  • (Integer)

    Maximum number of retry attempts



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

attr_accessor :base_url, :timeout, :open_timeout, :retry_enabled, :max_retries,
:default_page_size, :max_page_size

#oauth2_client_idString?

Returns OAuth2 client ID.

Returns:

  • (String, nil)

    OAuth2 client ID



76
77
78
# File 'lib/petstore_api_client/configuration.rb', line 76

def oauth2_client_id
  @oauth2_client_id
end

#oauth2_client_secretString?

Returns OAuth2 client secret.

Returns:

  • (String, nil)

    OAuth2 client secret



76
# File 'lib/petstore_api_client/configuration.rb', line 76

attr_accessor :oauth2_client_id, :oauth2_client_secret, :oauth2_token_url, :oauth2_scope

#oauth2_scopeString?

Returns OAuth2 scope (space-separated permissions).

Returns:

  • (String, nil)

    OAuth2 scope (space-separated permissions)



76
# File 'lib/petstore_api_client/configuration.rb', line 76

attr_accessor :oauth2_client_id, :oauth2_client_secret, :oauth2_token_url, :oauth2_scope

#oauth2_token_urlString?

Returns OAuth2 token endpoint URL.

Returns:

  • (String, nil)

    OAuth2 token endpoint URL



76
# File 'lib/petstore_api_client/configuration.rb', line 76

attr_accessor :oauth2_client_id, :oauth2_client_secret, :oauth2_token_url, :oauth2_scope

#open_timeoutInteger

Returns Connection open timeout in seconds.

Returns:

  • (Integer)

    Connection open timeout in seconds



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

attr_accessor :base_url, :timeout, :open_timeout, :retry_enabled, :max_retries,
:default_page_size, :max_page_size

#retry_enabledBoolean

Returns Enable automatic retry for transient failures.

Returns:

  • (Boolean)

    Enable automatic retry for transient failures



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

attr_accessor :base_url, :timeout, :open_timeout, :retry_enabled, :max_retries,
:default_page_size, :max_page_size

#timeoutInteger

Returns Request timeout in seconds.

Returns:

  • (Integer)

    Request timeout in seconds



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

attr_accessor :base_url, :timeout, :open_timeout, :retry_enabled, :max_retries,
:default_page_size, :max_page_size

Instance Method Details

#authenticatorAuthentication::Base

Build authenticator instance based on auth_strategy

Returns appropriate authentication strategy based on auth_strategy setting:

  • :none - No authentication

  • :api_key - API Key authentication only

  • :oauth2 - OAuth2 authentication only

  • :both - Both API Key AND OAuth2 (composite)

The authenticator is memoized and reused until reset_authenticator! is called.

Examples:

config.auth_strategy = :oauth2
config.authenticator # => #<OAuth2 client_id=...>

Returns:

Raises:

Since:

  • 0.1.0



148
149
150
# File 'lib/petstore_api_client/configuration.rb', line 148

def authenticator
  @authenticator ||= build_authenticator
end

#configure {|self| ... } ⇒ Configuration

Configure settings via block

Yields self to the block for convenient configuration. Automatically resets authenticator after configuration.

Examples:

config.configure do |c|
  c.api_key = "special-key"
  c.timeout = 60
  c.retry_enabled = false
end

Yield Parameters:

Returns:

Since:

  • 0.1.0



185
186
187
188
189
# File 'lib/petstore_api_client/configuration.rb', line 185

def configure
  yield(self) if block_given?
  reset_authenticator! # Rebuild authenticator when config changes
  self
end

#reset_authenticator!void

This method returns an undefined value.

Reset memoized authenticator

Call this when configuration changes to rebuild the authenticator with new settings.

Examples:

config.auth_strategy = :api_key
config.authenticator # => ApiKey instance
config.auth_strategy = :oauth2
config.reset_authenticator!
config.authenticator # => OAuth2 instance

Since:

  • 0.1.0



166
167
168
# File 'lib/petstore_api_client/configuration.rb', line 166

def reset_authenticator!
  @authenticator = nil
end

#validate!Boolean

Validate configuration settings

Checks that all required configuration is valid. Currently validates:

  • base_url is present

  • authenticator is properly configured (if auth is enabled)

Examples:

config = Configuration.new
config.validate! # => true

config.base_url = nil
config.validate! # raises ValidationError

Returns:

  • (Boolean)

    true if valid

Raises:

Since:

  • 0.1.0



208
209
210
211
212
213
214
215
# File 'lib/petstore_api_client/configuration.rb', line 208

def validate!
  raise ValidationError, "base_url can't be nil" if base_url.nil? || base_url.empty?

  # Validate authenticator if configured
  authenticator.is_a?(Authentication::ApiKey) && authenticator.configured?

  true
end