class SecretEnv::Record
Attributes
key[R]
Public Class Methods
new(key:, raw_value:, storage: Storage::Plain.new, dependency: {})
click to toggle source
# File lib/secret_env.rb, line 31 def initialize(key:, raw_value:, storage: Storage::Plain.new, dependency: {}) @key = key @raw_value = raw_value.to_s @storage = storage @dependency = dependency end
Public Instance Methods
value()
click to toggle source
# File lib/secret_env.rb, line 38 def value scanner = StringScanner.new(@raw_value) parts = [] while part = scanner.scan_until(/#\{(.*?)\}/) secret_keys = scanner.matched[2..-2] # Extract "secret" from "\#{secret}" secret = nil secret_keys.split("||").map(&:strip).each do |secret_key| secret = case when ENV.has_key?(secret_key) ENV[secret_key] when @dependency.has_key?(secret_key) # FIXME this code may cause infinite loop @dependency[secret_key].value else @storage.retrieve(secret_key) end break if secret end raise SecretEnv::KeyNotFound, secret_keys unless secret parts << part.gsub(scanner.matched, secret) end parts << scanner.rest parts.join end