Sha256: 7d89696ee34a5c80c6ce16b7e892d646645110200db95ea6792f74f45611d125

Contents?: true

Size: 1.9 KB

Versions: 8

Compression:

Stored size: 1.9 KB

Contents

# frozen_string_literal: true

module PG
  module AWS_RDS_IAM
    # Registers {AuthTokenGenerator}s to be used to generate authentication tokens for `PG::Connection`s that have the
    # `aws_rds_iam_auth_token_generator` connection parameter set to the registered name.
    class AuthTokenGeneratorRegistry
      # Creates a new `AuthTokenRegistry`.
      #
      # @param default_auth_token_generator_class [Class] the class to register as the default {AuthTokenGenerator}
      def initialize(default_auth_token_generator_class: AuthTokenGenerator)
        @default_auth_token_generator_class = default_auth_token_generator_class
        reset
      end

      # Registers an {AuthTokenGenerator}.
      #
      # @param name [String, Symbol]
      # @return [void]
      # @yieldreturn [AuthTokenGenerator]
      def add(name, &block)
        @registry[name.to_s] = Memoizer.new(&block)
      end

      # Looks up an {AuthTokenGenerator} by name.
      #
      # @param name [String, Symbol]
      # @return [AuthTokenGenerator]
      def fetch(name)
        @registry.fetch(name.to_s).call
      end

      # Unregisters an {AuthTokenGenerator}.
      #
      # @param name [String, Symbol]
      # @return [void]
      def remove(name)
        @registry.delete name.to_s
      end

      # Unregisters all {AuthTokenGenerator}s and re-registers the default {AuthTokenGenerator}.
      #
      # @return [void]
      def reset
        @registry = {}

        add :default do
          config = Aws::RDS::Client.new.config
          @default_auth_token_generator_class.new(credentials: config.credentials, region: config.region)
        end
      end

      class Memoizer # rubocop:disable Style/Documentation
        def initialize(&block)
          @block = block
        end

        def call
          return @call if defined?(@call)

          @call = @block.call
        end
      end

      private_constant :Memoizer
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
pg-aws_rds_iam-0.5.0 lib/pg/aws_rds_iam/auth_token_generator_registry.rb
pg-aws_rds_iam-0.4.2 lib/pg/aws_rds_iam/auth_token_generator_registry.rb
pg-aws_rds_iam-0.4.1 lib/pg/aws_rds_iam/auth_token_generator_registry.rb
pg-aws_rds_iam-0.4.0 lib/pg/aws_rds_iam/auth_token_generator_registry.rb
pg-aws_rds_iam-0.3.2 lib/pg/aws_rds_iam/auth_token_generator_registry.rb
pg-aws_rds_iam-0.3.1 lib/pg/aws_rds_iam/auth_token_generator_registry.rb
pg-aws_rds_iam-0.3.0 lib/pg/aws_rds_iam/auth_token_generator_registry.rb
pg-aws_rds_iam-0.2.0 lib/pg/aws_rds_iam/auth_token_generator_registry.rb