apply php styler

Signed-off-by: lubiana <lubiana123@gmail.com>
This commit is contained in:
lubiana 2023-09-26 18:17:46 +02:00 committed by lubiana
parent 1667fd3253
commit 8b353ec62a
No known key found for this signature in database
14 changed files with 69 additions and 67 deletions

View file

@ -13,18 +13,19 @@ use Symfony\Component\HttpFoundation\Request;
use function assert; use function assert;
require_once __DIR__ . '/../vendor/autoload.php'; require_once __DIR__ . '/../vendor/autoload.php';
$cached = false; $cached = false;
$container = (new ContainerBuilder)->addDefinitions([ $container = (new ContainerBuilder)->addDefinitions(
Finder::class => static fn (): Finder => new Finder(__DIR__, [], $cached), [
Dispatcher::class => static fn (DispatcherFactory $f): Dispatcher => $f->getDispatcher($cached), Finder::class => static fn (): Finder => new Finder(__DIR__, [], $cached),
HandlerResolver::class => static fn (Dispatcher $d): HandlerResolver => new HandlerResolver($d, $cached), Dispatcher::class => static fn (DispatcherFactory $f): Dispatcher
])->build(); => $f->getDispatcher($cached),
HandlerResolver::class => static fn (Dispatcher $d): HandlerResolver
=> new HandlerResolver($d, $cached),
],
)->build();
$dispatcher = $container->get(Dispatcher::class); $dispatcher = $container->get(Dispatcher::class);
assert($dispatcher instanceof Dispatcher); assert($dispatcher instanceof Dispatcher);
$request = new RequestEvent(Request::createFromGlobals()); $request = new RequestEvent(Request::createFromGlobals());
$dispatcher->dispatch($request); $dispatcher->dispatch($request);
$request->response?->send(); $request->response?->send();
exit; exit();

View file

@ -10,7 +10,7 @@ use Lubian\AttributeMagic\Listener\LauschEvent;
final readonly class Lol final readonly class Lol
{ {
public function __construct( public function __construct(
private Dispatcher $dispatcher, private Dispatcher $dispatcher
) { ) {
} }

View file

@ -13,7 +13,7 @@ final readonly class AsListener
*/ */
public function __construct( public function __construct(
public string $eventClass, public string $eventClass,
public int $priority = 0, public int $priority = 0
) { ) {
} }
} }

View file

@ -40,7 +40,10 @@ final class Dispatcher
public function getSortedListenerForEvent(GenericEvent $event): array public function getSortedListenerForEvent(GenericEvent $event): array
{ {
$filtered = $this->getListenerForEvent($event); $filtered = $this->getListenerForEvent($event);
usort($filtered, static fn (Listener $a, Listener $b): int => $a->priority <=> $b->priority); usort(
$filtered,
static fn (Listener $a, Listener $b): int => $a->priority <=> $b->priority,
);
return $filtered; return $filtered;
} }
@ -51,10 +54,8 @@ final class Dispatcher
return; return;
} }
$this->invoker->call( $this->invoker
[$listener->listenerClass, $listener->listenerMethod], ->call([$listener->listenerClass, $listener->listenerMethod], [$event]);
[$event],
);
} }
} }
} }

View file

@ -17,7 +17,7 @@ final readonly class DispatcherFactory
public function __construct( public function __construct(
private Finder $finder, private Finder $finder,
private InvokerInterface $invoker private InvokerInterface $invoker,
) { ) {
} }
@ -33,6 +33,7 @@ final readonly class DispatcherFactory
{ {
if ($cached === true && file_exists(self::CACHE_FILE)) { if ($cached === true && file_exists(self::CACHE_FILE)) {
$data = file_get_contents(self::CACHE_FILE); $data = file_get_contents(self::CACHE_FILE);
if ($data === false) { if ($data === false) {
return []; return [];
} }
@ -43,6 +44,7 @@ final readonly class DispatcherFactory
} }
$listeners = $this->finder->getListeners(); $listeners = $this->finder->getListeners();
if ($cached === true) { if ($cached === true) {
file_put_contents(self::CACHE_FILE, serialize($listeners)); file_put_contents(self::CACHE_FILE, serialize($listeners));
} }

View file

@ -44,7 +44,8 @@ final class Finder
{ {
$this->populateClassnames(); $this->populateClassnames();
return array_map( return array_map(
static fn (array $h): Listener => new Listener($h[0]->eventClass, $h[0]->priority, $h[1], $h[2]), static fn (array $h): Listener
=> new Listener($h[0]->eventClass, $h[0]->priority, $h[1], $h[2]),
iterator_to_array($this->getAttributes(AsListener::class)), iterator_to_array($this->getAttributes(AsListener::class)),
); );
} }
@ -56,7 +57,8 @@ final class Finder
{ {
$this->populateClassnames(); $this->populateClassnames();
return array_map( return array_map(
static fn (array $h): Handler => new Handler($h[0]->method, $h[0]->path, $h[1], $h[2]), static fn (array $h): Handler
=> new Handler($h[0]->method, $h[0]->path, $h[1], $h[2]),
iterator_to_array($this->getAttributes(AsHandler::class)), iterator_to_array($this->getAttributes(AsHandler::class)),
); );
} }
@ -69,6 +71,7 @@ final class Finder
if ($this->cached === true && file_exists(self::CACHE_FILE)) { if ($this->cached === true && file_exists(self::CACHE_FILE)) {
$data = file_get_contents(self::CACHE_FILE); $data = file_get_contents(self::CACHE_FILE);
if ($data === false) { if ($data === false) {
return; return;
} }
@ -79,7 +82,10 @@ final class Finder
return; return;
} }
$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($this->path)); $it = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($this->path),
);
/** @var SplFileInfo $file */ /** @var SplFileInfo $file */
foreach ($it as $file) { foreach ($it as $file) {
if (! str_ends_with((string) $file, '.php')) { if (! str_ends_with((string) $file, '.php')) {
@ -89,7 +95,10 @@ final class Finder
$classesBeforeLoad = get_declared_classes(); $classesBeforeLoad = get_declared_classes();
require_once (string) $file; require_once (string) $file;
$classesAfterLoad = get_declared_classes(); $classesAfterLoad = get_declared_classes();
$this->classNames = [...$this->classNames, ...array_diff($classesAfterLoad, $classesBeforeLoad)]; $this->classNames = [
...$this->classNames,
...array_diff($classesAfterLoad, $classesBeforeLoad),
];
} }
if ($this->cached === true) { if ($this->cached === true) {
@ -102,18 +111,14 @@ final class Finder
* @param class-string<T> $attributeClass * @param class-string<T> $attributeClass
* @return Iterator<array{T, class-string, non-empty-string}> * @return Iterator<array{T, class-string, non-empty-string}>
*/ */
private function getAttributes( private function getAttributes(string $attributeClass): Iterator
string $attributeClass {
): Iterator {
foreach ($this->classNames as $class) { foreach ($this->classNames as $class) {
$reflectionClass = new ReflectionClass($class); $reflectionClass = new ReflectionClass($class);
foreach ($reflectionClass->getMethods() as $method) { foreach ($reflectionClass->getMethods() as $method) {
foreach ($method->getAttributes($attributeClass) as $attribute) { foreach ($method->getAttributes($attributeClass) as $attribute) {
yield [ yield [$attribute->newInstance(), $class, $method->getName()];
$attribute->newInstance(),
$class,
$method->getName(),
];
} }
} }
} }

View file

@ -12,7 +12,7 @@ final readonly class AsHandler
*/ */
public function __construct( public function __construct(
public HttpMethod $method, public HttpMethod $method,
public string $path, public string $path
) { ) {
} }
} }

View file

@ -5,5 +5,6 @@ namespace Lubian\AttributeMagic\Infrastructure\Route;
enum HttpMethod: string enum HttpMethod: string
{ {
case GET = 'GET'; case GET = 'GET';
case POST = 'POST'; case POST = 'POST';
} }

View file

@ -12,7 +12,7 @@ final class RequestEvent extends GenericEvent
public function __construct( public function __construct(
public Request $request, public Request $request,
public Response|null $response = null, public Response|null $response = null,
public Handler|null $handler = null public Handler|null $handler = null,
) { ) {
} }
} }

View file

@ -40,9 +40,6 @@ final class CachedRouteCollector
return; return;
} }
file_put_contents( file_put_contents(self::ROUTES_DIR, serialize($event->routes));
self::ROUTES_DIR,
serialize($event->routes),
);
} }
} }

View file

@ -13,7 +13,7 @@ final class CollectRoutes extends GenericEvent
public array $routes = []; public array $routes = [];
public function __construct( public function __construct(
public readonly bool $cached = false, public readonly bool $cached = false
) { ) {
} }
} }

View file

@ -27,11 +27,13 @@ final readonly class HandlerCaller
} }
ob_start(); ob_start();
/** @var mixed $response */ /** @var mixed $response */
$response = $this->invoker->call( $response = $this->invoker
[$event->handler->handlerClass, $event->handler->handlerMethod], ->call(
$event->request->attributes->all() [$event->handler->handlerClass, $event->handler->handlerMethod],
); $event->request->attributes->all(),
);
$output = (string) ob_get_clean(); $output = (string) ob_get_clean();
if ($response instanceof Response) { if ($response instanceof Response) {

View file

@ -61,17 +61,13 @@ final readonly class HandlerResolver
/** @var array<array-key, mixed> $args */ /** @var array<array-key, mixed> $args */
$args = $routeInfo[2]; $args = $routeInfo[2];
$event->request->attributes->add($args); $event->request->attributes->add($args);
} }
private function getRouteInfo(Request $request): array private function getRouteInfo(Request $request): array
{ {
$dispatcher = $this->createRouteDispatcher(); $dispatcher = $this->createRouteDispatcher();
return $dispatcher->dispatch( return $dispatcher->dispatch($request->getMethod(), $request->getPathInfo());
$request->getMethod(),
$request->getPathInfo(),
);
} }
private function createRouteDispatcher(): \FastRoute\Dispatcher private function createRouteDispatcher(): \FastRoute\Dispatcher
@ -79,19 +75,23 @@ final readonly class HandlerResolver
$routesEvent = new CollectRoutes($this->cached); $routesEvent = new CollectRoutes($this->cached);
$this->dispatcher->dispatch($routesEvent); $this->dispatcher->dispatch($routesEvent);
$dispatcher = $this->dispatcher; $dispatcher = $this->dispatcher;
return cachedDispatcher(
static function (RouteCollector $r) use ($dispatcher, $routesEvent): void {
$dispatcher->dispatch($routesEvent);
return cachedDispatcher(static function (RouteCollector $r) use ( foreach ($routesEvent->routes as $h) {
$dispatcher, $r->addRoute(
$routesEvent $h->method->value,
): void { $h->path,
$dispatcher->dispatch($routesEvent); [$h->handlerClass, $h->handlerMethod],
foreach ($routesEvent->routes as $h) { );
$r->addRoute($h->method->value, $h->path, [$h->handlerClass, $h->handlerMethod]); }
} },
}, [ [
'cacheFile' => __DIR__ . '/../../../../var/route.cache', 'cacheFile' => __DIR__ . '/../../../../var/route.cache',
'cacheDisabled' => ! $this->cached, 'cacheDisabled' => ! $this->cached,
]); ],
);
} }
private function notFound(RequestEvent $event): void private function notFound(RequestEvent $event): void

View file

@ -11,14 +11,7 @@ use function array_values;
* @param callable(mixed, mixed=):scalar $callable * @param callable(mixed, mixed=):scalar $callable
* @return array<int, T> * @return array<int, T>
*/ */
function arrayFilter( function arrayFilter(array $input, callable $callable): array
array $input, {
callable $callable return array_values(array_filter($input, $callable));
): array {
return array_values(
array_filter(
$input,
$callable,
)
);
} }