class AnyCache::Plugins::Registry

@api private @since 0.5.0

Attributes

access_lock[R]

@return [Mutex]

@api private @since 0.5.0

plugin_set[R]

@return [Hash]

@api private @since 0.5.0

Public Class Methods

new() click to toggle source

@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

[](plugin_name) click to toggle source

@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
[]=(plugin_name, plugin_module)
Alias for: register
names() click to toggle source

@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
register(plugin_name, plugin_module) click to toggle source

@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
Also aliased as: []=

Private Instance Methods

apply(plugin_name, plugin_module) click to toggle source

@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
fetch(plugin_name) click to toggle source

@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
indifferently_accessable_plugin_name(plugin_name) click to toggle source

@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
plugin_names() click to toggle source

@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
registered?(plugin_name) click to toggle source

@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
thread_safe() { || ... } click to toggle source

@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