Sha256: 382bf33ad718792a0ead77a37c00de25b096d392559ef854208f47cb0d398f8b

Contents?: true

Size: 1.63 KB

Versions: 8

Compression:

Stored size: 1.63 KB

Contents

# frozen_string_literal: true

# @api public
# @since 0.4.0
module Qonfig::Plugins
  require_relative 'plugins/registry'
  require_relative 'plugins/access_mixin'
  require_relative 'plugins/abstract'
  require_relative 'plugins/toml'
  require_relative 'plugins/pretty_print'

  # @since 0.4.0
  @plugin_registry = Registry.new
  # @since 0.4.0
  @access_lock = Mutex.new

  class << self
    # @param plugin_name [Symbol, String]
    # @return [void]
    #
    # @api public
    # @since 0.4.0
    def load(plugin_name)
      thread_safe { plugin_registry[plugin_name].load! }
    end

    # @return [Array<String>]
    #
    # @api public
    # @since 0.19.0
    def loaded_plugins
      thread_safe do
        plugin_registry.select do |_plugin_name, plugin_module|
          plugin_module.loaded?
        end.map do |plugin_name, _plugin_module|
          plugin_name
        end
      end
    end

    # @return [Array<String>]
    #
    # @api public
    # @since 0.4.0
    def names
      thread_safe { plugin_registry.names }
    end

    # @param plugin_name [Symbol, String]
    # @return [void]
    #
    # @api private
    # @since 0.4.0
    def register_plugin(plugin_name, plugin_module)
      thread_safe { plugin_registry[plugin_name] = plugin_module }
    end

    private

    # @return [Qonfig::Plugins::Registry]
    #
    # @api private
    # @since 0.4.0
    attr_reader :plugin_registry

    # @return [Mutex]
    #
    # @api private
    # @since 0.4.0
    attr_reader :access_lock

    # @return [void]
    #
    # @api private
    # @since 0.4.0
    def thread_safe
      access_lock.synchronize { yield if block_given? }
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
qonfig-0.24.1 lib/qonfig/plugins.rb
qonfig-0.24.0 lib/qonfig/plugins.rb
qonfig-0.23.0 lib/qonfig/plugins.rb
qonfig-0.22.0 lib/qonfig/plugins.rb
qonfig-0.21.0 lib/qonfig/plugins.rb
qonfig-0.20.0 lib/qonfig/plugins.rb
qonfig-0.19.1 lib/qonfig/plugins.rb
qonfig-0.19.0 lib/qonfig/plugins.rb