Overhaul everything to get consistent error reports.
[mailshears.git] / lib / rm / rm_runner.rb
index 114aabc355ad1c215f0b95e3cf1f20a2a626ea4d..2df8410c5ea9d6d3d65d2565ec9cc00552d7b1f0 100644 (file)
@@ -1,3 +1,4 @@
+require 'common/errors'
 require 'common/runner'
 
 class RmRunner
@@ -5,37 +6,32 @@ class RmRunner
 
   def run(plugin, *targets)
     targets.each do |target|
-      # Why think too hard? An account has an @, a domain doesn't.
-      if target.include?('@') then
-        begin
-          account_description = plugin.describe_account(target)
-          plugin.delete_account(target)
-          report(plugin, "Removed account: #{target} (#{account_description})")
+      remove_target(plugin, target)
+    end
+  end
+
+  private;
+
+  def remove_target(plugin, target)
+    # Wrap the "remove this thing" operation so that it can be reused
+    # in the prine plugin.
+    target_description = plugin.describe(target)
 
-        rescue NonexistentAccountError => e
-          report(plugin, "Account not found: #{e.to_s}")
-        rescue StandardError => e
-          report(plugin, "There was an error removing the account: #{e.to_s}")
-          Kernel.exit(ExitCodes::DATABASE_ERROR)
-        end
-      else
-        begin
-          domain_description = plugin.describe_domain(target)
-          plugin.delete_domain(target)
-          report(plugin, "Removed domain: #{target} (#{domain_description})")
+    begin
+      plugin.delete(target)
+      msg =  "Removed #{target.class.to_s().downcase()} #{target}"
 
-        rescue NonexistentAccountError => e
-          # Can happen in the usernames.each... block.
-          report(plugin, "Account not found: #{e.to_s}")
-        rescue NonexistentDomainError => e
-          report(plugin, "Domain not found: #{e.to_s}")
-        rescue StandardError => e
-          report(plugin, "There was an error removing the domain: #{e.to_s}")
-          Kernel.exit(ExitCodes::DATABASE_ERROR)
-        end
+      # Only append the extra description if it's useful.
+      if not target_description.nil? and
+         not target_description.empty? and
+         not target_description == target.to_s() then
+        msg += " (#{target_description})"
       end
-    end
+      msg += '.'
 
+      report(plugin, msg)
+    rescue NonexistentDomainError, NonexistentUserError => e
+      report(plugin, "#{target.class.to_s()} #{e.to_s} not found.")
+    end
   end
-
 end