Sha256: b284752947187b0c516a444a407d79558679bd6d51ac53f62bf6228412d514ec

Contents?: true

Size: 1.51 KB

Versions: 3

Compression:

Stored size: 1.51 KB

Contents

# frozen_string_literal: true

module Runger::Rails::Loaders ; end

class Runger::Rails::Loaders::Credentials < Runger::Loaders::Base
  LOCAL_CONTENT_PATH = 'config/credentials/local.yml.enc'

  def call(name:, **_options)
    return {} unless ::Rails.application.respond_to?(:credentials)

    # do not load from credentials if we're in the context
    # of the `credentials:edit` command
    return {} if defined?(::Rails::Command::CredentialsCommand)

    # Create a new hash cause credentials are mutable!
    config = {}

    trace!(
      :credentials,
      store: credentials_path,
    ) do
      ::Rails.application.credentials.config[name.to_sym]
    end.then do |creds|
      Runger::Utils.deep_merge!(config, creds) if creds
    end

    if use_local?
      trace!(:credentials, store: LOCAL_CONTENT_PATH) do
        local_credentials(name)
      end.then { |creds| Runger::Utils.deep_merge!(config, creds) if creds }
    end

    config
  end

  private

  def local_credentials(name)
    local_creds_path = ::Rails.root.join(LOCAL_CONTENT_PATH).to_s

    return unless File.file?(local_creds_path)

    creds = ::Rails.application.encrypted(
      local_creds_path,
      key_path: ::Rails.root.join('config/credentials/local.key'),
    )

    creds.config[name.to_sym]
  end

  def credentials_path
    if ::Rails.application.config.respond_to?(:credentials)
      ::Rails.root.join(::Rails.application.config.credentials.content_path).relative_path_from(::Rails.root).to_s
    else
      'config/credentials.yml.enc'
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
runger_config-5.2.0 lib/runger/rails/loaders/credentials.rb
runger_config-5.1.0 lib/runger/rails/loaders/credentials.rb
runger_config-5.0.0 lib/runger/rails/loaders/credentials.rb