Sha256: f5a94bf42ef766968c22cd561a382e0052017e92b3a0e7d41711fd35357fd3ff

Contents?: true

Size: 1.51 KB

Versions: 13

Compression:

Stored size: 1.51 KB

Contents

# frozen_string_literal: true

class Serega
  # Plugins are stored here
  module SeregaPlugins
    @plugins = {}

    class << self
      #
      # Registers given plugin to be able to load it using symbol name.
      #
      # @param name [Symbol] Plugin name
      # @param mod [Module] Plugin module
      #
      # @example Register plugin
      #   SeregaPlugins.register_plugin(:plugin_name, PluginModule)
      #
      # @return [void]
      #
      def register_plugin(name, mod)
        @plugins[name] = mod
      end

      #
      # Loads plugin code and returns plugin core module.
      #
      # @param name [Symbol, Module] plugin name or plugin itself
      #
      # @raise [SeregaError] Raises SeregaError when plugin was not found
      #
      # @example Find plugin when providing name
      #   SeregaPlugins.find_plugin(:presenter) # => SeregaPlugins::Presenter
      #
      # @example Find plugin when providing plugin itself
      #   SeregaPlugins.find_plugin(Presenter) # => Presenter
      #
      # @return [Class<Module>] Plugin core module
      #
      def find_plugin(name)
        return name if name.is_a?(Module)
        return @plugins[name] if @plugins.key?(name)

        require_plugin(name)

        @plugins[name] || raise(SeregaError, "Plugin '#{name}' did not register itself correctly")
      end

      private

      def require_plugin(name)
        require "serega/plugins/#{name}/#{name}"
      rescue LoadError
        raise SeregaError, "Plugin '#{name}' does not exist"
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
serega-0.21.0 lib/serega/plugins.rb
serega-0.20.1 lib/serega/plugins.rb
serega-0.20.0 lib/serega/plugins.rb
serega-0.19.0 lib/serega/plugins.rb
serega-0.18.0 lib/serega/plugins.rb
serega-0.17.0 lib/serega/plugins.rb
serega-0.16.0 lib/serega/plugins.rb
serega-0.15.0 lib/serega/plugins.rb
serega-0.14.0 lib/serega/plugins.rb
serega-0.12.0 lib/serega/plugins.rb
serega-0.11.2 lib/serega/plugins.rb
serega-0.11.1 lib/serega/plugins.rb
serega-0.11.0 lib/serega/plugins.rb