Skip to content

Commit

Permalink
refactored to pass interfaced data
Browse files Browse the repository at this point in the history
  • Loading branch information
mrjgreen committed Dec 31, 2014
1 parent 8cc0cda commit 746ead8
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 46 deletions.
8 changes: 5 additions & 3 deletions src/Phroute/Dispatcher.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,14 @@ class Dispatcher {
/**
* Create a new route dispatcher.
*
* @param RouteDataProviderInterface $data
* @param RouteDataInterface $data
* @param HandlerResolverInterface $resolver
*/
public function __construct(RouteDataProviderInterface $data, HandlerResolverInterface $resolver = null)
public function __construct(RouteDataInterface $data, HandlerResolverInterface $resolver = null)
{
list($this->staticRouteMap, $this->variableRouteData) = $data->getData();
$this->staticRouteMap = $data->getStaticRoutes();

$this->variableRouteData = $data->getVariableRoutes();

$this->filters = $data->getFilters();

Expand Down
51 changes: 23 additions & 28 deletions src/Phroute/RouteCollector.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,22 +12,22 @@ class RouteCollector implements RouteDataProviderInterface {
const APPROX_CHUNK_SIZE = 10;

private $routeParser;
private $filters;
private $filters = [];
private $staticRoutes = [];
private $regexToRoutesMap = [];
private $reverse = [];

private $globalFilters = array();
private $globalFilters = [];

public function __construct(RouteParser $routeParser = null) {
$this->routeParser = $routeParser ?: new RouteParser();
}

public function route($name, array $args = null)
{
$url = array();
$url = [];

$replacements = is_null($args) ? array() : array_values($args);
$replacements = is_null($args) ? [] : array_values($args);

$variable = 0;

Expand Down Expand Up @@ -55,7 +55,7 @@ public function route($name, array $args = null)
return implode('', $url);
}

public function addRoute($httpMethod, $route, $handler, array $filters = array()) {
public function addRoute($httpMethod, $route, $handler, array $filters = []) {

if(is_array($route))
{
Expand Down Expand Up @@ -94,7 +94,7 @@ private function addStaticRoute($httpMethod, $routeData, $handler, $filters)
}
}

$this->staticRoutes[$routeStr][$httpMethod] = array($handler, $filters, array());
$this->staticRoutes[$routeStr][$httpMethod] = array($handler, $filters, []);
}

private function addVariableRoute($httpMethod, $routeData, $handler, $filters)
Expand All @@ -106,13 +106,13 @@ private function addVariableRoute($httpMethod, $routeData, $handler, $filters)
throw new BadRouteException("Cannot register two routes matching '$regex' for method '$httpMethod'");
}

$this->regexToRoutesMap[$regex][$httpMethod] = array($handler, $filters, $variables);
$this->regexToRoutesMap[$regex][$httpMethod] = [$handler, $filters, $variables];
}

public function group(array $filters, \Closure $callback)
{
$oldGlobal = $this->globalFilters;
$this->globalFilters = array_merge_recursive($this->globalFilters, array_intersect_key($filters, array(Route::AFTER => 1, Route::BEFORE => 1)));
$this->globalFilters = array_merge_recursive($this->globalFilters, array_intersect_key($filters, [Route::AFTER => 1, Route::BEFORE => 1]));
$callback($this);
$this->globalFilters = $oldGlobal;
}
Expand All @@ -122,47 +122,42 @@ public function filter($name, $handler)
$this->filters[$name] = $handler;
}

public function get($route, $handler, array $filters = array())
public function get($route, $handler, array $filters = [])
{
return $this->addRoute(Route::GET, $route, $handler, $filters);
}

public function head($route, $handler, array $filters = array())
public function head($route, $handler, array $filters = [])
{
return $this->addRoute(Route::HEAD, $route, $handler, $filters);
}

public function post($route, $handler, array $filters = array())
public function post($route, $handler, array $filters = [])
{
return $this->addRoute(Route::POST, $route, $handler, $filters);
}

public function put($route, $handler, array $filters = array())
public function put($route, $handler, array $filters = [])
{
return $this->addRoute(Route::PUT, $route, $handler, $filters);
}

public function delete($route, $handler, array $filters = array())
public function delete($route, $handler, array $filters = [])
{
return $this->addRoute(Route::DELETE, $route, $handler, $filters);
}

public function options($route, $handler, array $filters = array())
public function options($route, $handler, array $filters = [])
{
return $this->addRoute(Route::OPTIONS, $route, $handler, $filters);
}

public function any($route, $handler, array $filters = array())
public function any($route, $handler, array $filters = [])
{
return $this->addRoute(Route::ANY, $route, $handler, $filters);
}

public function getFilters()
{
return $this->filters;
}

public function controller($route, $classname, array $filters = array())
public function controller($route, $classname, array $filters = [])
{
$reflection = new ReflectionClass($classname);

Expand All @@ -182,10 +177,10 @@ public function controller($route, $classname, array $filters = array())

if($methodName === self::DEFAULT_CONTROLLER_ROUTE)
{
$this->addRoute($valid, $route . $params, array($classname, $method->name), $filters);
$this->addRoute($valid, $route . $params, [$classname, $method->name], $filters);
}

$this->addRoute($valid, $route . $sep . $methodName . $params, array($classname, $method->name), $filters);
$this->addRoute($valid, $route . $sep . $methodName . $params, [$classname, $method->name], $filters);

break;
}
Expand Down Expand Up @@ -214,32 +209,32 @@ private function camelCaseToDashed($string)

public function getValidMethods()
{
return array(
return [
Route::ANY,
Route::GET,
Route::POST,
Route::PUT,
Route::DELETE,
Route::HEAD,
Route::OPTIONS,
);
];
}

public function getData()
{
if (empty($this->regexToRoutesMap))
{
return [$this->staticRoutes, []];
return new RouteDataArray($this->staticRoutes, [], $this->filters);
}

return [$this->staticRoutes, $this->generateVariableRouteData()];
return new RouteDataArray($this->staticRoutes, $this->generateVariableRouteData(), $this->filters);
}

private function generateVariableRouteData()
{
$chunkSize = $this->computeChunkSize(count($this->regexToRoutesMap));
$chunks = array_chunk($this->regexToRoutesMap, $chunkSize, true);
return array_map(array($this, 'processChunk'), $chunks);
return array_map([$this, 'processChunk'], $chunks);
}

private function computeChunkSize($count)
Expand Down
32 changes: 22 additions & 10 deletions src/Phroute/RouteDataArray.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<?php namespace Phroute;

class RouteDataArray implements RouteDataProviderInterface {

class RouteDataArray implements RouteDataInterface {

/**
* @var array
Expand All @@ -13,33 +12,46 @@ class RouteDataArray implements RouteDataProviderInterface {
*/
private $staticRoutes;

/**
* @var array
*/
private $filters;

/**
* @param array $staticRoutes
* @param array $variableRoutes
* @param array $filters
*/
public function __construct(array $staticRoutes, array $variableRoutes)
public function __construct(array $staticRoutes, array $variableRoutes, array $filters)
{
$this->staticRoutes = $staticRoutes;

$this->variableRoutes = $variableRoutes;

$this->filters = $filters;
}

/**
* @return array
*/
public function getData()
public function getStaticRoutes()
{
return [$this->staticRoutes, $this->variableRoutes];
return $this->staticRoutes;
}

/**
* @param RouteCollector $collector
* @return static
* @return array
*/
public static function fromRouteCollector(RouteCollector $collector)
public function getVariableRoutes()
{
list($staticRoute, $variableRoutes) = $collector->getData();
return $this->variableRoutes;
}

return new static($staticRoute, $variableRoutes);
/**
* @return mixed
*/
public function getFilters()
{
return $this->filters;
}
}
9 changes: 9 additions & 0 deletions src/Phroute/RouteDataInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?php namespace Phroute;


interface RouteDataInterface {

public function getStaticRoutes();
public function getVariableRoutes();
public function getFilters();
}
10 changes: 5 additions & 5 deletions test/Dispatcher/DispatcherTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ private function router()

private function dispatch($router, $method, $uri)
{
return (new Dispatcher($router))->dispatch($method, $uri);
return (new Dispatcher($router->getData()))->dispatch($method, $uri);
}

/**
Expand Down Expand Up @@ -392,10 +392,10 @@ public function testRestfulControllerMethods()

$data = $r->getData();

$this->assertEquals($r->getValidMethods(), array_keys($data[0]['user/test']));
$this->assertEquals($r->getValidMethods(), array_keys($data->getStaticRoutes()['user/test']));

$this->assertEquals(array(Route::ANY), array_keys($data[0]['user']));
$this->assertEquals(array(Route::ANY), array_keys($data[0]['user/index']));
$this->assertEquals(array(Route::ANY), array_keys($data->getStaticRoutes()['user']));
$this->assertEquals(array(Route::ANY), array_keys($data->getStaticRoutes()['user/index']));

$this->assertEquals('testRouteAnyIndex', $this->dispatch($r, Route::GET, 'user'));
$this->assertEquals('testRouteAnyIndex', $this->dispatch($r, Route::POST, 'user'));
Expand Down Expand Up @@ -519,7 +519,7 @@ public function testRestfulMethods()

$data = $r->getData();

$this->assertEquals($methods, array_keys($data[0]['user']));
$this->assertEquals($methods, array_keys($data->getStaticRoutes()['user']));
}

public function provideFoundDispatchCases()
Expand Down

0 comments on commit 746ead8

Please sign in to comment.