Class: Diggit::PluginLoader

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/dgit/core.rb

Overview

Class to handle loading of diggit plugins. Diggit plugins are defined in camel cased classes derived from Plugin. Their name is the underscore cased version of the class name (example ‘MyPlugin` becomes `my_plugin`). It uses a singleton pattern, so you have to create an instance like that:

Examples:

PluginLoader.instance

See Also:

Constant Summary collapse

PLUGINS_TYPES =
%i[addon analysis join].freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializePluginLoader

Constructor. Should not be called directly. Use instance instead.



245
246
247
# File 'lib/dgit/core.rb', line 245

def initialize
	@plugins = {}
end

Class Method Details

.plugin_paths(name, type, root) ⇒ Object



239
240
241
# File 'lib/dgit/core.rb', line 239

def self.plugin_paths(name, type, root)
	Dir.glob(File.join(root, 'plugins', type.to_s, '**{,/*/**}', "#{name}.rb"))
end

Instance Method Details

#load_plugin(name, type, instance = false) ⇒ Plugin, Class

Load the plugin with the given name and type.

Parameters:

  • name (String)

    the name of the plugin

  • type (Symbol)

    the type of the plugin: ‘:addon`, `:analysis` or `:join`.

  • instance (Boolean) (defaults to: false)

    ‘true` for retrieving an instance or `false` for retrieving the class.

Returns:

  • (Plugin, Class)

    the instance or class of the plugin.



232
233
234
235
236
237
# File 'lib/dgit/core.rb', line 232

def load_plugin(name, type, instance = false)
	plugin = search_plugin(name, type)
	raise "Plugin #{name} not found." unless plugin
	return plugin.new(Dig.it.options) if instance
	plugin
end