Skip to content

Commit

Permalink
Require rector for development
Browse files Browse the repository at this point in the history
  • Loading branch information
ajgarlag committed Apr 12, 2023
1 parent b1a42bd commit df22cb0
Show file tree
Hide file tree
Showing 8 changed files with 76 additions and 59 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
strategy:
fail-fast: false
matrix:
php: ['7.4', '8.0', '8.1']
php: ['7.4', '8.0', '8.1', '8.2']
stability: ['prefer-lowest', 'prefer-stable']
allow_failure: [false]
include:
Expand Down
19 changes: 12 additions & 7 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,14 @@
"psr/http-server-middleware": "^1.0"
},
"require-dev": {
"phpspec/phpspec": "^7.2",
"friendsofphp/php-cs-fixer": "^3.8",
"nyholm/psr7": "^1.5",
"phpstan/phpstan": "^1.6",
"phpstan/extension-installer": "^1.1",
"phpstan/phpstan-deprecation-rules": "^1.0"
"phpspec/phpspec": "^7.3",
"friendsofphp/php-cs-fixer": "^3.16",
"nyholm/psr7": "^1.6",
"phpspec/prophecy": "^1.17",
"phpstan/phpstan": "^1.10.13",
"phpstan/extension-installer": "^1.2",
"phpstan/phpstan-deprecation-rules": "^1.1.3",
"rector/rector": "^0.15.24"
},
"autoload": {
"psr-4": {
Expand All @@ -36,7 +38,10 @@
},
"scripts": {
"lint": "@php -d xdebug.mode=off vendor/bin/php-cs-fixer fix --dry-run --ansi -v",
"fix-cs": "@php -d xdebug.mode=off vendor/bin/php-cs-fixer fix --ansi",
"fix-cs": [
"@php -d xdebug.mode=off vendor/bin/rector --ansi",
"@php -d xdebug.mode=off vendor/bin/php-cs-fixer fix --ansi"
],
"test": [
"@php -d xdebug.mode=off vendor/bin/phpstan analyse --ansi -l 9 src ",
"@php -d xdebug.mode=off vendor/bin/phpspec run --ansi"
Expand Down
26 changes: 26 additions & 0 deletions rector.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

declare(strict_types=1);

use Rector\CodeQuality\Rector\Class_\InlineConstructorDefaultToPropertyRector;
use Rector\Config\RectorConfig;
use Rector\Set\ValueObject\LevelSetList;
use Rector\Set\ValueObject\SetList;

return static function (RectorConfig $rectorConfig): void {
$rectorConfig->paths([
__DIR__ . '/spec',
__DIR__ . '/src',
]);

// define sets of rules
$rectorConfig->sets([
LevelSetList::UP_TO_PHP_74,
SetList::CODE_QUALITY,
SetList::CODING_STYLE,
SetList::DEAD_CODE,
SetList::EARLY_RETURN,
SetList::NAMING,
SetList::TYPE_DECLARATION,
]);
};
26 changes: 11 additions & 15 deletions spec/PipeSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,22 +22,22 @@ class PipeSpec extends ObjectBehavior
{
use Psr7FactoryTrait;

public function let()
public function let(): void
{
$this->beConstructedThrough('create');
}

public function it_is_initializable()
public function it_is_initializable(): void
{
$this->shouldHaveType(Pipe::class);
}

public function it_is_a_middleware()
public function it_is_a_middleware(): void
{
$this->shouldImplement(MiddlewareInterface::class);
}

public function it_delegates_to_passed_request_handler(RequestHandlerInterface $requestHandler)
public function it_delegates_to_passed_request_handler(RequestHandlerInterface $requestHandler): void
{
$response = $this->fakeAResponse();

Expand All @@ -46,26 +46,24 @@ public function it_delegates_to_passed_request_handler(RequestHandlerInterface $
$this->process($this->fakeAServerRequest(), $requestHandler)->shouldReturn($response);
}

public function it_creates_a_new_pipeline_when_a_middleware_is_connected(MiddlewareInterface $middleware)
public function it_creates_a_new_pipeline_when_a_middleware_is_connected(MiddlewareInterface $middleware): void
{
$pipe = $this->withConnectedMiddleware($middleware);

$pipe->shouldBeAnInstanceOf(Pipe::class);
$pipe->shouldNotBe($this);
}

public function it_can_create_a_new_pipeline_with_middlewares_connected(MiddlewareInterface $firstMiddleware, MiddlewareInterface $lastMiddleware, RequestHandlerInterface $requestHandler)
public function it_can_create_a_new_pipeline_with_middlewares_connected(MiddlewareInterface $firstMiddleware, MiddlewareInterface $lastMiddleware, RequestHandlerInterface $requestHandler): void
{
$response = $this->fakeAResponse();

$requestHandler->handle(Argument::type(ServerRequestInterface::class))->willReturn($response)->shouldBeCalledTimes(2);

$firstMiddleware->process(Argument::type(ServerRequestInterface::class), Argument::type(RequestHandlerInterface::class))->will(
function ($args) use ($lastMiddleware) {
static function ($args) use ($lastMiddleware) {
$lastMiddleware->process(Argument::type(ServerRequestInterface::class), Argument::type(RequestHandlerInterface::class))->will(
function ($args) {
return $args[1]->handle($args[0]);
}
static fn ($args) => $args[1]->handle($args[0])
)
->shouldBeCalledTimes(2)
;
Expand All @@ -82,18 +80,16 @@ function ($args) {
$this->process($this->fakeAServerRequest(), $requestHandler)->shouldReturn($response);
}

public function it_processes_requests_through_piped_middlewares_in_order(MiddlewareInterface $firstMiddleware, MiddlewareInterface $lastMiddleware, RequestHandlerInterface $requestHandler)
public function it_processes_requests_through_piped_middlewares_in_order(MiddlewareInterface $firstMiddleware, MiddlewareInterface $lastMiddleware, RequestHandlerInterface $requestHandler): void
{
$response = $this->fakeAResponse();

$requestHandler->handle(Argument::type(ServerRequestInterface::class))->willReturn($response)->shouldBeCalledTimes(2);

$firstMiddleware->process(Argument::type(ServerRequestInterface::class), Argument::type(RequestHandlerInterface::class))->will(
function ($args) use ($lastMiddleware) {
static function ($args) use ($lastMiddleware) {
$lastMiddleware->process(Argument::type(ServerRequestInterface::class), Argument::type(RequestHandlerInterface::class))->will(
function ($args) {
return $args[1]->handle($args[0]);
}
static fn ($args) => $args[1]->handle($args[0])
)
->shouldBeCalledTimes(2)
;
Expand Down
18 changes: 6 additions & 12 deletions spec/Psr7FactoryTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,27 +21,21 @@ trait Psr7FactoryTrait
* @param array $server
* @param string $method
* @param string $uri
*
* @return ServerRequestInterface
*/
protected function fakeAServerRequest($server = [], $method = 'GET', $uri = 'http://example.org')
protected function fakeAServerRequest($server = [], $method = 'GET', $uri = 'http://example.org'): ServerRequestInterface
{
$requestFactory = new Psr17Factory();
$request = $requestFactory->createServerRequest($method, $uri, $server);
$psr17Factory = new Psr17Factory();

return $request;
return $psr17Factory->createServerRequest($method, $uri, $server);
}

/**
* @param int $code
*
* @return ResponseInterface
*/
protected function fakeAResponse($code = 200)
protected function fakeAResponse($code = 200): ResponseInterface
{
$factory = new Psr17Factory();
$response = $factory->createResponse($code);
$psr17Factory = new Psr17Factory();

return $response;
return $psr17Factory->createResponse($code);
}
}
26 changes: 11 additions & 15 deletions spec/StackSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,22 +23,22 @@ class StackSpec extends ObjectBehavior
{
use Psr7FactoryTrait;

public function let(RequestHandlerInterface $requestHandler)
public function let(RequestHandlerInterface $requestHandler): void
{
$this->beConstructedThrough('create', [$requestHandler]);
}

public function it_is_initializable()
public function it_is_initializable(): void
{
$this->shouldHaveType(Stack::class);
}

public function it_is_a_request_handler()
public function it_is_a_request_handler(): void
{
$this->shouldImplement(RequestHandlerInterface::class);
}

public function it_delegates_to_given_request_handler(RequestHandlerInterface $requestHandler)
public function it_delegates_to_given_request_handler(RequestHandlerInterface $requestHandler): void
{
$response = $this->fakeAResponse();

Expand All @@ -47,26 +47,24 @@ public function it_delegates_to_given_request_handler(RequestHandlerInterface $r
$this->handle($this->fakeAServerRequest())->shouldReturn($response);
}

public function it_creates_a_new_stack_when_a_middleware_is_pushed(MiddlewareInterface $middleware)
public function it_creates_a_new_stack_when_a_middleware_is_pushed(MiddlewareInterface $middleware): void
{
$stack = $this->withPushedMiddleware($middleware);

$stack->shouldBeAnInstanceOf(Stack::class);
$stack->shouldNotBe($this);
}

public function it_can_create_a_new_stack_with_middlewares_pushed(MiddlewareInterface $innerMiddleware, MiddlewareInterface $outerMiddleware, RequestHandlerInterface $requestHandler)
public function it_can_create_a_new_stack_with_middlewares_pushed(MiddlewareInterface $innerMiddleware, MiddlewareInterface $outerMiddleware, RequestHandlerInterface $requestHandler): void
{
$response = $this->fakeAResponse();

$requestHandler->handle(Argument::type(RequestInterface::class))->willReturn($response)->shouldBeCalledTimes(2);

$outerMiddleware->process(Argument::type(ServerRequestInterface::class), Argument::type(RequestHandlerInterface::class))->will(
function ($args) use ($innerMiddleware) {
static function ($args) use ($innerMiddleware) {
$innerMiddleware->process(Argument::type(ServerRequestInterface::class), Argument::type(RequestHandlerInterface::class))->will(
function ($args) {
return $args[1]->handle($args[0]);
}
static fn ($args) => $args[1]->handle($args[0])
)
->shouldBeCalledTimes(2)
;
Expand All @@ -83,18 +81,16 @@ function ($args) {
$this->handle($this->fakeAServerRequest())->shouldReturn($response);
}

public function it_processes_requests_through_pushed_middlewares_in_order(MiddlewareInterface $innerMiddleware, MiddlewareInterface $outerMiddleware, RequestHandlerInterface $requestHandler)
public function it_processes_requests_through_pushed_middlewares_in_order(MiddlewareInterface $innerMiddleware, MiddlewareInterface $outerMiddleware, RequestHandlerInterface $requestHandler): void
{
$response = $this->fakeAResponse();

$requestHandler->handle(Argument::type(RequestInterface::class))->willReturn($response)->shouldBeCalledTimes(2);

$outerMiddleware->process(Argument::type(ServerRequestInterface::class), Argument::type(RequestHandlerInterface::class))->will(
function ($args) use ($innerMiddleware) {
static function ($args) use ($innerMiddleware) {
$innerMiddleware->process(Argument::type(ServerRequestInterface::class), Argument::type(RequestHandlerInterface::class))->will(
function ($args) {
return $args[1]->handle($args[0]);
}
static fn ($args) => $args[1]->handle($args[0])
)
->shouldBeCalledTimes(2)
;
Expand Down
10 changes: 5 additions & 5 deletions src/Pipe.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,21 +40,21 @@ public static function create(array $middlewares = []): self
return $pipe;
}

public function process(ServerRequestInterface $request, RequestHandlerInterface $requestHandler): ResponseInterface
public function process(ServerRequestInterface $serverRequest, RequestHandlerInterface $requestHandler): ResponseInterface
{
if (empty($this->middlewares)) {
return $requestHandler->handle($request);
if ([] === $this->middlewares) {
return $requestHandler->handle($serverRequest);
}

$stack = Stack::create($requestHandler, array_reverse($this->middlewares));

return $stack->handle($request);
return $stack->handle($serverRequest);
}

public function withConnectedMiddleware(MiddlewareInterface $middleware): self
{
$pipe = clone $this;
array_push($pipe->middlewares, $middleware);
$pipe->middlewares[] = $middleware;

return $pipe;
}
Expand Down
8 changes: 4 additions & 4 deletions src/Stack.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,13 @@ public static function create(RequestHandlerInterface $requestHandler, array $mi
return $stack;
}

public function handle(ServerRequestInterface $request): ResponseInterface
public function handle(ServerRequestInterface $serverRequest): ResponseInterface
{
if (null === $next = $this->peek()) {
return $this->requestHandler->handle($request);
if (!($middleware = $this->peek()) instanceof \Psr\Http\Server\MiddlewareInterface) {
return $this->requestHandler->handle($serverRequest);
}

return $next->process($request, $this->pop());
return $middleware->process($serverRequest, $this->pop());
}

public function withPushedMiddleware(MiddlewareInterface $middleware): self
Expand Down

0 comments on commit df22cb0

Please sign in to comment.