summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/GroupDefinition.php6
-rw-r--r--src/RouteDefinition.php11
-rw-r--r--tests/Unit/GroupDefinitionTest.php12
-rw-r--r--tests/Unit/RouteDefinitionTest.php11
4 files changed, 39 insertions, 1 deletions
diff --git a/src/GroupDefinition.php b/src/GroupDefinition.php
index 41e359d..1ffddc7 100644
--- a/src/GroupDefinition.php
+++ b/src/GroupDefinition.php
@@ -18,7 +18,11 @@ class GroupDefinition
public function make(HttpMethod $method, string $path, callable $handler): RouteDefinition
{
-
+ return $this->group->getRouter()->make(
+ $method,
+ $this->group->getFullPrefix() . '/'. ltrim($path, '/'),
+ $handler
+ )->inGroup($this->group);
}
private function getGroup(): Group
diff --git a/src/RouteDefinition.php b/src/RouteDefinition.php
index fb10380..1ca9201 100644
--- a/src/RouteDefinition.php
+++ b/src/RouteDefinition.php
@@ -9,11 +9,22 @@ class RouteDefinition
public function __construct(
private Router $router,
private Route $route,
+ private ?Group $group = null,
) {
}
+ public function inGroup(Group $group): static
+ {
+ $this->group = $group;
+ return $this;
+ }
+
public function name(string $value): static
{
+ if (($groupName = $this->group?->getFullName()) !== null) {
+ $value = $groupName . $value;
+ }
+
$this->router->addNamedRoute($value, $this->route);
return $this;
diff --git a/tests/Unit/GroupDefinitionTest.php b/tests/Unit/GroupDefinitionTest.php
index 59a8d3d..b8e8063 100644
--- a/tests/Unit/GroupDefinitionTest.php
+++ b/tests/Unit/GroupDefinitionTest.php
@@ -2,8 +2,10 @@
declare(strict_types=1);
+use Lightscale\Router\Enums\HttpMethod;
use Lightscale\Router\Group;
use Lightscale\Router\GroupDefinition;
+use Lightscale\Router\PathSegmentMatch;
use Lightscale\Router\Router;
$make = fn () => new GroupDefinition(new Group(new Router(), null));
@@ -21,3 +23,13 @@ it('creates group with name')
->expect(fn () => $make()->name('name'))
->toBeInstanceOf(Group::class)
->getName()->toBe('name');
+
+it('can make a route', function () {
+ $router = new Router;
+ $group = (new Group($router, null))->prefix('/test');
+ $groupDef = new GroupDefinition($group);
+ $groupDef->make(HttpMethod::Get, '/hello/world', fn () => null);
+
+ expect($router->findSegment('/test/hello/world'))
+ ->toBeInstanceOf(PathSegmentMatch::class);
+});
diff --git a/tests/Unit/RouteDefinitionTest.php b/tests/Unit/RouteDefinitionTest.php
index f605293..e7ab935 100644
--- a/tests/Unit/RouteDefinitionTest.php
+++ b/tests/Unit/RouteDefinitionTest.php
@@ -3,6 +3,7 @@
declare(strict_types=1);
use Lightscale\Router\Enums\HttpMethod;
+use Lightscale\Router\Group;
use Lightscale\Router\Route;
use Lightscale\Router\RouteDefinition;
use Lightscale\Router\Router;
@@ -21,3 +22,13 @@ it('adds route to named routes', function () {
expect($definition->name('testing'))->toBe($definition);
expect($router->getNamedRoute('testing'))->toBe($route);
});
+
+it('adds route to named routes in a group', function () {
+ $router = new Router();
+ $route = new Route(HttpMethod::Get, fn () => null);
+ (new RouteDefinition($router, $route))
+ ->inGroup((new Group($router, null))->name('test.'))
+ ->name('testing');
+
+ expect($router->getNamedRoute('test.testing'))->toBe($route);
+});