X-Git-Url: http://gitweb.michael.orlitzky.com/?p=mailshears.git;a=blobdiff_plain;f=lib%2Fcommon%2Fplugin.rb;h=81e1fbb6248e323f315c0108f7c9e11f5bb72b8c;hp=77d80c469e7b1e94f794b84b0c532f632765f77e;hb=c2737d4d972df30725e417bed0940fc8df8e88bd;hpb=bd2dabf89ab277fbe315b05e6dfa839afb5ce5ef diff --git a/lib/common/plugin.rb b/lib/common/plugin.rb index 77d80c4..81e1fbb 100644 --- a/lib/common/plugin.rb +++ b/lib/common/plugin.rb @@ -2,16 +2,49 @@ # operations that all plugins are supposed to support. module Plugin - def Plugin.included(c) - # Callback, called whenever another class or module includes this - # one. The parameter given is the name of the class or module - # that included us. - @includers ||= [] - @includers << c - end + module Run + # Module methods, meant to be extended. Includers can explicitly + # extend this to get a run() method defined in terms of their own + # runner() and dummy_runner() methods. + + def included(c) + # Callback, called whenever another class or module includes this + # one. The parameter given is the name of the class or module + # that included us. + @includers ||= [] + @includers << c + end + + def includers + return @includers + end + + def runner() + # The Runner associated with this plugin. + raise NotImplementedError + end - def Plugin.includers - return @includers + def dummy_runner() + # The RummyRunner associated with this plugin. + raise NotImplementedError + end + + def run(cfg, *args) + includers().each do |includer| + plugin = includer.new(cfg) + + if cfg.i_mean_business then + runner = runner().new() + else + runner = dummy_runner().new() + end + + # The splat passes the correct (we hope) number of arguments to the + # appropriate runner. The Rm(Dummy)Runner have splats on their + # *target arguments as well, to turn ARGV back into an array. + runner.run(plugin, *args) + end + end end def describe_domain(domain) @@ -21,8 +54,8 @@ module Plugin raise NotImplementedError end - def describe_account(account) - # Provide a "description" of the account. This is output along + def describe_user(user) + # Provide a "description" of the user. This is output along # with the domain name and can be anything of use to the system # administrator. raise NotImplementedError