From 3d68a0af8660cec54e919a293a64740e0db1db84 Mon Sep 17 00:00:00 2001 From: PJ Dietz Date: Fri, 20 Feb 2015 07:45:39 -0500 Subject: [PATCH] Add RouteFactory --- .../WellRESTed/Routes/RouteFactory.php | 56 +++++++++++++++++++ test/Routes/RouteFactoryTest.php | 38 +++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 src/pjdietz/WellRESTed/Routes/RouteFactory.php create mode 100644 test/Routes/RouteFactoryTest.php diff --git a/src/pjdietz/WellRESTed/Routes/RouteFactory.php b/src/pjdietz/WellRESTed/Routes/RouteFactory.php new file mode 100644 index 0000000..84c007b --- /dev/null +++ b/src/pjdietz/WellRESTed/Routes/RouteFactory.php @@ -0,0 +1,56 @@ + + * @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); + + } +} diff --git a/test/Routes/RouteFactoryTest.php b/test/Routes/RouteFactoryTest.php new file mode 100644 index 0000000..67f85a8 --- /dev/null +++ b/test/Routes/RouteFactoryTest.php @@ -0,0 +1,38 @@ +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] + ]; + + } +}