Skip to content

Commit fd437c4

Browse files
committed
Add dynamic tag resolving
1 parent 9b11414 commit fd437c4

File tree

12 files changed

+82
-26
lines changed

12 files changed

+82
-26
lines changed

src/Tempest/Auth/src/CurrentUserInitializer.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,17 @@
66

77
use Tempest\Container\Container;
88
use Tempest\Container\DynamicInitializer;
9+
use Tempest\Container\Tag;
910
use Tempest\Reflection\ClassReflector;
1011

1112
final readonly class CurrentUserInitializer implements DynamicInitializer
1213
{
13-
public function canInitialize(ClassReflector $class): bool
14+
public function canInitialize(ClassReflector $class, ?string $tag): bool
1415
{
1516
return $class->implements(CanAuthenticate::class);
1617
}
1718

18-
public function initialize(ClassReflector $class, Container $container): object
19+
public function initialize(ClassReflector $class, ?string $tag, Container $container): object
1920
{
2021
$user = $container->get(Authenticator::class)->currentUser();
2122

src/Tempest/Container/src/DynamicInitializer.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
interface DynamicInitializer
1010
{
11-
public function canInitialize(ClassReflector $class): bool;
11+
public function canInitialize(ClassReflector $class, ?string $tag): bool;
1212

13-
public function initialize(ClassReflector $class, Container $container): object;
13+
public function initialize(ClassReflector $class, ?string $tag, Container $container): object;
1414
}

src/Tempest/Container/src/GenericContainer.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ private function resolve(string $className, ?string $tag = null, mixed ...$param
269269

270270
$object = match (true) {
271271
$initializer instanceof Initializer => $initializer->initialize($this->clone()),
272-
$initializer instanceof DynamicInitializer => $initializer->initialize($class, $this->clone()),
272+
$initializer instanceof DynamicInitializer => $initializer->initialize($class, $tag, $this->clone()),
273273
};
274274

275275
$singleton = $initializerClass->getAttribute(Singleton::class) ?? $initializerClass->getMethod('initialize')->getAttribute(Singleton::class);
@@ -317,7 +317,7 @@ private function initializerForClass(ClassReflector $target, ?string $tag = null
317317
/** @var DynamicInitializer $initializer */
318318
$initializer = $this->resolve($initializerClass);
319319

320-
if (! $initializer->canInitialize($target)) {
320+
if (! $initializer->canInitialize(class: $target, tag: $tag)) {
321321
continue;
322322
}
323323

src/Tempest/Container/tests/Fixtures/ContainerObjectEInitializer.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,17 @@
66

77
use Tempest\Container\Container;
88
use Tempest\Container\DynamicInitializer;
9+
use Tempest\Container\Tag;
910
use Tempest\Reflection\ClassReflector;
1011

1112
final class ContainerObjectEInitializer implements DynamicInitializer
1213
{
13-
public function canInitialize(ClassReflector $class): bool
14+
public function canInitialize(ClassReflector $class, ?string $tag): bool
1415
{
1516
return $class->getName() === ContainerObjectE::class;
1617
}
1718

18-
public function initialize(ClassReflector $class, Container $container): object
19+
public function initialize(ClassReflector $class, ?string $tag, Container $container): object
1920
{
2021
return new ContainerObjectE();
2122
}

src/Tempest/Database/src/Connection/PDOConnection.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ final class PDOConnection implements Connection
1414
private ?PDO $pdo = null;
1515

1616
public function __construct(
17-
private readonly DatabaseConfig $config,
17+
private(set) readonly DatabaseConfig $config,
1818
) {}
1919

2020
public function beginTransaction(): bool

src/Tempest/Database/src/DatabaseInitializer.php

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,30 @@
55
namespace Tempest\Database;
66

77
use Tempest\Container\Container;
8-
use Tempest\Container\Initializer;
8+
use Tempest\Container\DynamicInitializer;
99
use Tempest\Container\Singleton;
10-
use Tempest\Database\Connection\Connection;
11-
use Tempest\Database\Transactions\TransactionManager;
10+
use Tempest\Database\Config\DatabaseConfig;
11+
use Tempest\Database\Connection\PDOConnection;
12+
use Tempest\Database\Transactions\GenericTransactionManager;
13+
use Tempest\Reflection\ClassReflector;
1214

13-
final readonly class DatabaseInitializer implements Initializer
15+
final readonly class DatabaseInitializer implements DynamicInitializer
1416
{
17+
public function canInitialize(ClassReflector $class, ?string $tag): bool
18+
{
19+
return $class->getType()->matches(Database::class);
20+
}
21+
1522
#[Singleton]
16-
public function initialize(Container $container): Database
23+
public function initialize(ClassReflector $class, ?string $tag, Container $container): Database
1724
{
25+
$config = $container->get(DatabaseConfig::class, $tag);
26+
27+
$connection = new PDOConnection($config);
28+
1829
return new GenericDatabase(
19-
$container->get(Connection::class),
20-
$container->get(TransactionManager::class),
30+
$connection,
31+
new GenericTransactionManager($connection),
2132
);
2233
}
2334
}

src/Tempest/Database/src/GenericDatabase.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
final readonly class GenericDatabase implements Database
1717
{
1818
public function __construct(
19-
private Connection $connection,
20-
private TransactionManager $transactionManager,
19+
private(set) Connection $connection,
20+
private(set) TransactionManager $transactionManager,
2121
) {}
2222

2323
public function execute(Query $query): void

src/Tempest/Router/src/RouteBindingInitializer.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,18 @@
66

77
use Tempest\Container\Container;
88
use Tempest\Container\DynamicInitializer;
9+
use Tempest\Container\Tag;
910
use Tempest\Reflection\ClassReflector;
1011
use Tempest\Router\Exceptions\NotFoundException;
1112

1213
final class RouteBindingInitializer implements DynamicInitializer
1314
{
14-
public function canInitialize(ClassReflector $class): bool
15+
public function canInitialize(ClassReflector $class, ?string $tag): bool
1516
{
1617
return $class->getType()->matches(Bindable::class);
1718
}
1819

19-
public function initialize(ClassReflector $class, Container $container): object
20+
public function initialize(ClassReflector $class, ?string $tag, Container $container): object
2021
{
2122
$matchedRoute = $container->get(MatchedRoute::class);
2223

src/Tempest/Router/src/RouteEnumBindingInitializer.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,18 @@
77
use BackedEnum;
88
use Tempest\Container\Container;
99
use Tempest\Container\DynamicInitializer;
10+
use Tempest\Container\Tag;
1011
use Tempest\Reflection\ClassReflector;
1112
use Tempest\Router\Exceptions\NotFoundException;
1213

1314
final class RouteEnumBindingInitializer implements DynamicInitializer
1415
{
15-
public function canInitialize(ClassReflector $class): bool
16+
public function canInitialize(ClassReflector $class, ?string $tag): bool
1617
{
1718
return $class->getType()->matches(BackedEnum::class);
1819
}
1920

20-
public function initialize(ClassReflector $class, Container $container): object
21+
public function initialize(ClassReflector $class, ?string $tag, Container $container): object
2122
{
2223
$matchedRoute = $container->get(MatchedRoute::class);
2324

src/Tempest/View/src/Renderers/BladeInitializer.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@
88
use Tempest\Container\Container;
99
use Tempest\Container\DynamicInitializer;
1010
use Tempest\Container\Singleton;
11+
use Tempest\Container\Tag;
1112
use Tempest\Reflection\ClassReflector;
1213

1314
use function Tempest\internal_storage_path;
1415

1516
final readonly class BladeInitializer implements DynamicInitializer
1617
{
17-
public function canInitialize(ClassReflector $class): bool
18+
public function canInitialize(ClassReflector $class, ?string $tag): bool
1819
{
1920
if (! class_exists(Blade::class)) {
2021
return false;
@@ -24,7 +25,7 @@ public function canInitialize(ClassReflector $class): bool
2425
}
2526

2627
#[Singleton]
27-
public function initialize(ClassReflector $class, Container $container): object
28+
public function initialize(ClassReflector $class, ?string $tag, Container $container): object
2829
{
2930
$bladeConfig = $container->get(BladeConfig::class);
3031

0 commit comments

Comments
 (0)