diff options
author | Arnold Daniels <arnold@jasny.net> | 2016-11-29 16:56:06 +0100 |
---|---|---|
committer | Arnold Daniels <arnold@jasny.net> | 2016-11-29 17:00:16 +0100 |
commit | 313a01545703e03f5148e892ab3d406fb0308ef1 (patch) | |
tree | 5fd9c16077c292460784f11c32d697736b1c94a0 | |
parent | 8db24c7d9e173bb8a126dfde4889f3316d892d66 (diff) | |
download | router-origin/glob-stdclass-routes.zip router-origin/glob-stdclass-routes.tar.gz router-origin/glob-stdclass-routes.tar.bz2 |
Support taking stdClass instead of an array as route listorigin/glob-stdclass-routes
-rw-r--r-- | src/Router/Routes/Glob.php | 8 | ||||
-rw-r--r-- | tests/Router/Routes/GlobTest.php | 22 |
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 */ |