X-Git-Url: http://gitweb.michael.orlitzky.com/?p=mailshears.git;a=blobdiff_plain;f=lib%2Frm%2Frm_plugin.rb;h=ff165b4e8081c653c047276a5fb7045ba9a0d938;hp=fc0e7a081d97f602124dc9ccaef2ba53b60aa1d6;hb=df4e02ebf6a4e28a58abcb298a4442a245ad0b15;hpb=72696d3f6e95ef773af9727e9c3459b9038b0fc2 diff --git a/lib/rm/rm_plugin.rb b/lib/rm/rm_plugin.rb index fc0e7a0..ff165b4 100644 --- a/lib/rm/rm_plugin.rb +++ b/lib/rm/rm_plugin.rb @@ -1,35 +1,76 @@ +require 'common/plugin.rb' + +# +# Plugins for the removal of users and domains. +# module RmPlugin + + # Absorb the subclass run() magic from the Plugin::Run module. + extend Plugin::Run + + # The runner class associated with removal plugins. # - # Plugins for the removal of users. + # @return [Class] the {RmRunner} class. # + def self.runner() + return RmRunner + end + - def RmPlugin.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 + # The "dummy" runner class associated with removal plugins. + # + # @return [Class] the {RmDummyRunner} class. + # + def self.dummy_runner() + return RmDummyRunner end - def RmPlugin.includers - return @includers + + # Remove the *target* domain or user. This is a generic version of + # the {#remove_user} and {#remove_domain} operations that will + # dispatch based on the type of *target*. + # + # @param target [User,Domain] the user or domain to remove. + # + def remove(target) + # A generic version of remove_user/remove_domain that + # dispatches base on the class of the target. + if target.is_a?(User) + return remove_user(target) + elsif target.is_a?(Domain) + return remove_domain(target) + else + raise NotImplementedError + end end - def delete_domain(domain) - # Delete the given domain. Some plugins don't have a concept of - # domains, so just delete all users with a username that looks - # like it's in the given domain. - usernames = list_domains_users([domain]) - raise NonexistentDomainError.new(domain) if usernames.empty? + # Remove the given *domain*. Some plugins don't have a concept of + # domains, so the default implementation here removes all users that + # look like they belong to *domain*. Subclasses can be smarter. + # + # @param domain [Domain] the domain to remove. + # + def remove_domain(domain) + users = list_domains_users([domain]) + + # It's possible for a domain to exist with no users, but this + # default implementation is based on the assumption that it should + # work for plugins having no "domain" concept. + raise NonexistentDomainError.new(domain.to_s()) if users.empty? - usernames.each do |u| - delete_user(u) + users.each do |u| + remove_user(u) end end - def delete_user(user) - # Delete the given user. + + # The interface for the "remove a user" operation. Subclasses + # need to implement this method so that it removes *user*. + # + # @param user [User] the user to remove. + # + def remove_user(user) raise NotImplementedError end