class AnyCache::Plugins::Registry
@api private @since 0.5.0
Attributes
@return [Mutex]
@api private @since 0.5.0
@return [Hash]
@api private @since 0.5.0
Public Class Methods
@return [void]
@api private @since 0.5.0
# File lib/any_cache/plugins/registry.rb, line 10 def initialize @plugin_set = {} @access_lock = Mutex.new end
Public Instance Methods
@param plugin_name [Symbol, String] @return [AnyCache::Plugins::Abstract]
@api private @since 0.5.0
# File lib/any_cache/plugins/registry.rb, line 20 def [](plugin_name) thread_safe { fetch(plugin_name) } end
@return [Array<String>]
@api private @since 0.5.0
# File lib/any_cache/plugins/registry.rb, line 39 def names thread_safe { plugin_names } end
@param plugin_name [Symbol, String] @param plugin_module [AnyCache::Plugins::Abstract] @return [void]
@api private @since 0.5.0
# File lib/any_cache/plugins/registry.rb, line 30 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 [AnyCache::Plugins::Abstract] @return [void]
@raise [AnyCache::AlreadyRegisteredPluginError]
@api private @since 0.5.0
# File lib/any_cache/plugins/registry.rb, line 90 def apply(plugin_name, plugin_module) plugin_name = indifferently_accessable_plugin_name(plugin_name) if registered?(plugin_name) raise AnyCache::AlreadyRegisteredPluginError, "#{plugin_name} plugin already exist" end plugin_set[plugin_name] = plugin_module end
@param plugin_name [Symbol, String] @return [AnyCache::Plugins::Abstract]
@raise [AnyCache::UnregisteredPluginError]
@api private @since 0.5.0
# File lib/any_cache/plugins/registry.rb, line 107 def fetch(plugin_name) plugin_name = indifferently_accessable_plugin_name(plugin_name) unless registered?(plugin_name) raise AnyCache::UnregisteredPluginError, "#{plugin_name} plugin is not registered" end plugin_set[plugin_name] end
@param key [Symbol, String] @return [String]
@api private @since 0.5.0
# File lib/any_cache/plugins/registry.rb, line 122 def indifferently_accessable_plugin_name(plugin_name) plugin_name.to_s end
@return [Array<String>]
@api private @since 0.5.0
# File lib/any_cache/plugins/registry.rb, line 69 def plugin_names plugin_set.keys end
@param plugin_name [String] @return [Boolean]
@api private @since 0.5.0
# File lib/any_cache/plugins/registry.rb, line 78 def registered?(plugin_name) plugin_set.key?(plugin_name) end
@return [void]
@api private @since 0.5.0
# File lib/any_cache/plugins/registry.rb, line 61 def thread_safe access_lock.synchronize { yield if block_given? } end