PerfectMemory/mongoid-multitenancy

View on GitHub
lib/mongoid/multitenancy.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'mongoid'
require 'mongoid/multitenancy/document'
require 'mongoid/multitenancy/version'
require 'mongoid/multitenancy/validators/tenancy'
require 'mongoid/multitenancy/validators/tenant_uniqueness'

module Mongoid
  module Multitenancy
    class << self
      # Set the current tenant. Make it Thread aware
      def current_tenant=(tenant)
        Thread.current[:current_tenant] = tenant
      end

      # Returns the current tenant
      def current_tenant
        Thread.current[:current_tenant]
      end

      # Affects a tenant temporary for a block execution
      def with_tenant(tenant, &block)
        raise ArgumentError, 'block required' if block.nil?

        begin
          old_tenant = current_tenant
          self.current_tenant = tenant
          yield
        ensure
          self.current_tenant = old_tenant
        end
      end
    end
  end
end