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
# 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]
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

#effective_adapterObject

Returns the value of attribute effective_adapter.



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

def effective_adapter
  @effective_adapter
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

#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

#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)



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

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)



110
111
112
# File 'lib/getstream_ruby/configuration.rb', line 110

def self.from_system_env
  new(use_env: true)
end

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

Method 1: Manual configuration (no environment variables)



99
100
101
# File 'lib/getstream_ruby/configuration.rb', line 99

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



94
95
96
# File 'lib/getstream_ruby/configuration.rb', line 94

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

Instance Method Details

#dupObject



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

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,
  )
end

#log_pool_config_to(logger) ⇒ Object

Emit a single INFO line listing the 5 effective pool knobs plus the active escape hatch (CHA-2956). If no logger is supplied, a default $stdout INFO logger is used. The faraday_adapter label reflects the adapter actually built (effective_adapter, set by Client#configure_adapter) so a silent fallback to the default adapter is never misreported as the requested adapter.



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

def log_pool_config_to(logger)
  logger ||= Logger.new($stdout).tap { |l| l.level = Logger::INFO }
  flag = @http_client ? 'user_http_client=true' : 'user_http_client=false'
  adapter_label = if @http_client
                    'user-supplied'
                  elsif @effective_adapter
                    @effective_adapter
                  elsif @faraday_adapter
                    @faraday_adapter.to_s
                  else
                    'default'
                  end
  fmt = 'connection pool: max_conns_per_host=%<m>d idle_timeout=%<i>d ' \
        'connect_timeout=%<c>d request_timeout=%<r>d %<flag>s faraday_adapter=%<a>s'
  logger.info(
    format(
      fmt,
      m: @max_conns_per_host, i: @idle_timeout, c: @connect_timeout,
      r: @request_timeout, flag: flag, a: adapter_label
    ),
  )
end

#valid?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/getstream_ruby/configuration.rb', line 27

def valid?
  api_key && api_secret
end

#validate!Object

Raises:



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

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 when no logger is configured this uses a default $stdout logger, exactly like log_pool_config_to.



86
87
88
89
90
91
# File 'lib/getstream_ruby/configuration.rb', line 86

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