diff --git a/composer.json b/composer.json index e98ca96..ea9488c 100644 --- a/composer.json +++ b/composer.json @@ -83,6 +83,7 @@ "zircote/swagger-php": "^6.0.0" }, "require-dev": { + "boundwize/structarmed": "^0.17.12", "dotkernel/dot-maker": "^2.0.0", "laminas/laminas-coding-standard": "^3.0.1", "laminas/laminas-development-mode": "^3.13.0", diff --git a/src/App/src/Factory/ProblemDetailsDelegatorFactory.php b/src/App/src/Factory/ProblemDetailsDelegatorFactory.php index fb0a6c9..e8487d4 100644 --- a/src/App/src/Factory/ProblemDetailsDelegatorFactory.php +++ b/src/App/src/Factory/ProblemDetailsDelegatorFactory.php @@ -41,7 +41,7 @@ public function __invoke( $errorHandler = $container->get(ErrorHandlerInterface::class); assert($errorHandler instanceof LogErrorHandler); - $listener = function (Throwable $throwable, RequestInterface $request) use ($errorHandler) { + $listener = static function (Throwable $throwable, RequestInterface $request) use ($errorHandler) { assert($request instanceof ServerRequestInterface); $errorHandler->handleThrowable($throwable, $request); }; diff --git a/src/App/src/Factory/UserIdentityFactory.php b/src/App/src/Factory/UserIdentityFactory.php index f2c3a23..436c5b4 100644 --- a/src/App/src/Factory/UserIdentityFactory.php +++ b/src/App/src/Factory/UserIdentityFactory.php @@ -12,7 +12,7 @@ class UserIdentityFactory { public function __invoke(ContainerInterface $container): callable { - return function (string $identity, array $roles = [], array $details = []): UserInterface { + return static function (string $identity, array $roles = [], array $details = []): UserInterface { /** @var non-empty-string $identity */ return new UserIdentity($identity, $roles, $details); }; diff --git a/src/App/src/Middleware/AuthorizationMiddleware.php b/src/App/src/Middleware/AuthorizationMiddleware.php index fe35f5a..b8a8065 100644 --- a/src/App/src/Middleware/AuthorizationMiddleware.php +++ b/src/App/src/Middleware/AuthorizationMiddleware.php @@ -75,7 +75,7 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface } $defaultUser->setRoles( - array_map(fn (RoleInterface $role): string => (string) $role->getName()->value, $user->getRoles()) + array_map(static fn (RoleInterface $role): string => (string) $role->getName()->value, $user->getRoles()) ); $request = $request->withAttribute(UserInterface::class, $defaultUser); diff --git a/src/App/src/Middleware/ContentNegotiationMiddleware.php b/src/App/src/Middleware/ContentNegotiationMiddleware.php index 39590bc..f511d32 100644 --- a/src/App/src/Middleware/ContentNegotiationMiddleware.php +++ b/src/App/src/Middleware/ContentNegotiationMiddleware.php @@ -128,7 +128,7 @@ private function parseAcceptHeader(string $header): array } // Sort by quality in descending order - usort($types, fn ($a, $b) => $b['quality'] <=> $a['quality']); + usort($types, static fn ($a, $b) => $b['quality'] <=> $a['quality']); return $types; } diff --git a/src/App/src/Middleware/DeprecationMiddleware.php b/src/App/src/Middleware/DeprecationMiddleware.php index 1ae0018..1f47851 100644 --- a/src/App/src/Middleware/DeprecationMiddleware.php +++ b/src/App/src/Middleware/DeprecationMiddleware.php @@ -86,7 +86,8 @@ private function getAttribute(array $attributes): ?array return array_values( array_filter( $attributes, - fn (array $attribute): bool => $attribute['deprecationType'] === self::RESOURCE_DEPRECATION_ATTRIBUTE + static fn (array $attribute): bool + => $attribute['deprecationType'] === self::RESOURCE_DEPRECATION_ATTRIBUTE ) )[0] ?? null; } diff --git a/src/Core/src/Admin/src/Entity/Admin.php b/src/Core/src/Admin/src/Entity/Admin.php index fde0af4..9692c92 100644 --- a/src/Core/src/Admin/src/Entity/Admin.php +++ b/src/Core/src/Admin/src/Entity/Admin.php @@ -241,7 +241,10 @@ public function getArrayCopy(): array 'firstName' => $this->firstName, 'lastName' => $this->lastName, 'status' => $this->status->value, - 'roles' => array_map(fn (RoleInterface $role): array => $role->getArrayCopy(), $this->roles->toArray()), + 'roles' => array_map( + static fn (RoleInterface $role): array => $role->getArrayCopy(), + $this->roles->toArray() + ), 'created' => $this->created, 'updated' => $this->updated, ]; diff --git a/src/Core/src/Admin/src/Enum/AdminStatusEnum.php b/src/Core/src/Admin/src/Enum/AdminStatusEnum.php index 9fd605a..eb44b15 100644 --- a/src/Core/src/Admin/src/Enum/AdminStatusEnum.php +++ b/src/Core/src/Admin/src/Enum/AdminStatusEnum.php @@ -25,7 +25,7 @@ public static function values(): array */ public static function toArray(): array { - return array_reduce(self::cases(), function (array $collector, self $enum): array { + return array_reduce(self::cases(), static function (array $collector, self $enum): array { $collector[$enum->value] = $enum->name; return $collector; diff --git a/src/Core/src/App/src/DBAL/Types/AbstractEnumType.php b/src/Core/src/App/src/DBAL/Types/AbstractEnumType.php index 4383697..795f4b8 100644 --- a/src/Core/src/App/src/DBAL/Types/AbstractEnumType.php +++ b/src/Core/src/App/src/DBAL/Types/AbstractEnumType.php @@ -26,7 +26,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform): st return 'TEXT'; } - $values = array_map(fn($case) => "'$case->value'", $this->getEnumCases()); + $values = array_map(static fn($case) => "'$case->value'", $this->getEnumCases()); return sprintf('ENUM(%s)', implode(', ', $values)); } diff --git a/src/Core/src/User/src/Entity/User.php b/src/Core/src/User/src/Entity/User.php index d6d9886..ece0b09 100644 --- a/src/Core/src/User/src/Entity/User.php +++ b/src/Core/src/User/src/Entity/User.php @@ -361,7 +361,10 @@ public function getArrayCopy(): array 'hash' => $this->hash, 'identity' => $this->identity, 'status' => $this->status->value, - 'roles' => array_map(fn (RoleInterface $role): array => $role->getArrayCopy(), $this->roles->toArray()), + 'roles' => array_map( + static fn (RoleInterface $role): array => $role->getArrayCopy(), + $this->roles->toArray() + ), 'created' => $this->created, 'updated' => $this->updated, ]; diff --git a/src/Core/src/User/src/Enum/UserRoleEnum.php b/src/Core/src/User/src/Enum/UserRoleEnum.php index b2d89bd..80e91d9 100644 --- a/src/Core/src/User/src/Enum/UserRoleEnum.php +++ b/src/Core/src/User/src/Enum/UserRoleEnum.php @@ -17,7 +17,7 @@ enum UserRoleEnum: string */ public static function validCases(): array { - return array_filter(self::cases(), fn (self $value) => $value !== self::Guest); + return array_filter(self::cases(), static fn (self $value) => $value !== self::Guest); } /** diff --git a/src/Core/src/User/src/Enum/UserStatusEnum.php b/src/Core/src/User/src/Enum/UserStatusEnum.php index ecaa696..8ab061a 100644 --- a/src/Core/src/User/src/Enum/UserStatusEnum.php +++ b/src/Core/src/User/src/Enum/UserStatusEnum.php @@ -35,7 +35,7 @@ public static function validValues(): array */ public static function validCases(): array { - return array_filter(self::cases(), fn (self $enum) => $enum !== self::Deleted); + return array_filter(self::cases(), static fn (self $enum) => $enum !== self::Deleted); } /** @@ -43,7 +43,7 @@ public static function validCases(): array */ public static function toArray(): array { - return array_reduce(self::validCases(), function (array $collector, self $enum): array { + return array_reduce(self::validCases(), static function (array $collector, self $enum): array { $collector[$enum->value] = $enum->name; return $collector; diff --git a/structarmed.php b/structarmed.php new file mode 100644 index 0000000..dbbfc4e --- /dev/null +++ b/structarmed.php @@ -0,0 +1,31 @@ +withPresets(Preset::PSR4(), Preset::CODEQUALITY()) + ->layerPattern('CoreApp', '/^Core\\\\App\\\\.*$/', '/^Core\\\\App\\\\Fixture\\\\.*$/') + ->layer('CoreFixture', 'src/Core/src/App/src/Fixture') + ->layer('CoreSetting', 'src/Core/src/Setting/src') + ->layer('CoreAdmin', 'src/Core/src/Admin/src') + ->layer('CoreSecurity', 'src/Core/src/Security/src') + ->layer('CoreUser', 'src/Core/src/User/src') + ->layer('App', 'src/App/src') + ->layer('Security', 'src/Security/src') + ->layer('Admin', 'src/Admin/src') + ->layer('User', 'src/User/src') + ->ruleset([ + 'CoreApp' => ['CoreUser'], + 'CoreSetting' => ['+CoreApp', 'CoreAdmin'], + 'CoreAdmin' => ['+CoreSetting'], + 'CoreSecurity' => ['+CoreAdmin'], + 'CoreUser' => ['+CoreSecurity'], + 'CoreFixture' => ['+CoreUser'], + 'App' => ['+CoreUser'], + 'Security' => ['+App'], + 'Admin' => ['+App'], + 'User' => ['+App'], + ]); diff --git a/test/Unit/App/Template/ParserTest.php b/test/Unit/App/Template/ParserTest.php index 53e2036..d93938b 100644 --- a/test/Unit/App/Template/ParserTest.php +++ b/test/Unit/App/Template/ParserTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace App\Template; +namespace ApiTest\Unit\App\Template; use Api\App\Template\Parser; use Api\App\Template\ParserInterface; diff --git a/test/Unit/App/Template/RendererTest.php b/test/Unit/App/Template/RendererTest.php index e2122f7..87d359f 100644 --- a/test/Unit/App/Template/RendererTest.php +++ b/test/Unit/App/Template/RendererTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace App\Template; +namespace ApiTest\Unit\App\Template; use Api\App\Exception\RuntimeException; use Api\App\Template\Parser;