Skip to content

Commit

Permalink
Merge branch '0.9' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
gabrielsolomon committed Mar 26, 2019
2 parents 7450cab + d4830dc commit e4bb3ea
Show file tree
Hide file tree
Showing 13 changed files with 194 additions and 54 deletions.
2 changes: 2 additions & 0 deletions .idea/router.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 5 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@
],
"autoload": {
"psr-4": {
"Nip\\Router\\": "src"
"Nip\\Router\\": "src",
"Nip\\Router\\Legacy\\": "legacy"
},
"classmap": [
"legacy",
"src"
],
"files": [
Expand All @@ -24,7 +26,8 @@
"psr-4": {
"Nip\\Router\\Tests\\Fixtures\\Application\\": "tests/fixtures/application",
"Nip\\Router\\Tests\\Fixtures\\": "tests/fixtures",
"Nip\\Router\\Tests\\": "tests/src"
"Nip\\Router\\Tests\\": "tests/src",
"Nip\\Router\\Tests\\Legacy\\": "tests/legacy"
}
},
"require": {
Expand Down
20 changes: 20 additions & 0 deletions legacy/Route/AbstractRouteTrait.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php

namespace Nip\Router\Legacy\Route;

/**
* Trait AbstractRouteTrait
* @package Nip\Router\Legacy\Route
*/
trait AbstractRouteTrait
{
/**
* @param array $params
* @deprecated Use setDefaults
*/
public function setParams($params = [])
{
$this->getParser()->setParams($params);
$this->setDefaults($params);
}
}
25 changes: 25 additions & 0 deletions legacy/Router/Traits/HasMatcherTrait.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

namespace Nip\Router\Legacy\Router\Traits;

use Nip\Request;
use Nip\Router\Route\Route;
use Psr\Http\Message\ServerRequestInterface;

/**
* Trait HasMatcherTrait
* @package Nip\Router\Legacy\Router\Traits
*/
trait HasMatcherTrait
{
/**
* @param Request|ServerRequestInterface $request
* @return array
* @deprecated Use matchRequest($request)
*/
public function route($request)
{
$return = $this->matchRequest($request);
return $return;
}
}
7 changes: 5 additions & 2 deletions phpunit.xml.dist
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,11 @@
>

<testsuites>
<testsuite name="ByTIC Framework Test Suite">
<directory suffix="Test.php">./tests</directory>
<testsuite name="Router Test Suite">
<directory suffix="Test.php">./tests/src</directory>
</testsuite>
<testsuite name="Router Legacy Test Suite">
<directory suffix="Test.php">./tests/legacy</directory>
</testsuite>
</testsuites>

Expand Down
16 changes: 6 additions & 10 deletions src/Route/AbstractRoute.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Nip\Router\Route;

use Nip\Router\Legacy\Route\AbstractRouteTrait;
use Nip\Router\Parsers\Dynamic;
use Nip\Router\Route\Traits\HasMatchTrait;
use Nip\Router\Route\Traits\HasParserTrait;
Expand All @@ -16,6 +17,8 @@
*/
abstract class AbstractRoute extends \Symfony\Component\Routing\Route
{
use AbstractRouteTrait;

use NameWorksTrait;
use HasParserTrait;
use HasTypeTrait;
Expand All @@ -37,9 +40,9 @@ abstract class AbstractRoute extends \Symfony\Component\Routing\Route
/**
* AbstractRoute constructor.
* @param bool $map
* @param array $params
* @param array $defaults
*/
public function __construct($map = false, $params = [])
public function __construct($map = false, $defaults = [])
{
if ($map) {
$parser = $this->getParser();
Expand All @@ -49,17 +52,10 @@ public function __construct($map = false, $params = [])
}
}

parent::__construct($map);


if (count($params)) {
$this->getParser()->setParams($params);
$this->setDefaults($params);
}
parent::__construct($map, $defaults);
$this->init();
}


public function init()
{
}
Expand Down
5 changes: 4 additions & 1 deletion src/Router.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use Nip\Router\Generator\UrlGenerator;
use Nip\Router\Router\Traits\HasCurrentRouteTrait;
use Nip\Router\Router\Traits\HasGeneratorTrait;
use Nip\Router\Legacy\Router\Traits\HasMatcherTrait as LegacyHasMatcherTrait;
use Nip\Router\Router\Traits\HasMatcherTrait;
use Nip\Router\Router\Traits\HasRouteCollectionTrait;
use Psr\Log\LoggerInterface;
Expand All @@ -18,10 +19,12 @@
*/
class Router extends \Symfony\Component\Routing\Router
{
use LegacyHasMatcherTrait;

use HasRouteCollectionTrait;
use HasCurrentRouteTrait;
use HasMatcherTrait;
use HasGeneratorTrait;
use HasMatcherTrait;

/**
* @inheritdoc
Expand Down
27 changes: 6 additions & 21 deletions src/Router/Traits/HasMatcherTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Nip\Router\Router\Traits;

use Nip\Request;
use \Symfony\Component\HttpFoundation\Request;
use Nip\Router\Route\Route;
use Psr\Http\Message\ServerRequestInterface;

Expand All @@ -16,27 +16,12 @@ trait HasMatcherTrait
* @param Request|ServerRequestInterface $request
* @return array
*/
public function route($request)
public function matchRequest(Request $request)
{
$current = false;
$uri = $request->path();
$routes = $this->getRoutes();

foreach ($routes as $name => $route) {
$route->setRequest($request);
if ($route->match($uri)) {
$current = $route;
break;
}
}

if ($current instanceof Route) {
$this->setCurrent($current);
$current->populateRequest();

return $current->getParams() + $current->getMatches();
} else {
return [];
$return = parent::matchRequest($request);
if (isset($return['_route'])) {
$this->setCurrent($this->getRoute($return['_route']));
}
return $return;
}
}
5 changes: 3 additions & 2 deletions src/functions/url-generation.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@
* @param $name
* @param array $parameters
* @param bool $absolute
* @return string|null
*/
function route($name, $parameters = [], $absolute = true)
{
if (!function_exists('app')) {
return null;
}
if ($absolute === true) {
return app('router')->assembleFull($name);
return app('router')->assembleFull($name, $parameters);
}
return app('router')->assemble($name);
return app('router')->assemble($name, $parameters);
}
23 changes: 23 additions & 0 deletions tests/legacy/Route/AbstractRouteTraitTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

namespace Nip\Router\Tests\Legacy\Route;

use Nip\Router\Route\Route;
use Nip\Router\Tests\AbstractTest;

/**
* Class AbstractRouteTraitTest
* @package Nip\Router\Tests\Legacy\Route
*/
class AbstractRouteTraitTest extends AbstractTest
{
public function testSetParams()
{
$route = new Route();
self::assertSame([], $route->getDefaults());

$params = ['test' => 9];
$route->setParams($params);
self::assertSame($params, $route->getDefaults());
}
}
72 changes: 72 additions & 0 deletions tests/legacy/Router/Traits/HasMatcherTraitTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<?php

namespace Nip\Router\Tests\Legacy\Router\Traits;

use Nip\Request;
use Nip\Router\Route\Route;
use Nip\Router\RouteFactory;
use Nip\Router\Router;
use Nip\Router\Tests\AbstractTest;
use Nip\Router\Tests\Fixtures\Application\Library\Router\Route\StandardRoute;
use Symfony\Component\Routing\Exception\ResourceNotFoundException;

/**
* Class HasMatcherTraitTest
* @package Nip\Router\Tests\Legacy\Router\Traits
*/
class HasMatcherTraitTest extends AbstractTest
{

public function testNotFound()
{
$router = new Router();
self::expectException(ResourceNotFoundException::class);

$request = Request::create('/404');
$router->route($request);
}

public function testRouteLiteral()
{
$router = new Router();
$collection = $router->getRoutes();

RouteFactory::generateLiteralRoute($collection, "admin.index", Route::class, "/admin", "/index");
RouteFactory::generateLiteralRoute($collection, "api.index", Route::class, "/api", "/index");

$request = Request::create('/api/index');
$params = $router->route($request);
self::assertEquals(['_route' => 'api.index'], $params);

$currentRoute = $router->getCurrent();
self::assertInstanceOf(Route::class, $currentRoute);
self::assertEquals('api.index', $currentRoute->getName());

$request = Request::create('/admin/index');
$router->route($request);
self::assertEquals('admin.index', $router->getCurrent()->getName());
}

public function testRouteDynamic()
{
$router = new Router();
$collection = $router->getRoutes();

RouteFactory::generateStandardRoute($collection, "admin.standard", StandardRoute::class, "/admin",
'/:controller/:action', ['module' => 'admin']);
RouteFactory::generateStandardRoute($collection, "api.standard", StandardRoute::class, "/api",
'/:controller/:action', ['module' => 'api']);

$request = Request::create('/api/pages/delete');
self::assertEquals(
['module' => 'api', 'controller' => 'pages', 'action' => 'delete','_route' => 'api.standard'],
$router->route($request)
);

$request = Request::create('/admin/pages/delete');
self::assertEquals(
['module' => 'admin', 'controller' => 'pages', 'action' => 'delete', '_route' => 'admin.standard'],
$router->route($request)
);
}
}
37 changes: 22 additions & 15 deletions tests/src/Router/Traits/HasMatcherTraitTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,24 @@
use Nip\Router\Router;
use Nip\Router\Tests\AbstractTest;
use Nip\Router\Tests\Fixtures\Application\Library\Router\Route\StandardRoute;
use Symfony\Component\Routing\Exception\ResourceNotFoundException;

/**
* Class HasMatcherTraitTest
* @package Nip\Router\Tests\Router\Traits
*/
class HasMatcherTraitTest extends AbstractTest
{

public function testNotFound()
{
$router = new Router();
self::expectException(ResourceNotFoundException::class);

$request = Request::create('/404');
$router->matchRequest($request);
}

public function testRouteLiteral()
{
$router = new Router();
Expand All @@ -23,21 +34,17 @@ public function testRouteLiteral()
RouteFactory::generateLiteralRoute($collection, "admin.index", Route::class, "/admin", "/index");
RouteFactory::generateLiteralRoute($collection, "api.index", Route::class, "/api", "/index");

$request = Request::create('/api/404');
$router->route($request);
self::assertNull($router->getCurrent());

$request = Request::create('/api/index');
$params = $router->route($request);
self::assertSame([], $params);
$params = $router->matchRequest($request);
self::assertEquals(['_route' => 'api.index'], $params);

$currentRoute = $router->getCurrent();
self::assertInstanceOf(Route::class, $currentRoute);
self::assertSame('api.index', $currentRoute->getName());
self::assertEquals('api.index', $currentRoute->getName());

$request = Request::create('/admin/index');
$router->route($request);
self::assertSame('admin.index', $router->getCurrent()->getName());
$router->matchRequest($request);
self::assertEquals('admin.index', $router->getCurrent()->getName());
}

public function testRouteDynamic()
Expand All @@ -51,15 +58,15 @@ public function testRouteDynamic()
'/:controller/:action', ['module' => 'api']);

$request = Request::create('/api/pages/delete');
self::assertSame(
['module' => 'api', 'controller' => 'pages', 'action' => 'delete'],
$router->route($request)
self::assertEquals(
['module' => 'api', 'controller' => 'pages', 'action' => 'delete', '_route' => 'api.standard'],
$router->matchRequest($request)
);

$request = Request::create('/admin/pages/delete');
self::assertSame(
['module' => 'admin', 'controller' => 'pages', 'action' => 'delete'],
$router->route($request)
self::assertEquals(
['module' => 'admin', 'controller' => 'pages', 'action' => 'delete', '_route' => 'admin.standard'],
$router->matchRequest($request)
);
}
}

0 comments on commit e4bb3ea

Please sign in to comment.