lib/mongoid/tenant/tasks/tenant.rake
Rake::Task['db:mongoid:create_indexes'].clear
Rake::Task['db:mongoid:remove_indexes'].clear
Rake::Task['db:mongoid:remove_undefined_indexes'].clear
namespace :db do
namespace :mongoid do
def tenancy_env
ENV['TENANCY'] && !ENV['TENANCY'].empty? ? ENV['TENANCY'] : nil
end
def tenancy_models
::Mongoid.models.select { |k| k.include?(::Mongoid::Tenant) }
end
def non_tenancy_models
::Mongoid.models.reject { |k| k.include?(::Mongoid::Tenant) }
end
def puts_warning
puts 'Not running tenants... Provide a tenancy model:'
puts "`TENANCY=Model #{ARGV.join(' ')}`"
end
desc 'Create Mongoid indexes, tenant aware'
task create_indexes: %i[environment load_models] do
# Run once, for tables outside tenancy
::Mongoid::Tasks::Database.create_indexes(non_tenancy_models)
if tenancy_env
Object.const_get(tenancy_env).active_tenants.each do |t|
puts "Tenant #{t}"
t.tenancy!
::Mongoid::Tasks::Database.create_indexes(tenancy_models)
end
else
puts_warning
end
end
desc 'Remove Mongoid indexes, tenant aware'
task remove_indexes: %i[environment load_models] do
# Run once, for tables outside tenancy
::Mongoid::Tasks::Database.remove_indexes(non_tenancy_models)
if tenancy_env
Object.const_get(tenancy_env).active_tenants.each do |t|
puts "Tenant #{t}"
t.tenancy!
::Mongoid::Tasks::Database.remove_indexes(tenancy_models)
end
else
puts_warning
end
end
desc 'Removes undefined Mongoid indexes, tenant aware'
task remove_undefined_indexes: %i[environment load_models] do
# Run once, for tables outside tenancy
::Mongoid::Tasks::Database.remove_undefined_indexes(non_tenancy_models)
if tenancy_env
Object.const_get(tenancy_env).active_tenants.each do |t|
puts "Tenant #{t}"
t.tenancy!
::Mongoid::Tasks::Database.remove_undefined_indexes(tenancy_models)
end
end
end
end
end