Class: Protobuf::Nats::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/protobuf/nats/config.rb

Constant Summary collapse

CONFIG_MUTEX =
::Mutex.new
DEFAULTS =
{
  :connect_timeout => nil,
  :max_reconnect_attempts => 60_000,
  :servers => nil,
  :tls_client_cert => nil,
  :tls_client_key => nil,
  :tls_ca_cert => nil,
  :uses_tls => false,
  :subscription_key_replacements => [],
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfig

Returns a new instance of Config.



22
23
24
25
26
# File 'lib/protobuf/nats/config.rb', line 22

def initialize
  DEFAULTS.each_pair do |key, value|
    __send__("#{key}=", value)
  end
end

Instance Attribute Details

#connect_timeoutObject

Returns the value of attribute connect_timeout.



7
8
9
# File 'lib/protobuf/nats/config.rb', line 7

def connect_timeout
  @connect_timeout
end

#max_reconnect_attemptsObject

Returns the value of attribute max_reconnect_attempts.



7
8
9
# File 'lib/protobuf/nats/config.rb', line 7

def max_reconnect_attempts
  @max_reconnect_attempts
end

#serversObject

Returns the value of attribute servers.



7
8
9
# File 'lib/protobuf/nats/config.rb', line 7

def servers
  @servers
end

#subscription_key_replacementsObject

Returns the value of attribute subscription_key_replacements.



7
8
9
# File 'lib/protobuf/nats/config.rb', line 7

def subscription_key_replacements
  @subscription_key_replacements
end

#tls_ca_certObject

Returns the value of attribute tls_ca_cert.



7
8
9
# File 'lib/protobuf/nats/config.rb', line 7

def tls_ca_cert
  @tls_ca_cert
end

#tls_client_certObject

Returns the value of attribute tls_client_cert.



7
8
9
# File 'lib/protobuf/nats/config.rb', line 7

def tls_client_cert
  @tls_client_cert
end

#tls_client_keyObject

Returns the value of attribute tls_client_key.



7
8
9
# File 'lib/protobuf/nats/config.rb', line 7

def tls_client_key
  @tls_client_key
end

#uses_tlsObject

Returns the value of attribute uses_tls.



7
8
9
# File 'lib/protobuf/nats/config.rb', line 7

def uses_tls
  @uses_tls
end

Instance Method Details

#connection_options(reload = false) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/protobuf/nats/config.rb', line 54

def connection_options(reload = false)
  @connection_options = false if reload
  @connection_options ||= begin
    options = {
      servers: servers,
      max_reconnect_attempts: max_reconnect_attempts,
      uses_tls: uses_tls,
      tls_client_cert: tls_client_cert,
      tls_client_key: tls_client_key,
      tls_ca_cert: tls_ca_cert,
      connect_timeout: connect_timeout,
      subscription_key_replacements: subscription_key_replacements,
    }
    options[:tls] = {:context => new_tls_context} if uses_tls
    options
  end
end

#load_from_yml(reload = false) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/protobuf/nats/config.rb', line 28

def load_from_yml(reload = false)
  CONFIG_MUTEX.synchronize do
    @load_from_yml = nil if reload
    @load_from_yml ||= begin
      env = ENV["RAILS_ENV"] || ENV["RACK_ENV"] || ENV["APP_ENV"] || "development"

      yaml_config = {}
      config_path = ENV["PROTOBUF_NATS_CONFIG_PATH"] || ::File.join("config", "protobuf_nats.yml")
      absolute_config_path = ::File.expand_path(config_path)
      if ::File.exists?(absolute_config_path)
        yaml_config = ::YAML.load_file(absolute_config_path)[env]
      end

      DEFAULTS.each_pair do |key, value|
        setting = yaml_config[key.to_s]
        __send__("#{key}=", setting) if setting
      end

      # Reload the connection options hash
      connection_options(true)

      true
    end
  end
end

#make_subscription_key_replacements(subscription_key) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/protobuf/nats/config.rb', line 80

def make_subscription_key_replacements(subscription_key)
  subscription_key_replacements.each do |replacement|
    match = replacement.keys.first
    replacement = replacement[match]

    if subscription_key.include?(match)
      return subscription_key.gsub(match, replacement)
    end
  end

  subscription_key
end

#new_tls_contextObject



72
73
74
75
76
77
78
# File 'lib/protobuf/nats/config.rb', line 72

def new_tls_context
  tls_context = ::OpenSSL::SSL::SSLContext.new
  tls_context.ssl_version = :TLSv1_2
  tls_context.cert = ::OpenSSL::X509::Certificate.new(::File.read(tls_client_cert)) if tls_client_cert
  tls_context.key = ::OpenSSL::PKey::RSA.new(::File.read(tls_client_key)) if tls_client_key
  tls_context
end