+# All plugins should include this module. It defines the basic
+# 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
+
+ def Plugin.includers
+ return @includers
+ end
+
+ def describe_domain(domain)
+ # Provide a "description" of the domain. This is output along
+ # with the domain name and can be anything of use to the system
+ # administrator.
+ raise NotImplementedError
+ end
+
+ def describe_account(account)
+ # Provide a "description" of the account. This is output along
+ # with the domain name and can be anything of use to the system
+ # administrator.
+ raise NotImplementedError
+ end
+
+ def delete_domain(domain)
+ # Delete the given domain.
+ raise NotImplementedError
+ end
+
+ def delete_account(account)
+ # Delete the given account.
+ raise NotImplementedError
+ end
+
+ def get_leftover_domains(db_domains)
+ # Given a list of domains, determine which domains belonging to this plugin
+ # are not contained in the given list.
+ raise NotImplementedError
+ end
+
+ def get_leftover_accounts(db_accounts)
+ # Given a list of accounts, determine which accounts belonging to this plugin
+ # are not contained in the given list.
+ raise NotImplementedError
+ end
+end