Class: OctaSpace::Configuration

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

Overview

Global and per-client configuration for the OctaSpace SDK

Examples:

Global configuration (Rails initializer)

OctaSpace.configure do |config|
  config.api_key    = ENV["OCTA_API_KEY"]
  config.keep_alive = true
  config.pool_size  = ENV.fetch("RAILS_MAX_THREADS", 5).to_i
  config.logger     = Rails.logger
end

Constant Summary collapse

DEFAULTS =
{
  base_url: "https://api.octa.space",
  open_timeout: 10,
  read_timeout: 30,
  write_timeout: 30,
  keep_alive: false,
  pool_size: 5,
  pool_timeout: 5,
  idle_timeout: 60,
  max_retries: 2,
  retry_interval: 0.5,
  backoff_factor: 2.0,
  ssl_verify: true,
  log_level: :info
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Returns a new instance of Configuration.



104
105
106
107
# File 'lib/octaspace/configuration.rb', line 104

def initialize
  DEFAULTS.each { |k, v| public_send(:"#{k}=", v) }
  @user_agent = "octaspace-ruby/#{OctaSpace::VERSION} Ruby/#{RUBY_VERSION}"
end

Instance Attribute Details

#api_keyString?

Returns API key for Authorization header.

Returns:

  • (String, nil)

    API key for Authorization header



17
18
19
# File 'lib/octaspace/configuration.rb', line 17

def api_key
  @api_key
end

#backoff_factorFloat

Returns Exponential backoff multiplier.

Returns:

  • (Float)

    Exponential backoff multiplier



60
61
62
# File 'lib/octaspace/configuration.rb', line 60

def backoff_factor
  @backoff_factor
end

#base_urlString

Returns Base URL for the API (single endpoint).

Returns:

  • (String)

    Base URL for the API (single endpoint)



22
23
24
# File 'lib/octaspace/configuration.rb', line 22

def base_url
  @base_url
end

#base_urlsArray<String>?

Returns Multiple API endpoints — enables URL rotation/failover.

Returns:

  • (Array<String>, nil)

    Multiple API endpoints — enables URL rotation/failover



25
26
27
# File 'lib/octaspace/configuration.rb', line 25

def base_urls
  @base_urls
end

#idle_timeoutInteger

Returns Seconds before an idle persistent connection is closed.

Returns:

  • (Integer)

    Seconds before an idle persistent connection is closed



49
50
51
# File 'lib/octaspace/configuration.rb', line 49

def idle_timeout
  @idle_timeout
end

#keep_aliveBoolean Also known as: persistent

Returns Enable persistent HTTP connections with connection pooling.

Returns:

  • (Boolean)

    Enable persistent HTTP connections with connection pooling



40
41
42
# File 'lib/octaspace/configuration.rb', line 40

def keep_alive
  @keep_alive
end

#log_levelSymbol

Returns Log level (:debug, :info, :warn, :error).

Returns:

  • (Symbol)

    Log level (:debug, :info, :warn, :error)



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

def log_level
  @log_level
end

#loggerLogger?

Returns Ruby Logger instance (or any object responding to #debug/#info/#warn/#error).

Returns:

  • (Logger, nil)

    Ruby Logger instance (or any object responding to #debug/#info/#warn/#error)



73
74
75
# File 'lib/octaspace/configuration.rb', line 73

def logger
  @logger
end

#max_retriesInteger

Returns Maximum number of retries on transient failures.

Returns:

  • (Integer)

    Maximum number of retries on transient failures



54
55
56
# File 'lib/octaspace/configuration.rb', line 54

def max_retries
  @max_retries
end

#on_request#call?

Returns Callable invoked before each request; receives request context hash.

Returns:

  • (#call, nil)

    Callable invoked before each request; receives request context hash



65
66
67
# File 'lib/octaspace/configuration.rb', line 65

def on_request
  @on_request
end

#on_response#call?

Returns Callable invoked after each response; receives OctaSpace::Response.

Returns:

  • (#call, nil)

    Callable invoked after each response; receives OctaSpace::Response



68
69
70
# File 'lib/octaspace/configuration.rb', line 68

def on_response
  @on_response
end

#open_timeoutInteger

Returns Seconds to wait for connection to open.

Returns:

  • (Integer)

    Seconds to wait for connection to open



28
29
30
# File 'lib/octaspace/configuration.rb', line 28

def open_timeout
  @open_timeout
end

#pool_sizeInteger

Returns Number of persistent connections in the pool.

Returns:

  • (Integer)

    Number of persistent connections in the pool



43
44
45
# File 'lib/octaspace/configuration.rb', line 43

def pool_size
  @pool_size
end

#pool_timeoutInteger

Returns Seconds to wait for a connection from the pool.

Returns:

  • (Integer)

    Seconds to wait for a connection from the pool



46
47
48
# File 'lib/octaspace/configuration.rb', line 46

def pool_timeout
  @pool_timeout
end

#read_timeoutInteger

Returns Seconds to wait for a response.

Returns:

  • (Integer)

    Seconds to wait for a response



31
32
33
# File 'lib/octaspace/configuration.rb', line 31

def read_timeout
  @read_timeout
end

#retry_intervalFloat

Returns Base interval in seconds between retries.

Returns:

  • (Float)

    Base interval in seconds between retries



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

def retry_interval
  @retry_interval
end

#ssl_verifyBoolean

Returns Verify SSL certificates (set false only in development/test).

Returns:

  • (Boolean)

    Verify SSL certificates (set false only in development/test)



81
82
83
# File 'lib/octaspace/configuration.rb', line 81

def ssl_verify
  @ssl_verify
end

#user_agentString

Returns User-Agent header value.

Returns:

  • (String)

    User-Agent header value



86
87
88
# File 'lib/octaspace/configuration.rb', line 86

def user_agent
  @user_agent
end

#write_timeoutInteger

Returns Seconds to wait when writing request body.

Returns:

  • (Integer)

    Seconds to wait when writing request body



34
35
36
# File 'lib/octaspace/configuration.rb', line 34

def write_timeout
  @write_timeout
end

Instance Method Details

#dupConfiguration

Deep-clone configuration for per-client overrides

Returns:



126
127
128
129
130
131
132
133
134
# File 'lib/octaspace/configuration.rb', line 126

def dup
  copy = self.class.new
  instance_variables.each do |var|
    copy.instance_variable_set(var, instance_variable_get(var).dup)
  rescue TypeError
    copy.instance_variable_set(var, instance_variable_get(var))
  end
  copy
end

#keep_alive?Boolean

Returns:

  • (Boolean)


114
# File 'lib/octaspace/configuration.rb', line 114

def keep_alive? = !!keep_alive

#urlsArray<String>

Returns effective list of API URLs. base_urls takes priority over base_url; always returns an Array.

Returns:

  • (Array<String>)


119
120
121
122
# File 'lib/octaspace/configuration.rb', line 119

def urls
  candidates = Array(base_urls).map(&:to_s).reject(&:empty?)
  candidates.empty? ? Array(base_url).map(&:to_s).reject(&:empty?) : candidates
end