Sha256: d885c1262a9bd61a834e81e4a322b3bd23e6850b9378ceeed917c09bda9ea523
Contents?: true
Size: 1.75 KB
Versions: 3
Compression:
Stored size: 1.75 KB
Contents
# frozen_string_literal: true require 'dry/plugins/config' require 'dry/plugins/registry/key_error' require 'dry/plugins/registry/resolver' require 'dry/plugins/plugin' require 'dry-container' require 'dry-equalizer' module Dry module Plugins # Plug-in Registry class Registry include Dry::Container::Mixin include Dry::Equalizer(:_container, :config, :plugins) configure do |config| config.resolver = Resolver.new end # @param plugins [Module] def initialize(plugins) @require_path = Inflecto.underscore(plugins.to_s) @plugins = plugins super() end # @return [Module] attr_reader :plugins # @param key [#to_sym] # @param plugin [Module, Plugin] # # @return [Plugin] def register(key, plugin = nil) if key.is_a?(Module) plugin = key key = Inflecto.underscore(Inflecto.demodulize(plugin.name)) end key = key.to_s plugin = plugin.plugin if plugin.is_a? Plugin if key?(key) && resolve(key) != plugin raise Registry::KeyError.new(self, key, plugin) end super key, plugin end # @param plugin [Module] # @param name [Symbol] # # @return [Plugin] def proxy(plugin, name: nil) Plugin.new(self, name, plugin) end # Resolve an item from the container # # @param name [Mixed] # The key for the item you wish to resolve # # @return [Plugin] # # @api public def resolve(name) registry = self plugin = config.resolver.call(_container, name, @require_path) Plugin.new(registry, name, plugin) end # @!parse alias [] resolve end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
dry-plugins-0.4.0 | lib/dry/plugins/registry.rb |
dry-plugins-0.3.0 | lib/dry/plugins/registry.rb |
dry-plugins-0.2.0 | lib/dry/plugins/registry.rb |