class Qonfig::Plugins::Registry

@api private @since 0.4.0

Attributes

access_lock[R]

@return [Mutex]

@api private @since 0.4.0

plugin_set[R]

@return [Hash]

@api private @since 0.4.0

Public Class Methods

new() click to toggle source

@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

[](plugin_name) click to toggle source

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

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

@return [Array<String>]

@api private @since 0.4.0

# File lib/qonfig/plugins/registry.rb, line 42
def names
  thread_safe { plugin_names }
end
register(plugin_name, plugin_module) click to toggle source

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

Private Instance Methods

apply(plugin_name, plugin_module) click to toggle source

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

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

@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
iterate(&block) click to toggle source

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

@return [Array<String>]

@api private @since 0.4.0

# File lib/qonfig/plugins/registry.rb, line 81
def plugin_names
  plugin_set.keys
end
registered?(plugin_name) click to toggle source

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

@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