Search code examples
rubyrakerake-task

Verify code execution


I use this code to delete user from database:

task :delete_username, [:user_name] => :environment do |environment, args|

    value = args[:user_name].to_s

    puts "Deleting #{value}"

      MerchantUser.where(:login => value).delete

  end

How I can verify that user is successfully deleted? For example that is the proper way to sue try-catch in this code?


Solution

  • Here's one way to do it, using destroyed? :

    task :delete_username, [:user_name] => :environment do |environment, args|
      value = args[:user_name].to_s
      user = MerchantUser.where(:login => value).first
    
      if user
        puts "Deleting user \"#{value}\""
        user.destroy
        if user.destroyed?
          puts "  User \"#{value}\" successfully deleted!"
        else
          raise "Problem while deleting user \"#{value}\""
        end
      else
        puts "No user with login \"#{value}\" found"
      end
    end
    

    You could also call destroy! and let Rails raise an exception if the record cannot be deleted.

    Note that MerchantUser.where(:login => value) is an ActiveRecord::Relation, which doesn't respond to delete or destroy.

    You should use MerchantUser.where(:login => value).first or MerchantUser.find_by_login(value)