Sha256: cbfb7024e800292a51bfffc23fd8dab4d1e568c2b4471be3200dca13551f8563

Contents?: true

Size: 1.21 KB

Versions: 2

Compression:

Stored size: 1.21 KB

Contents

# frozen_string_literal: true
module Foederati
  ##
  # All providers known to Foederati
  class Providers
    @registry = HashWithIndifferentAccess.new

    class << self
      attr_reader :registry

      ##
      # Register a provider
      #
      # @param id_or_provider [Symbol,Foederati::Provider] identifier of a new
      #   provider, or an instantiated provider
      def register(id_or_provider, &block)
        case id_or_provider
        when Foederati::Provider
          registry[id_or_provider.id] = id_or_provider
        when Symbol
          registry[id_or_provider] = Provider.new(id_or_provider, &block)
        else
          fail ArgumentError, "Expected Symbol or Foederati::Provider, got #{id_or_provider.class}"
        end
      end

      ##
      # Unregisters a provider
      #
      # @param id [Symbol] unique identifier of the provider
      # @param provider [Foederati::Provider] provider removed from the registry
      def unregister(id)
        registry.delete(id)
      end

      ##
      # Get a provider from the registry
      #
      # @param id [Symbol] identifier of the provider to get
      # @return [Foederati::Provider]
      def get(id)
        registry[id]
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
foederati-0.2.0 lib/foederati/providers.rb
foederati-0.1.0 lib/foederati/providers.rb