class Siba::PluginLoader
Constants
- InitClassName
Attributes
category[RW]
options[RW]
type[RW]
Public Class Methods
loader()
click to toggle source
# File lib/siba/plugins/plugin_loader.rb, line 10 def self.loader @loader ||= PluginLoader.new end
Public Instance Methods
load(category, type, options)
click to toggle source
# File lib/siba/plugins/plugin_loader.rb, line 14 def load(category, type, options) unless Siba::Plugins.valid_category? category raise PluginLoadError, "Incorrect plugin category '#{category}'. Available plugin categories are: #{Siba::Plugins.categories_str}" end raise PluginLoadError, "Options data is incorrect for #{plugin_category_and_type} plugin." unless options.is_a? Hash @category=category @type=type @options = options logger.debug "Loading #{plugin_category_and_type} plugin" require_plugin plugin_module = get_plugin_module plugin_type_module = get_plugin_type_module plugin_module init_class = get_plugin_init_class plugin_type_module init_plugin(init_class) end
Private Instance Methods
available_types_msg()
click to toggle source
# File lib/siba/plugins/plugin_loader.rb, line 91 def available_types_msg return "No #{category} plugins are installed." if find_all_installed.empty? return "Available types are: #{find_all_installed.join(", ")}." if find_all_installed.size > 1 "Available type is '#{find_all_installed.join(", ")}'." end
find_all_installed()
click to toggle source
# File lib/siba/plugins/plugin_loader.rb, line 97 def find_all_installed Siba::InstalledPlugins.all_installed[category] end
get_plugin_init_class(plugin_type_module)
click to toggle source
# File lib/siba/plugins/plugin_loader.rb, line 66 def get_plugin_init_class(plugin_type_module) plugin_type_module.const_get InitClassName rescue Exception => e raise PluginLoadError, "#{InitClassName} class is undefined for #{plugin_category_and_type} plugin." end
get_plugin_module()
click to toggle source
# File lib/siba/plugins/plugin_loader.rb, line 52 def get_plugin_module plugin_module_name = "#{category.capitalize}" Siba.const_get(plugin_module_name) rescue Exception raise PluginLoadError, "Failed to load #{plugin_category_and_type} plugin: module 'Siba::#{plugin_module_name}' is undefined." end
get_plugin_type_module(plugin_module)
click to toggle source
# File lib/siba/plugins/plugin_loader.rb, line 59 def get_plugin_type_module(plugin_module) plugin_type_module_name = StringHelper.camelize type plugin_module.const_get(plugin_type_module_name) rescue raise PluginLoadError, "Failed to load #{plugin_category_and_type} plugin: module 'Siba::#{category.capitalize}::#{plugin_type_module_name}' is undefined." end
init_plugin(plugin_init_class)
click to toggle source
# File lib/siba/plugins/plugin_loader.rb, line 72 def init_plugin(plugin_init_class) plugin_init_class.new options rescue ArgumentError logger.error "Failed to load #{plugin_category_and_type} plugin: 'initialize' method is not defined or has wrong agruments." raise end
plugin_category_and_type()
click to toggle source
# File lib/siba/plugins/plugin_loader.rb, line 79 def plugin_category_and_type Siba::InstalledPlugins.plugin_category_and_type category, type end
plugin_dir()
click to toggle source
# File lib/siba/plugins/plugin_loader.rb, line 87 def plugin_dir Siba::InstalledPlugins.type_dir category, type end
plugins_root_dir()
click to toggle source
# File lib/siba/plugins/plugin_loader.rb, line 83 def plugins_root_dir Siba::InstalledPlugins.category_dir category end
require_plugin()
click to toggle source
# File lib/siba/plugins/plugin_loader.rb, line 36 def require_plugin path_to_init_file = File.join(plugin_dir, "init.rb") if File.exists?(path_to_init_file) require path_to_init_file else gem_name = Siba::InstalledPlugins.gem_name category, type begin Gem::Specification.find_by_name(gem_name) rescue Gem::LoadError error_msg = Siba::InstalledPlugins.install_gem_message(category, type) raise PluginLoadError, error_msg end require gem_name end end