class ComplexConfig::KeySource

only one source is used at a time.
direct values. It supports multiple configuration options and ensures that
keys from different possible sources such as files, environment variables, or
The KeySource class is responsible for managing and retrieving encryption
A key source class that provides encryption keys from various sources

def initialize(pathname: nil, env_var: nil, var: nil, master_key_pathname: nil)

Raises:
  • (ArgumentError) - if more than one setting is provided

Parameters:
  • master_key_pathname (String, nil) -- The path to a master key file
  • var (String, nil) -- A string value representing the key
  • env_var (String, nil) -- The name of an environment variable containing the key
  • pathname (String, nil) -- The path to a key file
def initialize(pathname: nil, env_var: nil, var: nil, master_key_pathname: nil)
  settings = [ pathname, env_var, var, master_key_pathname ].compact.size
  if settings > 1
    raise ArgumentError, 'only one setting at most possible'
  end
  pathname and pathname = pathname.to_s
  master_key_pathname and master_key_pathname = master_key_pathname.to_s
  @pathname, @env_var, @var, @master_key_pathname =
    pathname, env_var, var, master_key_pathname
end

def key

Returns:
  • (String, nil) - the encryption key as a string if found, or nil if no
def key
  if @var
    @var.ask_and_send(:chomp)
  elsif @env_var
    ENV[@env_var].ask_and_send(:chomp)
  elsif master_key?
    IO.binread(@master_key_pathname).chomp
  elsif @pathname
    IO.binread(@pathname + '.key').chomp
  end
rescue Errno::ENOENT, Errno::ENOTDIR
end

def key_bytes

Returns:
  • (String) - the encryption key as a binary string of bytes
def key_bytes
  [ key ].pack('H*')
end

def master_key?

Returns:
  • (TrueClass, FalseClass) - true if a master key pathname is
def master_key?
  !!@master_key_pathname
end