summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold Daniels <arnold@jasny.net>2016-11-29 17:04:00 +0100
committerGitHub <noreply@github.com>2016-11-29 17:04:00 +0100
commit4431ae588f05da88b88ec4b2ba7f752568a7a020 (patch)
tree5fd9c16077c292460784f11c32d697736b1c94a0
parent8db24c7d9e173bb8a126dfde4889f3316d892d66 (diff)
parent313a01545703e03f5148e892ab3d406fb0308ef1 (diff)
downloadrouter-4431ae588f05da88b88ec4b2ba7f752568a7a020.zip
router-4431ae588f05da88b88ec4b2ba7f752568a7a020.tar.gz
router-4431ae588f05da88b88ec4b2ba7f752568a7a020.tar.bz2
Merge pull request #16 from jasny/glob-stdclass-routes
Support taking stdClass instead of an array as route list
-rw-r--r--src/Router/Routes/Glob.php8
-rw-r--r--tests/Router/Routes/GlobTest.php22
2 files changed, 27 insertions, 3 deletions
diff --git a/src/Router/Routes/Glob.php b/src/Router/Routes/Glob.php
index 3c7e6ca..3987d98 100644
--- a/src/Router/Routes/Glob.php
+++ b/src/Router/Routes/Glob.php
@@ -21,7 +21,7 @@ class Glob extends ArrayObject implements Routes
/**
* Class constructor
*
- * @param Routes[]|array|\Traversable $input
+ * @param Routes[]|array|stdClass|\Traversable $input
* @param int $flags
*/
public function __construct($input = [], $flags = 0)
@@ -56,13 +56,15 @@ class Glob extends ArrayObject implements Routes
/**
* Create routes from input
*
- * @param Route[]|array|\Traversable $input
+ * @param Route[]|array|stdClass|\Traversable $input
* @return type
*/
protected function createRoutes($input)
{
if ($input instanceof \Traversable) {
$input = iterator_to_array($input, true);
+ } elseif ($input instanceof \stdClass) {
+ $input = get_object_vars($input);
}
return array_map([$this, 'createRoute'], $input);
@@ -79,7 +81,7 @@ class Glob extends ArrayObject implements Routes
/**
* Replace all the routes
*
- * @param Route[]|array|\Traversable $input
+ * @param Route[]|array|stdClass|\Traversable $input
* @return array the old routes
*/
public function exchangeArray($input)
diff --git a/tests/Router/Routes/GlobTest.php b/tests/Router/Routes/GlobTest.php
index 0e5253c..4fcacfc 100644
--- a/tests/Router/Routes/GlobTest.php
+++ b/tests/Router/Routes/GlobTest.php
@@ -72,7 +72,29 @@ class GlobTest extends \PHPUnit_Framework_TestCase
$this->assertCount(3, $glob, "Routes count do not match");
$this->assertEquals($original->getArrayCopy(), $glob->getArrayCopy());
}
+
+ public function testConstructorWithStdClass()
+ {
+ $values = (object)[
+ '/foo/bar' => ['controller' => 'value1'],
+ '/foo/*' => ['fn' => 'value3'],
+ '/foo/*/bar' => ['file' => 'value5'],
+ ];
+
+ $glob = new Glob($values);
+
+ $this->assertCount(3, $glob, "Routes count do not match");
+ foreach ($glob as $pattern => $route) {
+ $this->assertInstanceof(Route::class, $route);
+ $this->assertObjectHasAttribute($pattern, $values);
+ $this->assertArraysEqual($values->$pattern, (array)$route);
+ }
+
+ return $glob;
+ }
+
+
/**
* Provide data for testExchangeArray() test method
*/