Skip to content

Commit 613b884

Browse files
authored
feat(http): add Delete attribute (#733)
1 parent 2124577 commit 613b884

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

src/Tempest/Http/src/Delete.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tempest\Http;
6+
7+
use Attribute;
8+
9+
#[Attribute(Attribute::IS_REPEATABLE | Attribute::TARGET_METHOD)]
10+
final class Delete extends Route
11+
{
12+
public function __construct(
13+
string $uri,
14+
15+
/**
16+
* @template MiddlewareClass of \Tempest\Http\HttpMiddleware
17+
* @var class-string<MiddlewareClass>[] $middleware
18+
*/
19+
array $middleware = [],
20+
) {
21+
parent::__construct(
22+
uri: $uri,
23+
method: Method::DELETE,
24+
middleware: $middleware,
25+
);
26+
}
27+
}

src/Tempest/Http/tests/Routing/Construction/RouteConfiguratorTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Tempest\Http\Tests\Routing\Construction;
66

77
use PHPUnit\Framework\TestCase;
8+
use Tempest\Http\Delete;
89
use Tempest\Http\Method;
910
use Tempest\Http\Route;
1011
use Tempest\Http\RouteConfig;
@@ -35,11 +36,13 @@ public function test_adding_static_routes(): void
3536
new Route('/1', Method::GET),
3637
new Route('/2', Method::POST),
3738
new Route('/3', Method::GET),
39+
new Delete('/4'),
3840
];
3941

4042
$this->subject->addRoute($routes[0]);
4143
$this->subject->addRoute($routes[1]);
4244
$this->subject->addRoute($routes[2]);
45+
$this->subject->addRoute($routes[3]);
4346

4447
$config = $this->subject->toRouteConfig();
4548

@@ -54,6 +57,10 @@ public function test_adding_static_routes(): void
5457
'/2' => $routes[1],
5558
'/2/' => $routes[1],
5659
],
60+
'DELETE' => [
61+
'/4' => $routes[3],
62+
'/4/' => $routes[3],
63+
],
5764
], $config->staticRoutes);
5865
$this->assertEquals([], $config->dynamicRoutes);
5966
$this->assertEquals([], $config->matchingRegexes);
@@ -66,12 +73,14 @@ public function test_adding_dynamic_routes(): void
6673
new Route('/dynamic/{id}', Method::PATCH),
6774
new Route('/dynamic/{id}/view', Method::GET),
6875
new Route('/dynamic/{id}/{tag}/{name}/{id}', Method::GET),
76+
new Delete('/dynamic/{id}'),
6977
];
7078

7179
$this->subject->addRoute($routes[0]);
7280
$this->subject->addRoute($routes[1]);
7381
$this->subject->addRoute($routes[2]);
7482
$this->subject->addRoute($routes[3]);
83+
$this->subject->addRoute($routes[4]);
7584

7685
$config = $this->subject->toRouteConfig();
7786

@@ -85,11 +94,15 @@ public function test_adding_dynamic_routes(): void
8594
'PATCH' => [
8695
'c' => $routes[1],
8796
],
97+
'DELETE' => [
98+
'f' => $routes[4],
99+
],
88100
], $config->dynamicRoutes);
89101

90102
$this->assertEquals([
91103
'GET' => '#^(?|/dynamic(?|/([^/]++)(?|/view\/?$(*MARK:d)|/([^/]++)(?|/([^/]++)(?|/([^/]++)\/?$(*MARK:e)))|\/?$(*MARK:b))))#',
92104
'PATCH' => '#^(?|/dynamic(?|/([^/]++)\/?$(*MARK:c)))#',
105+
'DELETE' => '#^(?|/dynamic(?|/([^/]++)\/?$(*MARK:f)))#',
93106
], $config->matchingRegexes);
94107
}
95108
}

0 commit comments

Comments
 (0)