diff options
-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 */ |