# frozen_string_literal: true
require 'apartment/migrator' require 'apartment/tasks/task_helper' require 'parallel'
apartment_namespace = namespace :apartment do
desc 'Create all tenants' task :create do Apartment::TaskHelper.warn_if_tenants_empty Apartment::TaskHelper.tenants.each do |tenant| Apartment::TaskHelper.create_tenant(tenant) end end desc 'Drop all tenants' task :drop do Apartment::TaskHelper.tenants.each do |tenant| puts("Dropping #{tenant} tenant") Apartment::Tenant.drop(tenant) rescue Apartment::TenantNotFound, ActiveRecord::NoDatabaseError => e puts e.message end end desc 'Migrate all tenants' task :migrate do Apartment::TaskHelper.warn_if_tenants_empty Apartment::TaskHelper.each_tenant do |tenant| Apartment::TaskHelper.migrate_tenant(tenant) end end desc 'Seed all tenants' task :seed do Apartment::TaskHelper.warn_if_tenants_empty Apartment::TaskHelper.each_tenant do |tenant| Apartment::TaskHelper.create_tenant(tenant) puts("Seeding #{tenant} tenant") Apartment::Tenant.switch(tenant) do Apartment::Tenant.seed end rescue Apartment::TenantNotFound => e puts e.message end end desc 'Rolls the migration back to the previous version (specify steps w/ STEP=n) across all tenants.' task :rollback do Apartment::TaskHelper.warn_if_tenants_empty step = ENV['STEP'] ? ENV['STEP'].to_i : 1 Apartment::TaskHelper.each_tenant do |tenant| puts("Rolling back #{tenant} tenant") Apartment::Migrator.rollback tenant, step rescue Apartment::TenantNotFound => e puts e.message end end namespace :migrate do desc 'Runs the "up" for a given migration VERSION across all tenants.' task :up do Apartment::TaskHelper.warn_if_tenants_empty version = ENV['VERSION'] ? ENV['VERSION'].to_i : nil raise 'VERSION is required' unless version Apartment::TaskHelper.each_tenant do |tenant| puts("Migrating #{tenant} tenant up") Apartment::Migrator.run :up, tenant, version rescue Apartment::TenantNotFound => e puts e.message end end desc 'Runs the "down" for a given migration VERSION across all tenants.' task :down do Apartment::TaskHelper.warn_if_tenants_empty version = ENV['VERSION'] ? ENV['VERSION'].to_i : nil raise 'VERSION is required' unless version Apartment::TaskHelper.each_tenant do |tenant| puts("Migrating #{tenant} tenant down") Apartment::Migrator.run :down, tenant, version rescue Apartment::TenantNotFound => e puts e.message end end desc 'Rolls back the tenant one migration and re migrate up (options: STEP=x, VERSION=x).' task :redo do if ENV['VERSION'] apartment_namespace['migrate:down'].invoke apartment_namespace['migrate:up'].invoke else apartment_namespace['rollback'].invoke apartment_namespace['migrate'].invoke end end end
end