mirror of
https://github.com/archtechx/tenancy.git
synced 2025-12-12 19:04:02 +00:00
[1.7.0] Add Events system (#93)
* Add TenantManagerEvents * Apply fixes from StyleCI * Fix typos, add tests * end() events
This commit is contained in:
parent
d7358c588c
commit
c1df467601
3 changed files with 149 additions and 0 deletions
|
|
@ -9,6 +9,8 @@ use Stancl\Tenancy\Exceptions\PhpRedisNotInstalledException;
|
|||
|
||||
trait BootstrapsTenancy
|
||||
{
|
||||
use TenantManagerEvents;
|
||||
|
||||
public $originalSettings = [];
|
||||
/**
|
||||
* Was tenancy initialized/bootstrapped?
|
||||
|
|
@ -19,6 +21,10 @@ trait BootstrapsTenancy
|
|||
|
||||
public function bootstrap()
|
||||
{
|
||||
array_map(function ($listener) {
|
||||
$listener($this);
|
||||
}, $this->listeners['bootstrapping']);
|
||||
|
||||
$this->initialized = true;
|
||||
|
||||
$this->switchDatabaseConnection();
|
||||
|
|
@ -27,6 +33,10 @@ trait BootstrapsTenancy
|
|||
}
|
||||
$this->tagCache();
|
||||
$this->suffixFilesystemRootPaths();
|
||||
|
||||
array_map(function ($listener) {
|
||||
$listener($this);
|
||||
}, $this->listeners['bootstrapped']);
|
||||
}
|
||||
|
||||
public function end()
|
||||
|
|
|
|||
70
src/Traits/TenantManagerEvents.php
Normal file
70
src/Traits/TenantManagerEvents.php
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
<?php
|
||||
|
||||
namespace Stancl\Tenancy\Traits;
|
||||
|
||||
trait TenantManagerEvents
|
||||
{
|
||||
/**
|
||||
* Event listeners.
|
||||
*
|
||||
* @var callable[][]
|
||||
*/
|
||||
protected $listeners = [
|
||||
'bootstrapping' => [],
|
||||
'bootstrapped' => [],
|
||||
'ending' => [],
|
||||
'ended' => [],
|
||||
];
|
||||
|
||||
/**
|
||||
* Register a listener that will be executed before tenancy is bootstrapped.
|
||||
*
|
||||
* @param callable $callback
|
||||
* @return self
|
||||
*/
|
||||
public function bootstrapping(callable $callback)
|
||||
{
|
||||
$this->listeners['bootstrapping'][] = $callback;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a listener that will be executed after tenancy is bootstrapped.
|
||||
*
|
||||
* @param callable $callback
|
||||
* @return self
|
||||
*/
|
||||
public function bootstrapped(callable $callback)
|
||||
{
|
||||
$this->listeners['bootstrapped'][] = $callback;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a listener that will be executed before tenancy is ended.
|
||||
*
|
||||
* @param callable $callback
|
||||
* @return self
|
||||
*/
|
||||
public function ending(callable $callback)
|
||||
{
|
||||
$this->listeners['ending'][] = $callback;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a listener that will be executed after tenancy is ended.
|
||||
*
|
||||
* @param callable $callback
|
||||
* @return self
|
||||
*/
|
||||
public function ended(callable $callback)
|
||||
{
|
||||
$this->listeners['ended'][] = $callback;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace Stancl\Tenancy\Tests;
|
||||
|
||||
use Tenancy;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Stancl\Tenancy\Exceptions\CannotChangeUuidOrDomainException;
|
||||
|
|
@ -241,4 +242,72 @@ class TenantManagerTest extends TestCase
|
|||
$this->expectException(CannotChangeUuidOrDomainException::class);
|
||||
tenant()->put(['uuid' => 'foo']);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function bootstrapping_event_works()
|
||||
{
|
||||
$uuid = tenant()->create('foo.localhost')['uuid'];
|
||||
|
||||
Tenancy::bootstrapping(function ($tenantManager) use ($uuid) {
|
||||
if ($tenantManager->tenant['uuid'] === $uuid) {
|
||||
config(['tenancy.foo' => 'bar']);
|
||||
}
|
||||
});
|
||||
|
||||
$this->assertSame(null, config('tenancy.foo'));
|
||||
tenancy()->init('foo.localhost');
|
||||
$this->assertSame('bar', config('tenancy.foo'));
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function bootstrapped_event_works()
|
||||
{
|
||||
$uuid = tenant()->create('foo.localhost')['uuid'];
|
||||
|
||||
Tenancy::bootstrapped(function ($tenantManager) use ($uuid) {
|
||||
if ($tenantManager->tenant['uuid'] === $uuid) {
|
||||
config(['tenancy.foo' => 'bar']);
|
||||
}
|
||||
});
|
||||
|
||||
$this->assertSame(null, config('tenancy.foo'));
|
||||
tenancy()->init('foo.localhost');
|
||||
$this->assertSame('bar', config('tenancy.foo'));
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function ending_event_works()
|
||||
{
|
||||
$uuid = tenant()->create('foo.localhost')['uuid'];
|
||||
|
||||
Tenancy::ending(function ($tenantManager) use ($uuid) {
|
||||
if ($tenantManager->tenant['uuid'] === $uuid) {
|
||||
config(['tenancy.foo' => 'bar']);
|
||||
}
|
||||
});
|
||||
|
||||
$this->assertSame(null, config('tenancy.foo'));
|
||||
tenancy()->init('foo.localhost');
|
||||
$this->assertSame(null, config('tenancy.foo'));
|
||||
tenancy()->end();
|
||||
$this->assertSame('bar', config('tenancy.foo'));
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function ended_event_works()
|
||||
{
|
||||
$uuid = tenant()->create('foo.localhost')['uuid'];
|
||||
|
||||
Tenancy::ended(function ($tenantManager) use ($uuid) {
|
||||
if ($tenantManager->tenant['uuid'] === $uuid) {
|
||||
config(['tenancy.foo' => 'bar']);
|
||||
}
|
||||
});
|
||||
|
||||
$this->assertSame(null, config('tenancy.foo'));
|
||||
tenancy()->init('foo.localhost');
|
||||
$this->assertSame(null, config('tenancy.foo'));
|
||||
tenancy()->end();
|
||||
$this->assertSame('bar', config('tenancy.foo'));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue