Skip to content

Commit c09cdf4

Browse files
authored
feat(discovery): add ability to hide classes from discovery (#512)
1 parent a3710a8 commit c09cdf4

File tree

4 files changed

+81
-0
lines changed

4 files changed

+81
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tempest\Core;
6+
7+
use Attribute;
8+
9+
#[Attribute(Attribute::TARGET_CLASS)]
10+
final class DoNotDiscover
11+
{
12+
}

src/Tempest/Core/src/Kernel/LoadDiscoveryClasses.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use Tempest\Container\Container;
1313
use Tempest\Core\DiscoversPath;
1414
use Tempest\Core\Discovery;
15+
use Tempest\Core\DoNotDiscover;
1516
use Tempest\Core\Kernel;
1617
use Tempest\Reflection\ClassReflector;
1718
use Throwable;
@@ -94,6 +95,10 @@ public function __invoke(): void
9495
}
9596
}
9697

98+
if ($input instanceof ClassReflector && $input->hasAttribute(DoNotDiscover::class)) {
99+
continue;
100+
}
101+
97102
if ($input instanceof ClassReflector) {
98103
$discovery->discover($input);
99104
} elseif ($discovery instanceof DiscoversPath) {
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tests\Tempest\Fixtures\Discovery;
6+
7+
use Tempest\Core\DoNotDiscover;
8+
use Tempest\Database\Migration;
9+
use Tempest\Database\QueryStatement;
10+
11+
#[DoNotDiscover]
12+
final class HiddenMigration implements Migration
13+
{
14+
public function getName(): string
15+
{
16+
return 'hidden-migration';
17+
}
18+
19+
public function up(): ?QueryStatement
20+
{
21+
return null;
22+
}
23+
24+
public function down(): ?QueryStatement
25+
{
26+
return null;
27+
}
28+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tests\Tempest\Integration\Core;
6+
7+
use function PHPUnit\Framework\assertNotContains;
8+
use Tempest\Core\Kernel\LoadDiscoveryClasses;
9+
use Tempest\Database\DatabaseConfig;
10+
use Tempest\Database\MigrationDiscovery;
11+
use function Tempest\get;
12+
use Tests\Tempest\Fixtures\Discovery\HiddenMigration;
13+
use Tests\Tempest\Integration\FrameworkIntegrationTestCase;
14+
15+
/**
16+
* @internal
17+
*/
18+
final class LoadDiscoveryClassesTest extends FrameworkIntegrationTestCase
19+
{
20+
public function test_hidden_from_discovery(): void
21+
{
22+
$this->kernel->discoveryClasses = [
23+
MigrationDiscovery::class,
24+
];
25+
26+
$this->kernel->discoveryLocations = [
27+
realpath(__DIR__.'../../Fixtures/Discovery'),
28+
];
29+
30+
(new LoadDiscoveryClasses($this->kernel, $this->container));
31+
32+
$migrations = get(DatabaseConfig::class)->getMigrations();
33+
34+
assertNotContains(HiddenMigration::class, $migrations);
35+
}
36+
}

0 commit comments

Comments
 (0)