module ActsAsTenant

Experimental RBS support (using type sampling data from the type_fusion project).

# sig/acts_as_tenant.rbs

module ActsAsTenant
  def self.configuration: () -> untyped
  def self.current_tenant: () -> untyped
  def self.current_tenant=: (Account tenant) -> untyped
end

def self.add_global_record_model model

def self.add_global_record_model model
  @@models_with_global_records.push(model)
end

def self.configuration

Experimental RBS support (using type sampling data from the type_fusion project).

def self.configuration: () -> untyped

This signature was generated using 1 sample from 1 application.

def self.configuration
  @@configuration || configure
end

def self.configure

def self.configure
  @@configuration = Configuration.new
  yield configuration if block_given?
  configuration
end

def self.current_tenant

Experimental RBS support (using type sampling data from the type_fusion project).

def self.current_tenant: () -> untyped

This signature was generated using 2 samples from 1 application.

def self.current_tenant
  RequestStore.store[:current_tenant] || test_tenant || default_tenant
end

def self.current_tenant=(tenant)

Experimental RBS support (using type sampling data from the type_fusion project).

def self.current_tenant=: (Account tenant) -> untyped

This signature was generated using 2 samples from 1 application.

def self.current_tenant=(tenant)
  RequestStore.store[:current_tenant] = tenant
end

def self.default_tenant

def self.default_tenant
  @default_tenant unless unscoped
end

def self.fkey

def self.fkey
  "#{@@tenant_klass}_id"
end

def self.models_with_global_records

def self.models_with_global_records
  @@models_with_global_records
end

def self.mutable_tenant!(toggle)

def self.mutable_tenant!(toggle)
  @@mutable_tenant = toggle
end

def self.mutable_tenant?

def self.mutable_tenant?
  @@mutable_tenant
end

def self.pkey

def self.pkey
  ActsAsTenant.configuration.pkey
end

def self.polymorphic_type

def self.polymorphic_type
  "#{@@tenant_klass}_type"
end

def self.set_tenant_klass(klass)

def self.set_tenant_klass(klass)
  @@tenant_klass = klass
end

def self.should_require_tenant?

def self.should_require_tenant?
  if configuration.require_tenant.respond_to?(:call)
    !!configuration.require_tenant.call
  else
    !!configuration.require_tenant
  end
end

def self.tenant_klass

def self.tenant_klass
  @@tenant_klass
end

def self.test_tenant

def self.test_tenant
  Thread.current[:test_tenant]
end

def self.test_tenant=(tenant)

def self.test_tenant=(tenant)
  Thread.current[:test_tenant] = tenant
end

def self.unscoped

def self.unscoped
  RequestStore.store[:acts_as_tenant_unscoped]
end

def self.unscoped=(unscoped)

def self.unscoped=(unscoped)
  RequestStore.store[:acts_as_tenant_unscoped] = unscoped
end

def self.unscoped?

def self.unscoped?
  !!unscoped
end

def self.with_mutable_tenant(&block)

def self.with_mutable_tenant(&block)
  ActsAsTenant.mutable_tenant!(true)
  without_tenant(&block)
ensure
  ActsAsTenant.mutable_tenant!(false)
end

def self.with_tenant(tenant, &block)

def self.with_tenant(tenant, &block)
  if block.nil?
    raise ArgumentError, "block required"
  end
  old_tenant = current_tenant
  self.current_tenant = tenant
  value = block.call
  value
ensure
  self.current_tenant = old_tenant
end

def self.without_tenant(&block)

def self.without_tenant(&block)
  if block.nil?
    raise ArgumentError, "block required"
  end
  old_tenant = current_tenant
  old_test_tenant = test_tenant
  old_unscoped = unscoped
  self.current_tenant = nil
  self.test_tenant = nil
  self.unscoped = true
  value = block.call
  value
ensure
  self.current_tenant = old_tenant
  self.test_tenant = old_test_tenant
  self.unscoped = old_unscoped
end