module Mongoid::Tenancy::ClassMethods

Model instance

Public Instance Methods

has_tenant(relative) click to toggle source
# File lib/mongoid/tenancy.rb, line 39
def has_tenant(relative)
  define_method(relative) do
    tenancy! && relative.to_s.classify.constantize
  end
end
tenant_key(key, options = {}) click to toggle source
# File lib/mongoid/tenancy.rb, line 12
def tenant_key(key, options = {})
  field key, type: Symbol

  options[:validates] ||= { presence: true }
  options[:index] ||= {}

  validates key, { uniqueness: true }.merge(options[:validates])
  index({ key => 1 }, { unique: true }.merge(options[:index]))
  scope :active_tenants, -> { where(key.ne => nil) }

  define_method(:tenant_key) do
    send(key).to_s
  end

  define_singleton_method(:clear_tenancy!) do
    Thread.current[:tenancy] = nil
  end

  define_singleton_method(:with_tenants) do |&block|
    all.each do |t|
      t.tenancy!
      block.call(t)
    end
    clear_tenancy!
  end
end