Module: Dopi::PluginManager

Defined in:
lib/dopi/pluginmanager.rb

Class Method Summary collapse

Class Method Details

.<<(plugin_klass) ⇒ Object



11
12
13
14
15
16
17
18
# File 'lib/dopi/pluginmanager.rb', line 11

def self.<<(plugin_klass)
  plugin_name = get_plugin_name(plugin_klass)

  raise Dopi::PluginLoaderError,
    "Plugin class #{plugin_klass.to_s} (#{plugin_name}) already loaded" if @plugins[plugin_name]

  @plugins[plugin_name] = plugin_klass
end

.create_instance(plugin_name, *args) ⇒ Object



20
21
22
23
24
25
26
# File 'lib/dopi/pluginmanager.rb', line 20

def self.create_instance(plugin_name, *args)
  begin
    @plugins[plugin_name].new(*args)
  rescue Exception => e
    raise PluginLoaderError, "Could not create instance of plugin #{plugin_name}: #{e.message}"
  end
end

.get_plugin_name(plugin_klass) ⇒ Object



28
29
30
31
32
33
34
35
# File 'lib/dopi/pluginmanager.rb', line 28

def self.get_plugin_name(plugin_klass)
  plugin_klass.to_s.
    gsub(/::/, '/').
    gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
    gsub(/([a-z\d])([A-Z])/,'\1_\2').
    tr("-", "_").
    downcase
end

.plugin_klass(plugin_name) ⇒ Object



57
58
59
# File 'lib/dopi/pluginmanager.rb', line 57

def self.plugin_klass(plugin_name)
  @plugins[plugin_name]
end

.plugin_klass_list(filter = nil) ⇒ Object

Expects a regular expression as a plugin filter



53
54
55
# File 'lib/dopi/pluginmanager.rb', line 53

def self.plugin_klass_list(filter = nil)
  plugin_list(filter).values
end

.plugin_list(filter = nil) ⇒ Object

Expects a regular expression as a plugin filter



38
39
40
41
42
43
44
45
# File 'lib/dopi/pluginmanager.rb', line 38

def self.plugin_list(filter = nil)
  if filter
    regexp = Regexp.new(filter)
    @plugins.select{|p| p =~ regexp}
  else
    @plugins
  end
end

.plugin_name_list(filter = nil) ⇒ Object

Expects a regular expression as a plugin filter



48
49
50
# File 'lib/dopi/pluginmanager.rb', line 48

def self.plugin_name_list(filter = nil)
  plugin_list(filter).keys
end