Class: Tomo::Configuration::PluginsRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/tomo/configuration/plugins_registry.rb

Defined Under Namespace

Classes: FileResolver, GemResolver

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializePluginsRegistry

Returns a new instance of PluginsRegistry.



11
12
13
14
15
# File 'lib/tomo/configuration/plugins_registry.rb', line 11

def initialize
  @settings = {}
  @helper_modules = []
  @namespaced_classes = []
end

Instance Attribute Details

#helper_modulesObject (readonly)

Returns the value of attribute helper_modules.



9
10
11
# File 'lib/tomo/configuration/plugins_registry.rb', line 9

def helper_modules
  @helper_modules
end

#settingsObject (readonly)

Returns the value of attribute settings.



9
10
11
# File 'lib/tomo/configuration/plugins_registry.rb', line 9

def settings
  @settings
end

Instance Method Details

#bind_tasks(context) ⇒ Object



21
22
23
24
25
26
27
28
29
30
# File 'lib/tomo/configuration/plugins_registry.rb', line 21

def bind_tasks(context)
  namespaced_classes.each_with_object({}) do |(namespace, klass), result|
    library = klass.new(context)

    klass.public_instance_methods(false).each do |name|
      qualified = [namespace, name].compact.join(":")
      result[qualified] = library.public_method(name)
    end
  end
end

#load_plugin(namespace, plugin_class) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/tomo/configuration/plugins_registry.rb', line 43

def load_plugin(namespace, plugin_class)
  Tomo.logger.debug("Loading plugin #{plugin_class}")

  helper_modules.push(*plugin_class.helper_modules)
  settings.merge!(plugin_class.default_settings) { |_, exist, _| exist }
  register_task_libraries(namespace, *plugin_class.tasks_classes)
end

#load_plugin_by_name(name) ⇒ Object



32
33
34
35
# File 'lib/tomo/configuration/plugins_registry.rb', line 32

def load_plugin_by_name(name)
  plugin = GemResolver.resolve(name)
  load_plugin(name, plugin)
end

#load_plugin_from_path(path) ⇒ Object



37
38
39
40
41
# File 'lib/tomo/configuration/plugins_registry.rb', line 37

def load_plugin_from_path(path)
  name = File.basename(path).sub(/\.rb$/i, "")
  plugin = FileResolver.resolve(path)
  load_plugin(name, plugin)
end

#task_namesObject



17
18
19
# File 'lib/tomo/configuration/plugins_registry.rb', line 17

def task_names
  bind_tasks(nil).keys
end