Add RouteFactory

This commit is contained in:
PJ Dietz 2015-02-20 07:45:39 -05:00
parent 04561076d5
commit 3d68a0af86
2 changed files with 94 additions and 0 deletions

View File

@ -0,0 +1,56 @@
<?php
/**
* pjdietz\WellRESTed\RouteCreator
*
* @author PJ Dietz <pj@pjdietz.com>
* @copyright Copyright 2015 by PJ Dietz
* @license MIT
*/
namespace pjdietz\WellRESTed\Routes;
use ReflectionClass;
/**
* Class for creating routes
*/
class RouteFactory
{
public function createRoute()
{
$args = func_get_args();
$path = $args[0];
if ($path[0] === "/") {
// Possible static, prefix, or template
// PrefixRoutes end with *
if (substr($path, -1) === "*") {
// Remove the trailing *, since the PrefixRoute constructor doesn't expect it.
$path = substr($path, 0, -1);
$constructorArgs = $args;
$constructorArgs[0] = $path;
$reflector = new ReflectionClass("\\pjdietz\\WellRESTed\\Routes\\PrefixRoute");
return $reflector->newInstanceArgs($constructorArgs);
}
// TempalateRoutes contain {variable}
if (preg_match(TemplateRoute::URI_TEMPLATE_EXPRESSION_RE, $path)) {
$reflector = new ReflectionClass("\\pjdietz\\WellRESTed\\Routes\\TemplateRoute");
return $reflector->newInstanceArgs($args);
}
// StaticRoute
$reflector = new ReflectionClass("\\pjdietz\\WellRESTed\\Routes\\StaticRoute");
return $reflector->newInstanceArgs($args);
}
// Regex
$reflector = new ReflectionClass("\\pjdietz\\WellRESTed\\Routes\\RegexRoute");
return $reflector->newInstanceArgs($args);
}
}

View File

@ -0,0 +1,38 @@
<?php
namespace pjdietz\WellRESTed\Test;
use pjdietz\WellRESTed\Routes\RouteFactory;
use Prophecy\Argument;
/**
* @covers pjdietz\WellRESTed\Routes\RouteFactory
*/
class RouteFactoryTest extends \PHPUnit_Framework_TestCase
{
/**
* @dataProvider routeProvider
*/
public function testCreatesRouteOfCorrectType($path, $expectedType)
{
$factory = new RouteFactory();
$route = $factory->createRoute($path, "\\MyHandler");
$this->assertInstanceOf($expectedType, $route);
}
public function routeProvider()
{
$static = "\\pjdietz\\WellRESTed\\Routes\\StaticRoute";
$prefix = "\\pjdietz\\WellRESTed\\Routes\\PrefixRoute";
$template = "\\pjdietz\\WellRESTed\\Routes\\TemplateRoute";
$regex = "\\pjdietz\\WellRESTed\\Routes\\RegexRoute";
return [
["/cats/", $static],
["/cats/*", $prefix],
["/cats/{catId}", $template],
["~/cat/[0-9]+~", $regex]
];
}
}