Sha256: 69856bc0f647062b2b2830f7a84e8c100b9fbd817ce8a1a2d11e8078e32f58c2

Contents?: true

Size: 1.74 KB

Versions: 1

Compression:

Stored size: 1.74 KB

Contents

# frozen_string_literal: true

module Anyway
  using RubyNext

  module Rails
    module Loaders
      class Credentials < Anyway::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.public_send(name)
          end.then do |creds|
            Utils.deep_merge!(config, creds) if creds
          end

          if use_local?
            trace!(:credentials, store: LOCAL_CONTENT_PATH) do
              local_credentials(name)
            end.then { |creds| 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.public_send(name)
        end

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

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
anyway_config-2.1.0 lib/anyway/rails/loaders/credentials.rb