3scale/porta

View on GitHub
db/migrate/20100122173112_move_superadmin_over_to_master_account.rb

Summary

Maintainability
A
0 mins
Test Coverage
class MoveSuperadminOverToMasterAccount < ActiveRecord::Migration
  def self.up
    if select_value('SELECT COUNT(id) FROM users WHERE role = "admin"').to_i > 1
      raise "Multiple superadmins found"
    end

    master_id  = select_value('SELECT id FROM accounts WHERE master')
    superadmin = select_one('SELECT id, account_id FROM users WHERE role = "admin"')

    if superadmin
      execute(%(UPDATE users SET account_id = #{master_id} WHERE id = #{superadmin['id']}))

      if superadmin['account_id'].to_i != master_id.to_i
        execute(%(DELETE FROM accounts WHERE id = #{superadmin['account_id']}))
        execute(%(DELETE FROM profiles WHERE account_id = #{superadmin['account_id']}))
        execute(%(DELETE FROM services WHERE account_id = #{superadmin['account_id']}))
      end
    end
  end

  def self.down
    # Not necessary. Superadmin can work as well from the master account.
  end
end