class SmartCore::Initializer::Plugins::Registry
@api private @since 0.1.0
Attributes
@return [Mutex]
@api private @since 0.1.0
@return [Hash]
@api private @since 0.1.0
Public Class Methods
@return [void]
@api private @since 0.1.0
# File lib/smart_core/initializer/plugins/registry.rb, line 13 def initialize @plugin_set = {} @access_lock = Mutex.new end
Public Instance Methods
@param plugin_name [Symbol, String] @return [SmartCore::Initializer::Plugins::Abstract]
@api private @since 0.1.0
# File lib/smart_core/initializer/plugins/registry.rb, line 23 def [](plugin_name) thread_safe { fetch(plugin_name) } end
@param block [Block] @return [Enumerable]
@api private @since 0.1.0
# File lib/smart_core/initializer/plugins/registry.rb, line 59 def each(&block) thread_safe { iterate(&block) } end
@return [Hash<String,Class<SmartCore::Initializer::Plugins::Abstract>>]
@api private @since 0.1.0
# File lib/smart_core/initializer/plugins/registry.rb, line 50 def loaded thread_safe { loaded_plugins } end
@return [Array<String>]
@api private @since 0.1.0
# File lib/smart_core/initializer/plugins/registry.rb, line 42 def names thread_safe { plugin_names } end
@param plugin_name [Symbol, String] @param plugin_module [SmartCore::Initializer::Plugins::Abstract] @return [void]
@api private @since 0.1.0
# File lib/smart_core/initializer/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 [SmartCore::Initializer::Plugins::Abstract] @return [void]
@raise [SmartCore::Initializer::AlreadyRegisteredPluginError]
@api private @since 0.1.0
# File lib/smart_core/initializer/plugins/registry.rb, line 127 def apply(plugin_name, plugin_module) plugin_name = indifferently_accessible_plugin_name(plugin_name) if registered?(plugin_name) raise(SmartCore::Initializer::AlreadyRegisteredPluginError, <<~ERROR_MESSAGE) #{plugin_name} plugin already exists ERROR_MESSAGE end plugin_set[plugin_name] = plugin_module end
@param plugin_name [Symbol, String] @return [SmartCore::Initializer::Plugins::Abstract]
@raise [SmartCore::Initializer::UnregisteredPluginError]
@api private @since 0.1.0
# File lib/smart_core/initializer/plugins/registry.rb, line 146 def fetch(plugin_name) plugin_name = indifferently_accessible_plugin_name(plugin_name) unless registered?(plugin_name) raise(SmartCore::Initializer::UnregisteredPluginError, <<~ERROR_MESSAGE) #{plugin_name} plugin is not registered ERROR_MESSAGE end plugin_set[plugin_name] end
@param key [Symbol, String] @return [String]
@api private @since 0.1.0
# File lib/smart_core/initializer/plugins/registry.rb, line 163 def indifferently_accessible_plugin_name(plugin_name) plugin_name.to_s end
@param block [Block] @return [Enumerable]
@api private @since 0.1.0
# File lib/smart_core/initializer/plugins/registry.rb, line 98 def iterate(&block) block_given? ? plugin_set.each_pair(&block) : plugin_set.each_pair end
@return [Array<SmartCore::Initializer::Plugins::Abstract>]
@api private @since 0.1.0
# File lib/smart_core/initializer/plugins/registry.rb, line 115 def loaded_plugins plugin_set.select { |_plugin_name, plugin_module| plugin_module.loaded? } end
@return [Array<String>]
@api private @since 0.1.0
# File lib/smart_core/initializer/plugins/registry.rb, line 89 def plugin_names plugin_set.keys end
@param plugin_name [String] @return [Boolean]
@api private @since 0.1.0
# File lib/smart_core/initializer/plugins/registry.rb, line 107 def registered?(plugin_name) plugin_set.key?(plugin_name) end
@return [void]
@api private @since 0.1.0
# File lib/smart_core/initializer/plugins/registry.rb, line 81 def thread_safe access_lock.synchronize { yield if block_given? } end