diff options
author | Matthias Hecker <mail@apoc.cc> | 2020-04-16 23:48:42 +0200 |
---|---|---|
committer | Matthias Hecker <mail@apoc.cc> | 2020-04-16 23:48:42 +0200 |
commit | 7bee70f012b85c03f73fa3e765417a939e02a5cf (patch) | |
tree | 64385c8d40a47a60f9ca3365cf92248f2fc8c6bc | |
parent | ff6d7e5d043da99b2da36f628d52b7b5df47119d (diff) |
core: sets plugin_path to loaded plugins
While loading a plugin in the manager using #load_botmodule_file this
will remember the directory of the file that is being loaded in
@next_plugin_path. In the plugin/BotModule initialization we set the
path in plugin_path of the plugin.
This was the only solution I could find to get this information in the
plugin. It is useful because this allows the plugin to know in which
directory it is located, it can then easily access data files stored
alongside the plugin.
Some built-in plugins (see #42) use the data/rbot/templates to copy
data files on bot load (see #repopulate_botclass_directory) into the
profile directory (~/.rbot/).
-rw-r--r-- | lib/rbot/plugins.rb | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/lib/rbot/plugins.rb b/lib/rbot/plugins.rb index 9589b202..76c76ae1 100644 --- a/lib/rbot/plugins.rb +++ b/lib/rbot/plugins.rb @@ -161,6 +161,9 @@ module Plugins # the message map handler attr_reader :handler + # the directory in which the plugin is located + attr_reader :plugin_path + # Initialise your bot module. Always call super if you override this method, # as important variables are set up for you: # @@ -191,6 +194,7 @@ module Plugins @registry = @bot.registry_factory.create(@bot.path, self.class.to_s.gsub(/^.*::/, '')) @manager.add_botmodule(self) + @plugin_path = @manager.next_plugin_path if self.respond_to?('set_language') self.set_language(@bot.lang.language) end @@ -413,6 +417,7 @@ module Plugins attr_reader :core_module_dirs attr_reader :plugin_dirs + attr_reader :next_plugin_path # This is the list of patterns commonly delegated to plugins. # A fast delegation lookup is enabled for them. @@ -610,8 +615,14 @@ module Plugins begin plugin_string = IO.read(fname) debug "loading #{desc}#{fname}" + + # set path of the plugin that will be loaded next (see BotModule#initialize) + @next_plugin_path = File.dirname fname + plugin_module.module_eval(plugin_string, fname) + @next_plugin_path = nil + return :loaded rescue Exception => err # rescue TimeoutError, StandardError, NameError, LoadError, SyntaxError => err |