X-Git-Url: http://gitweb.michael.orlitzky.com/?p=mailshears.git;a=blobdiff_plain;f=lib%2Fmv%2Fmv_runner.rb;h=fe44e5c244d3fe4cff66f140bb4d684ca903364a;hp=d2a7c5ba01d4664882a14b9b539f76f1f578d709;hb=df4e02ebf6a4e28a58abcb298a4442a245ad0b15;hpb=861e51dd6a409cb41fa6fdac3f49195acccc6541 diff --git a/lib/mv/mv_runner.rb b/lib/mv/mv_runner.rb index d2a7c5b..fe44e5c 100644 --- a/lib/mv/mv_runner.rb +++ b/lib/mv/mv_runner.rb @@ -1,33 +1,69 @@ +require 'common/domain' require 'common/errors' require 'common/runner' +# Perform the moving (renaming) of users/domains using {MvPlugin}s. +# class MvRunner include Runner - def run(plugin, src, dst) - # Why think too hard? An user has an @, a domain doesn't. - if not src.include?('@') then - # We only support moving users right now, and the destination - # domain must already exist. - raise NotImplementedError.new('Only users can be moved.') + # Run *plugin* to move the user *src* to *dst*. The method + # signature includes the unused *cfg* for consistency with the + # runners that do need a {Configuration}. + # + # @param cfg [Configuration] unused. + # + # @param plugin [Class] plugin class that will perform the move. + # + # @param src [User] the source user to be moved. + # + # @param dst [User] the destination user being moved to. + # + def run(cfg, plugin, src, dst) + + if src.is_a?(Domain) or dst.is_a?(Domain) then + msg = 'only users can be moved' + raise NotImplementedError.new(msg) end begin - src_description = plugin.describe_user(src) + src_description = plugin.describe(src) plugin.mv_user(src, dst) - msg = "Moved user #{src} (#{src_description}) " - msg += "to #{dst}." + dst_description = plugin.describe(dst) + + msg = "Moved user #{src} " + + # Only append the extra description if it's useful. + if not src_description.nil? and + not src_description.empty? and + not src_description == src.to_s() then + msg += "(#{src_description}) " + end + + msg += "to #{dst}" + + # Only append the extra description if it's useful. + if not dst_description.nil? and + not dst_description.empty? and + not dst_description == dst.to_s() then + msg += " (#{dst_description})" + end + + msg += "." report(plugin, msg) - rescue InvalidUserError => e - report(plugin, e.message) + rescue NonexistentUserError => e - report(plugin, e.message) + # This means that the SOURCE user didn't exist, since a + # nonexistent destination user is perfectly expected. + report(plugin, "Source user #{src.to_s()} not found.") rescue NonexistentDomainError => e - report(plugin, e.message) - rescue StandardError => e - msg = "There was an error (#{e.to_s}) moving the user: #{e.message}" - report(plugin, msg) - Kernel.exit(ExitCodes::DATABASE_ERROR) + # This could mean that the source domain doesn't exist, but in + # that case, we just report that the source user doesn't + # exist. So a nonexistent domain refers to a nonexistent + # DESTINATION domain. + report(plugin, "Destination domain #{dst.domainpart()} not found.") + rescue UserAlreadyExistsError => e + report(plugin, "Destination user #{dst.to_s()} already exists.") end end