41 lines
1.1 KiB
PHP
41 lines
1.1 KiB
PHP
<?php
|
|
|
|
namespace App\Support\Release;
|
|
|
|
final class FeatureFlagRegistry
|
|
{
|
|
/** @return FeatureFlagDefinition[] */
|
|
public function all(): array
|
|
{
|
|
$flags = config('modular_release.flags', []);
|
|
|
|
return array_map(
|
|
fn (string $key, array $flag): FeatureFlagDefinition => new FeatureFlagDefinition(
|
|
key: $key,
|
|
owner: (string) ($flag['owner'] ?? 'unowned'),
|
|
default: (bool) ($flag['default'] ?? false),
|
|
removalTarget: $flag['removal_target'] ?? null,
|
|
dimensions: $flag['dimensions'] ?? ['global', 'environment', 'school_id', 'domain_profile']
|
|
),
|
|
array_keys($flags),
|
|
array_values($flags)
|
|
);
|
|
}
|
|
|
|
public function find(string $key): ?FeatureFlagDefinition
|
|
{
|
|
foreach ($this->all() as $flag) {
|
|
if ($flag->key === $key) {
|
|
return $flag;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public function export(): array
|
|
{
|
|
return array_map(fn (FeatureFlagDefinition $flag): array => $flag->toArray(), $this->all());
|
|
}
|
|
}
|