Module: BBK::Utils::EnvHelper
- Defined in:
- lib/bbk/utils/env_helper.rb
Constant Summary collapse
- DEFAULT_DATABASE_PREFIX =
'DATABASE'
Class Method Summary collapse
- .apply_env_from_uri(env, uri, prefix: DEFAULT_DATABASE_PREFIX) ⇒ Object
- .apply_mq_env_from_uri(env, uris) ⇒ Object
- .build_mq_uri_with_defaults(env) ⇒ Object
- .build_uri_with_defaults(env, prefix: DEFAULT_DATABASE_PREFIX) ⇒ Object
- .prefixed_key(prefix, name) ⇒ Object
- .prepare_database_envs(env, prefix: DEFAULT_DATABASE_PREFIX) ⇒ Object
- .prepare_jaeger_envs(env) ⇒ Object
- .prepare_mq_envs(env) ⇒ Object
Class Method Details
.apply_env_from_uri(env, uri, prefix: DEFAULT_DATABASE_PREFIX) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/bbk/utils/env_helper.rb', line 57 def self.apply_env_from_uri(env, uri, prefix: DEFAULT_DATABASE_PREFIX) env[prefixed_key(prefix, 'URL')] = uri.to_s env[prefixed_key(prefix, 'ADAPTER')] = uri.scheme env[prefixed_key(prefix, 'USER')] = uri.user env[prefixed_key(prefix, 'PASS')] = uri.password env[prefixed_key(prefix, 'HOST')] = uri.hostname env[prefixed_key(prefix, 'PORT')] = uri.port.to_s env[prefixed_key(prefix, 'NAME')] = uri.path[1..-1] if uri.query params = URI.decode_www_form(uri.query).to_h env[prefixed_key(prefix, 'POOL')] = params['pool'] end end |
.apply_mq_env_from_uri(env, uris) ⇒ Object
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/bbk/utils/env_helper.rb', line 98 def self.apply_mq_env_from_uri(env, uris) uri = uris.first env['MQ_URL'] = uris.map(&:to_s).join(';') env['MQ_HOST'] = uris.map(&:hostname).join(';') env['MQ_PORT'] = uri.port.to_s env['MQ_PASS'] = uri.password env['MQ_USER'] = uri.user vhost = if uri.path == '/' uri.path else uri.path.gsub(%r{\A/}, '') end env['MQ_VHOST'] = vhost end |
.build_mq_uri_with_defaults(env) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/bbk/utils/env_helper.rb', line 72 def self.build_mq_uri_with_defaults(env) # Only first MQ_URL selected as template if any url = [env.fetch('MQ_URL', '').split(/[;|]/)].flatten.select(&:present?).first || '' # all hosts if form of list fills url template hosts = [env.fetch('MQ_HOST', URI.parse(url).hostname || 'mq').split(/[;|]/)].flatten.select(&:present?).uniq hosts.map do |host| URI.parse(url).then do |uri| result = uri.clone result.scheme = uri.scheme || 'amqps' result.hostname = host result.port = env.fetch('MQ_PORT', uri.port) || 5671 result.user = env.fetch('MQ_USER', uri.user) result.password = env.fetch('MQ_PASS', uri.password) vhost = [env.fetch('MQ_VHOST', uri.path), '/'].find(&:present?) vhost = "/#{vhost}" unless vhost.start_with?('/') result.path = vhost result end end end |
.build_uri_with_defaults(env, prefix: DEFAULT_DATABASE_PREFIX) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/bbk/utils/env_helper.rb', line 35 def self.build_uri_with_defaults(env, prefix: DEFAULT_DATABASE_PREFIX) ::URI.parse(env[prefixed_key(prefix, 'URL')] || '').then do |uri| result = uri.clone result.scheme = env.fetch(prefixed_key(prefix, 'ADAPTER'), uri.scheme) || 'postgresql' result.hostname = env.fetch(prefixed_key(prefix, 'HOST'), uri.hostname) || 'db' result.port = env.fetch(prefixed_key(prefix, 'PORT'), uri.port) || 5432 result.user = env.fetch(prefixed_key(prefix, 'USER'), uri.user) || 'postgres' result.password = env.fetch(prefixed_key(prefix, 'PASS'), uri.password) name = env.fetch(prefixed_key(prefix, 'NAME'), uri.path) || '' name = "/#{name}" unless name.start_with?('/') result.path = name if uri.query params = URI.decode_www_form(uri.query).to_h params['pool'] = env.fetch(prefixed_key(prefix, 'POOL'), params['pool']) result.query = URI.encode_www_form(params) end result end end |
.prefixed_key(prefix, name) ⇒ Object
114 115 116 |
# File 'lib/bbk/utils/env_helper.rb', line 114 def self.prefixed_key(prefix, name) [prefix, name].select(&:present?).join('_') end |
.prepare_database_envs(env, prefix: DEFAULT_DATABASE_PREFIX) ⇒ Object
11 12 13 14 15 |
# File 'lib/bbk/utils/env_helper.rb', line 11 def self.prepare_database_envs(env, prefix: DEFAULT_DATABASE_PREFIX) uri = build_uri_with_defaults(env, prefix: prefix) apply_env_from_uri(env, uri, prefix: prefix) env end |
.prepare_jaeger_envs(env) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/bbk/utils/env_helper.rb', line 22 def self.prepare_jaeger_envs(env) jaeger_uri = ::URI.parse(env['JAEGER_URL'] || '').tap do |uri| uri.scheme = env.fetch('JAEGER_SENDER', uri.scheme) || 'udp' uri.hostname = env.fetch('JAEGER_HOST', uri.host) || 'jaeger' uri.port = env.fetch('JAEGER_PORT', uri.port) || 6831 end env['JAEGER_URL'] = jaeger_uri.to_s env['JAEGER_SENDER'] = jaeger_uri.scheme env['JAEGER_HOST'] = jaeger_uri.host env['JAEGER_PORT'] = jaeger_uri.port.to_s env end |
.prepare_mq_envs(env) ⇒ Object
17 18 19 20 |
# File 'lib/bbk/utils/env_helper.rb', line 17 def self.prepare_mq_envs(env) apply_mq_env_from_uri(env, build_mq_uri_with_defaults(env)) env end |