class Qonfig::Commands::Definition::ExposeVault

@api private @since 0.25.0

Constants

EMPTY_VAULT_DATA

@return [Hash]

@api private @since 0.25.0

EXPOSERS

@return [Hash<Symbol,Symbol>]

@api private @since 0.25.0

Attributes

env[R]

@return [Symbol, String]

@api private @since 0.25.0

path[R]

@return [String, Pathname]

@api private @since 0.25.0

strict[R]

@return [Boolean]

@api private @since 0.25.0

via[R]

@return [Symbol]

@api private @since 0.25.0

Public Class Methods

new(path, strict: true, via:, env:) click to toggle source

@param path [String Pathname] @option strict [Boolean] @option via [Symbol] @option env [String, Symbol] @return [void]

@api private @since 0.25.0

# File lib/qonfig/plugins/vault/commands/definition/expose_vault.rb, line 53
def initialize(path, strict: true, via:, env:)
  unless env.is_a?(Symbol) || env.is_a?(String) || env.is_a?(Numeric)
    raise Qonfig::ArgumentError, ':env should be a string or a symbol'
  end

  raise Qonfig::ArgumentError, ':env should be provided'  if env.to_s.empty?
  raise Qonfig::ArgumentError, 'used :via is unsupported' unless EXPOSERS.key?(via)

  @path   = path
  @strict = strict
  @via    = via
  @env    = env
end

Public Instance Methods

call(_data_set, settings) click to toggle source

@param data_set [Qonfig::DataSet] @param settings [Qonfig::Settings] @return [void]

@api private @since 0.25.0

# File lib/qonfig/plugins/vault/commands/definition/expose_vault.rb, line 73
def call(_data_set, settings)
  case via
  when EXPOSERS[:path]
    expose_path!(settings)
  when EXPOSERS[:env_key]
    expose_env_key!(settings)
  end
end

Private Instance Methods

build_data_set_class(vault_data) click to toggle source

@param vault_data [Hash] @return [Class<Qonfig::DataSet>]

@api private @since 0.25.0

# File lib/qonfig/plugins/vault/commands/definition/expose_vault.rb, line 139
def build_data_set_class(vault_data)
  Qonfig::DataSet::ClassBuilder.build_from_hash(vault_data)
end
expose_env_key!(settings) click to toggle source

@param settings [Qonfig::Settings] @return [void]

@raise [Qonfig::ExposeError]

@api private @since 0.25.0

# File lib/qonfig/plugins/vault/commands/definition/expose_vault.rb, line 110
def expose_env_key!(settings)
  vault_data       = load_vault_data(path)
  vault_data_slice = vault_data[env.to_sym]
  vault_data_slice = EMPTY_VAULT_DATA.dup if vault_data_slice.nil? && !strict

  raise(
    Qonfig::ExposeError,
    "#{path} does not contain settings with <#{env}> environment key!"
  ) unless vault_data_slice

  vault_based_settings = build_data_set_class(vault_data_slice).new.settings

  settings.__append_settings__(vault_based_settings)
end
expose_path!(settings) click to toggle source

@param settings [Qonfig::Settings] @return [void]

@api private @since 0.25.0

# File lib/qonfig/plugins/vault/commands/definition/expose_vault.rb, line 89
def expose_path!(settings)
  # NOTE: transform path (insert environment name into a secret name)
  #   from: kv/data/secret_name
  #   to:   kv/data/env_name/secret_name

  splitted_path = path.split('/')
  real_path = splitted_path.insert(-2, env.to_s).join('/')

  vault_data = load_vault_data(real_path)
  vault_based_settings = build_data_set_class(vault_data).new.settings

  settings.__append_settings__(vault_based_settings)
end
load_vault_data(path) click to toggle source

@param path [String] @return [Hash]

@api private @since 0.25.0

# File lib/qonfig/plugins/vault/commands/definition/expose_vault.rb, line 130
def load_vault_data(path)
  Qonfig::Loaders::Vault.load_file(path, fail_on_unexist: strict)
end