Sha256: c7e46fef94168bec18f155ba4a113da201fd8a95f56a32d8c7163578aafa3c78

Contents?: true

Size: 1.3 KB

Versions: 2

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

require 'dry/plugins/config'
require 'dry/plugins/registry/load_error'
require 'dry/container/resolver'
require 'inflecto'

module Dry
  module Plugins
    class Registry
      # Default resolver for resolving plugins from registry
      class Resolver < Dry::Container::Resolver
        # Resolve a plugin from the registry
        #
        # @param container [Concurrent::Hash]
        #   The container
        # @param name [Mixed]
        #   The name for the plugin you wish to resolve
        #
        # @raise [LoadError]
        #   If the given plugin is not registered in the registry
        #
        # @return [Mixed]
        #
        # @api public
        # If the registered plugin already exists, use it.
        # Otherwise, require it and return it.
        # This raises a LoadError if such a plugin doesn't exist, or a LoadError if it exists but it does
        # not register itself correctly.
        def call(container, name, require_path)
          name = name.to_s
          unless container.key?(name)
            path = Inflecto.underscore(name).tr('.', '/')
            require "#{require_path}/#{path}"
            raise LoadError, name, container unless container.key?(name)
          end

          super(container, name)
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dry-plugins-0.2.0 lib/dry/plugins/registry/resolver.rb
dry-plugins-0.1.0 lib/dry/plugins/registry/resolver.rb