class Qonfig::Plugins::Registry
@api private @since 0.4.0
Attributes
@return [Mutex]
@api private @since 0.4.0
@return [Hash]
@api private @since 0.4.0
Public Class Methods
@return [void]
@api private @since 0.4.0
# File lib/qonfig/plugins/registry.rb, line 13 def initialize @plugin_set = {} @access_lock = Mutex.new end
Public Instance Methods
@param plugin_name [Symbol, String] @return [Qonfig::Plugins::Abstract]
@api private @since 0.4.0
# File lib/qonfig/plugins/registry.rb, line 23 def [](plugin_name) thread_safe { fetch(plugin_name) } end
@param block [Block] @return [Enumerable]
@api private @since 0.19.0
# File lib/qonfig/plugins/registry.rb, line 51 def each(&block) thread_safe { iterate(&block) } end
@return [Array<String>]
@api private @since 0.4.0
# File lib/qonfig/plugins/registry.rb, line 42 def names thread_safe { plugin_names } end
@param plugin_name [Symbol, String] @param plugin_module [Qonfig::Plugins::Abstract] @return [void]
@api private @since 0.4.0
# File lib/qonfig/plugins/registry.rb, line 33 def register(plugin_name, plugin_module) thread_safe { apply(plugin_name, plugin_module) } end
Private Instance Methods
@param plugin_name [Symbol, String] @param plugin_module [Qonfig::Plugins::Abstract] @return [void]
@raise [Qonfig::AlreadyRegisteredPluginError]
@api private @since 0.4.0
# File lib/qonfig/plugins/registry.rb, line 111 def apply(plugin_name, plugin_module) plugin_name = indifferently_accessable_plugin_name(plugin_name) if registered?(plugin_name) raise Qonfig::AlreadyRegisteredPluginError, "#{plugin_name} plugin already exist" end plugin_set[plugin_name] = plugin_module end
@param plugin_name [Symbol, String] @return [Qonfig::Plugins::Abstract]
@raise [Qonfig::UnregisteredPluginError]
@api private @since 0.4.0
# File lib/qonfig/plugins/registry.rb, line 128 def fetch(plugin_name) plugin_name = indifferently_accessable_plugin_name(plugin_name) unless registered?(plugin_name) raise Qonfig::UnregisteredPluginError, "#{plugin_name} plugin is not registered" end plugin_set[plugin_name] end
@param key [Symbol, String] @return [String]
@api private @since 0.4.0
# File lib/qonfig/plugins/registry.rb, line 143 def indifferently_accessable_plugin_name(plugin_name) plugin_name.to_s end
@param block [Block] @return [Enumerable]
@api private @since 0.19.0
# File lib/qonfig/plugins/registry.rb, line 90 def iterate(&block) block_given? ? plugin_set.each_pair(&block) : plugin_set.each_pair end
@return [Array<String>]
@api private @since 0.4.0
# File lib/qonfig/plugins/registry.rb, line 81 def plugin_names plugin_set.keys end
@param plugin_name [String] @return [Boolean]
@api private @since 0.4.0
# File lib/qonfig/plugins/registry.rb, line 99 def registered?(plugin_name) plugin_set.key?(plugin_name) end
@return [void]
@api private @since 0.4.0
# File lib/qonfig/plugins/registry.rb, line 73 def thread_safe access_lock.synchronize { yield if block_given? } end