Class: ModSpox::PluginManager
- Inherits:
-
Object
- Object
- ModSpox::PluginManager
- Defined in:
- lib/mod_spox/PluginManager.rb
Instance Attribute Summary collapse
-
#plugins ⇒ Object
readonly
Hash of plugins.
Instance Method Summary collapse
-
#destroy_plugins ⇒ Object
Destroys plugins.
-
#initialize(pipeline) ⇒ PluginManager
constructor
- pipeline
-
Pipeline for messages Create new PluginManager.
-
#load_plugin(message) ⇒ Object
- message
-
Messages::Internal::PluginLoadRequest Loads a plugin.
-
#plugin_request(message) ⇒ Object
- message
-
Messages::Internal::PluginRequest Returns a plugin to requesting object.
-
#reload_plugins(mesasge = nil) ⇒ Object
- message
-
Messages::Internal::PluginReload Destroys and reinitializes plugins.
-
#send_modules(message) ⇒ Object
- message
-
Messages::Internal::PluginModuleRequest Sends the plugins module to the requester.
-
#unload_plugin(message) ⇒ Object
- message
-
Messages::Internal::PluginUnloadRequest Unloads a plugin.
Constructor Details
#initialize(pipeline) ⇒ PluginManager
- pipeline
-
Pipeline for messages
Create new PluginManager
11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/mod_spox/PluginManager.rb', line 11 def initialize(pipeline) @plugins = Hash.new @pipeline = pipeline @pipeline.hook(self, :load_plugin, :Internal_PluginLoadRequest) @pipeline.hook(self, :unload_plugin, :Internal_PluginUnloadRequest) @pipeline.hook(self, :reload_plugins, :Internal_PluginReload) @pipeline.hook(self, :send_modules, :Internal_PluginModuleRequest) @pipeline.hook(self, :plugin_request, :Internal_PluginRequest) @plugins_module = Module.new load_plugins end |
Instance Attribute Details
#plugins ⇒ Object (readonly)
Hash of plugins. Defined by class name symbol (i.e. Trivia class: plugins)
7 8 9 |
# File 'lib/mod_spox/PluginManager.rb', line 7 def plugins @plugins end |
Instance Method Details
#destroy_plugins ⇒ Object
Destroys plugins
31 32 33 |
# File 'lib/mod_spox/PluginManager.rb', line 31 def destroy_plugins unload_plugins end |
#load_plugin(message) ⇒ Object
- message
-
Messages::Internal::PluginLoadRequest
Loads a plugin
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/mod_spox/PluginManager.rb', line 37 def load_plugin() begin path = !.name ? BotConfig[:userpluginpath] : "#{BotConfig[:userpluginpath]}/#{.name}" FileUtils.copy(.path, path) reload_plugins @pipeline << Messages::Internal::PluginLoadResponse.new(.requester, true) Logger.log("Loaded new plugin: #{.path}", 10) rescue Object => boom Logger.log("Failed to load plugin: #{.path} Reason: #{boom}", 10) @pipeline << Messages::Internal::PluginLoadResponse.new(.requester, false) end end |
#plugin_request(message) ⇒ Object
- message
-
Messages::Internal::PluginRequest
Returns a plugin to requesting object
75 76 77 78 79 80 81 82 |
# File 'lib/mod_spox/PluginManager.rb', line 75 def plugin_request() if(@plugins.has_key?(.plugin)) response = Messages::Internal::PluginResponse.new(.requester, @plugins[.plugin]) else response = Messages::Internal::PluginResponse.new(.requester, nil) end @pipeline << response end |
#reload_plugins(mesasge = nil) ⇒ Object
- message
-
Messages::Internal::PluginReload
Destroys and reinitializes plugins
25 26 27 28 |
# File 'lib/mod_spox/PluginManager.rb', line 25 def reload_plugins(mesasge=nil) unload_plugins load_plugins end |
#send_modules(message) ⇒ Object
- message
-
Messages::Internal::PluginModuleRequest
Sends the plugins module to the requester
69 70 71 |
# File 'lib/mod_spox/PluginManager.rb', line 69 def send_modules() @pipeline << Messages::Internal::PluginModuleResponse.new(.requester, @plugins_module) end |
#unload_plugin(message) ⇒ Object
- message
-
Messages::Internal::PluginUnloadRequest
Unloads a plugin
52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/mod_spox/PluginManager.rb', line 52 def unload_plugin() begin unless(.name.nil?) FileUtils.copy(.path, "#{BotConfig[:userpluginpath]}/#{.name}") end FileUtils.remove_file(.path) reload_plugins @pipeline << Messages::Internal::PluginUnloadResponse.new(.requester, true) Logger.log("Unloaded plugin: #{.path}", 10) rescue Object => boom Logger.log("Failed to unload plugin: #{.path} Reason: #{boom}", 10) @pipeline << Messages::Internal::PluginUnloadResponse.new(.requester, false) end end |