class Ekylibre::MultiTenancy::TenantSwitcher
Service allowing to switch between tenants and keeping track of what need to be cleaned through the use of a TenantStack
Attributes
apartment[R]
@return [#switch, switch!
]
tenant_repository[R]
@return [TenantRepository]
tenant_stack[R]
@return [TenantStack]
Public Class Methods
new(apartment:, tenant_stack:, tenant_repository:)
click to toggle source
@param [#switch, switch!
] apartment @param [TenantStack] tenant_stack
@param [TenantRepository] tenant_repository
# File lib/ekylibre/multi_tenancy/tenant_switcher.rb, line 18 def initialize(apartment:, tenant_stack:, tenant_repository:) @apartment = apartment @tenant_stack = tenant_stack @tenant_repository = tenant_repository @bang_stack = [] @bang_switched = false end
Public Instance Methods
leave!()
click to toggle source
# File lib/ekylibre/multi_tenancy/tenant_switcher.rb, line 61 def leave! if @bang_switched @bang_switched = false tenant_stack.pop apartment.switch!(tenant_stack.current) else raise StandardError.new('Cannot leave! if not after switch!') end end
switch(name, &block)
click to toggle source
@param [String, to_s] name
# File lib/ekylibre/multi_tenancy/tenant_switcher.rb, line 27 def switch(name, &block) name = name.to_s tenant = tenant_repository.get(name) return if tenant.nil? begin @bang_stack << @bang_switched @bang_switched = false tenant_stack.push(tenant) apartment.switch(name, &block) ensure # Make sure we pop the stack twice if we bang_switched leave! if @bang_switched @bang_switched = @bang_stack.pop tenant_stack.pop end end
switch!(name)
click to toggle source
@param [String, to_s] name
# File lib/ekylibre/multi_tenancy/tenant_switcher.rb, line 48 def switch!(name) name = name.to_s tenant = tenant_repository.get(name) return if tenant.nil? # Some housekeeping to keep the tenant_stack up-to-date tenant_stack.pop if @bang_switched @bang_switched = true tenant_stack.push(tenant) apartment.switch!(name) end