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.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/getstream_ruby/configuration.rb', line 10

def initialize(api_key: nil, api_secret: nil, use_env: true, **options)
  base_url = options[:base_url]
  timeout = options[:timeout]
  http_options = options[:http_options] || {}
  faraday_adapter = options[:faraday_adapter] || http_options[:faraday_adapter]
  faraday_adapter_options = options[:faraday_adapter_options] || http_options[:faraday_adapter_options]
  connection_keep_alive = if options.key?(:connection_keep_alive)
                            options[:connection_keep_alive]
                          else
                            http_options[:connection_keep_alive]
                          end

  if use_env
    @api_key = api_key || ENV.fetch('STREAM_API_KEY', nil)
    @api_secret = api_secret || ENV.fetch('STREAM_API_SECRET', nil)
    @base_url = base_url || ENV['STREAM_BASE_URL'] || 'https://chat.stream-io-api.com'
    @timeout = timeout || (ENV['STREAM_TIMEOUT'] || 30).to_i
  else
    # Manual configuration only - no environment variables
    @api_key = api_key
    @api_secret = api_secret
    @base_url = base_url || 'https://chat.stream-io-api.com'
    @timeout = timeout || 30
  end

  @faraday_adapter = (faraday_adapter || ENV.fetch('STREAM_FARADAY_ADAPTER', nil))&.to_sym
  @faraday_adapter_options = faraday_adapter_options || default_adapter_options
  @connection_keep_alive = if connection_keep_alive.nil?
                             ENV.fetch('STREAM_CONNECTION_KEEP_ALIVE', 'true') == 'true'
                           else
                             connection_keep_alive
                           end
  @logger = nil
end

Instance Attribute Details

#api_keyObject

Returns the value of attribute api_key.



7
8
9
# File 'lib/getstream_ruby/configuration.rb', line 7

def api_key
  @api_key
end

#api_secretObject

Returns the value of attribute api_secret.



7
8
9
# File 'lib/getstream_ruby/configuration.rb', line 7

def api_secret
  @api_secret
end

#base_urlObject

Returns the value of attribute base_url.



7
8
9
# File 'lib/getstream_ruby/configuration.rb', line 7

def base_url
  @base_url
end

#connection_keep_aliveObject

Returns the value of attribute connection_keep_alive.



7
8
9
# File 'lib/getstream_ruby/configuration.rb', line 7

def connection_keep_alive
  @connection_keep_alive
end

#faraday_adapterObject

Returns the value of attribute faraday_adapter.



7
8
9
# File 'lib/getstream_ruby/configuration.rb', line 7

def faraday_adapter
  @faraday_adapter
end

#faraday_adapter_optionsObject

Returns the value of attribute faraday_adapter_options.



7
8
9
# File 'lib/getstream_ruby/configuration.rb', line 7

def faraday_adapter_options
  @faraday_adapter_options
end

#loggerObject

Returns the value of attribute logger.



7
8
9
# File 'lib/getstream_ruby/configuration.rb', line 7

def logger
  @logger
end

#timeoutObject

Returns the value of attribute timeout.



7
8
9
# File 'lib/getstream_ruby/configuration.rb', line 7

def timeout
  @timeout
end

Class Method Details

.from_envObject

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



77
78
79
80
# File 'lib/getstream_ruby/configuration.rb', line 77

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)



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

def self.from_system_env
  new(use_env: true)
end

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

Method 1: Manual configuration (no environment variables)



72
73
74
# File 'lib/getstream_ruby/configuration.rb', line 72

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



67
68
69
# File 'lib/getstream_ruby/configuration.rb', line 67

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

Instance Method Details

#dupObject



54
55
56
57
58
59
60
61
62
63
64
# File 'lib/getstream_ruby/configuration.rb', line 54

def dup
  Configuration.new(
    api_key: @api_key,
    api_secret: @api_secret,
    base_url: @base_url,
    timeout: @timeout,
    faraday_adapter: @faraday_adapter,
    faraday_adapter_options: @faraday_adapter_options.dup,
    connection_keep_alive: @connection_keep_alive,
  )
end

#valid?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/getstream_ruby/configuration.rb', line 45

def valid?
  api_key && api_secret
end

#validate!Object

Raises:



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

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