Class: GetStreamRuby::Configuration

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api_key: nil, api_secret: nil, use_env: true, **options) ⇒ Configuration

Returns a new instance of Configuration.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/getstream_ruby/configuration.rb', line 13

def initialize(api_key: nil, api_secret: nil, use_env: true, **options)
  http_options = options[:http_options] || {}

  assign_credentials_and_url(api_key, api_secret, options[:base_url], use_env: use_env)
  assign_timeouts_and_pool(options, use_env: use_env)
  assign_adapter(options, http_options)
  assign_keep_alive(options, http_options)

  # Keep @timeout in sync with @request_timeout for backwards compatibility.
  @timeout = @request_timeout
  @http_client = options[:http_client]
  @logger = options[:logger]
  @log_bodies = options[:log_bodies] || false
  @retry_config = options[:retry_config] || RetryConfig.new
end

Instance Attribute Details

#api_keyObject

Returns the value of attribute api_key.



9
10
11
# File 'lib/getstream_ruby/configuration.rb', line 9

def api_key
  @api_key
end

#api_secretObject

Returns the value of attribute api_secret.



9
10
11
# File 'lib/getstream_ruby/configuration.rb', line 9

def api_secret
  @api_secret
end

#base_urlObject

Returns the value of attribute base_url.



9
10
11
# File 'lib/getstream_ruby/configuration.rb', line 9

def base_url
  @base_url
end

#connect_timeoutObject

Returns the value of attribute connect_timeout.



9
10
11
# File 'lib/getstream_ruby/configuration.rb', line 9

def connect_timeout
  @connect_timeout
end

#connection_keep_aliveObject

Returns the value of attribute connection_keep_alive.



9
10
11
# File 'lib/getstream_ruby/configuration.rb', line 9

def connection_keep_alive
  @connection_keep_alive
end

#faraday_adapterObject

Returns the value of attribute faraday_adapter.



9
10
11
# File 'lib/getstream_ruby/configuration.rb', line 9

def faraday_adapter
  @faraday_adapter
end

#faraday_adapter_optionsObject

Returns the value of attribute faraday_adapter_options.



9
10
11
# File 'lib/getstream_ruby/configuration.rb', line 9

def faraday_adapter_options
  @faraday_adapter_options
end

#http_clientObject

Returns the value of attribute http_client.



9
10
11
# File 'lib/getstream_ruby/configuration.rb', line 9

def http_client
  @http_client
end

#idle_timeoutObject

Returns the value of attribute idle_timeout.



9
10
11
# File 'lib/getstream_ruby/configuration.rb', line 9

def idle_timeout
  @idle_timeout
end

#log_bodiesObject

Returns the value of attribute log_bodies.



9
10
11
# File 'lib/getstream_ruby/configuration.rb', line 9

def log_bodies
  @log_bodies
end

#loggerObject

Returns the value of attribute logger.



9
10
11
# File 'lib/getstream_ruby/configuration.rb', line 9

def logger
  @logger
end

#max_conns_per_hostObject

Returns the value of attribute max_conns_per_host.



9
10
11
# File 'lib/getstream_ruby/configuration.rb', line 9

def max_conns_per_host
  @max_conns_per_host
end

#request_timeoutObject

Returns the value of attribute request_timeout.



9
10
11
# File 'lib/getstream_ruby/configuration.rb', line 9

def request_timeout
  @request_timeout
end

#retry_configObject

Returns the value of attribute retry_config.



9
10
11
# File 'lib/getstream_ruby/configuration.rb', line 9

def retry_config
  @retry_config
end

#timeoutObject

Returns the value of attribute timeout.



9
10
11
# File 'lib/getstream_ruby/configuration.rb', line 9

def timeout
  @timeout
end

Class Method Details

.from_envObject

Method 2: .env file (loads .env file via dotenv gem, falls back to env vars)



101
102
103
104
# File 'lib/getstream_ruby/configuration.rb', line 101

def self.from_env
  require 'dotenv/load' if File.exist?('.env') && !File.empty?('.env') && !defined?(Dotenv)
  new(use_env: true)
end

.from_system_envObject

Method 3: Environment variables (no .env file, direct system env)



107
108
109
# File 'lib/getstream_ruby/configuration.rb', line 107

def self.from_system_env
  new(use_env: true)
end

.manual(api_key:, api_secret:, **options) ⇒ Object

Method 1: Manual configuration (no environment variables)



96
97
98
# File 'lib/getstream_ruby/configuration.rb', line 96

def self.manual(api_key:, api_secret:, **options)
  new(api_key: api_key, api_secret: api_secret, use_env: false, **options)
end

.with_overrides(overrides = {}) ⇒ Object

Class method to create configuration with overrides



91
92
93
# File 'lib/getstream_ruby/configuration.rb', line 91

def self.with_overrides(overrides = {})
  new(**overrides)
end

Instance Method Details

#dupObject



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/getstream_ruby/configuration.rb', line 38

def dup
  Configuration.new(
    api_key: @api_key,
    api_secret: @api_secret,
    base_url: @base_url,
    timeout: @timeout,
    request_timeout: @request_timeout,
    max_conns_per_host: @max_conns_per_host,
    idle_timeout: @idle_timeout,
    connect_timeout: @connect_timeout,
    http_client: @http_client,
    faraday_adapter: @faraday_adapter,
    faraday_adapter_options: @faraday_adapter_options.dup,
    connection_keep_alive: @connection_keep_alive,
    logger: @logger,
    log_bodies: @log_bodies,
    retry_config: @retry_config,
  )
end

#log_pool_config_to(logger) ⇒ Object

Emit the client.initialized INFO event once at construction (structured logging spec §6.1). A no-op when no logger is configured: unlike warn_pool_fallback below, a quiet start-up here is expected, not a silently-swallowed problem, so there is no $stdout fallback.



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/getstream_ruby/configuration.rb', line 62

def log_pool_config_to(logger)
  return if logger.nil?

  fields = {
    'stream.sdk.name' => 'getstream-ruby',
    'stream.sdk.version' => VERSION,
    'stream.client.max_conns_per_host' => @max_conns_per_host,
    'stream.client.idle_timeout_seconds' => @idle_timeout,
    'stream.client.connect_timeout_seconds' => @connect_timeout,
    'stream.client.request_timeout_seconds' => @request_timeout,
    'stream.client.gzip_enabled' => true,
    'stream.client.user_http_client' => !@http_client.nil?,
    'stream.client.log_bodies' => @log_bodies,
  }
  logger.info { "client.initialized #{fields.map { |k, v| "#{k}=#{v}" }.join(' ')}" }
end

#valid?Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/getstream_ruby/configuration.rb', line 29

def valid?
  api_key && api_secret
end

#validate!Object

Raises:



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

def validate!
  raise ConfigurationError, 'API key is required' unless api_key
  raise ConfigurationError, 'API secret is required' unless api_secret
end

#warn_pool_fallback(fallback_adapter, error) ⇒ Object

Emit a WARNING that the requested adapter could not be built and pooling is disabled (CHA-2956). A fallback must never be silent, so unlike the structured-logging events below, this uses a default $stdout logger when none is configured.



83
84
85
86
87
88
# File 'lib/getstream_ruby/configuration.rb', line 83

def warn_pool_fallback(fallback_adapter, error)
  warn_logger = @logger || Logger.new($stdout).tap { |l| l.level = Logger::WARN }
  warn_logger.warn(
    "Falling back to #{fallback_adapter}: could not configure net_http_persistent (#{error.message})",
  )
end