diff --git a/src/pjdietz/WellRESTed/HandlerUnpacker.php b/src/pjdietz/WellRESTed/HandlerUnpacker.php index 44b98e1..9d45161 100644 --- a/src/pjdietz/WellRESTed/HandlerUnpacker.php +++ b/src/pjdietz/WellRESTed/HandlerUnpacker.php @@ -2,20 +2,17 @@ namespace pjdietz\WellRESTed; -use pjdietz\WellRESTed\Interfaces\HandlerInterface; +use pjdietz\WellRESTed\Interfaces\RequestInterface; class HandlerUnpacker { - public function unpack($handler) + public function unpack($handler, RequestInterface $request = null, array $args = null) { if (is_callable($handler)) { - $handler = $handler(); + $handler = $handler($request, $args); } elseif (is_string($handler)) { $handler = new $handler(); } - if (!$handler instanceof HandlerInterface) { - throw new \UnexpectedValueException("Handler must implement HandlerInterface"); - } return $handler; } } diff --git a/test/HandlerUnpackerTest.php b/test/HandlerUnpackerTest.php index adb21d3..6aea05f 100644 --- a/test/HandlerUnpackerTest.php +++ b/test/HandlerUnpackerTest.php @@ -21,6 +21,29 @@ class HandlerUnpackerTest extends \PHPUnit_Framework_TestCase $this->assertInstanceOf("\\pjdietz\\WellRESTed\\Interfaces\\HandlerInterface", $handler); } + public function testPropagatesArgumentsToCallable() + { + $request = $this->prophesize("\\pjdietz\\WellRESTed\\Interfaces\\RequestInterface"); + $args = [ + "cat" => "Molly" + ]; + + $callableRequest = null; + $callableArguments = null; + + $handlerCallable = function ($rqst, $args) use (&$callableRequest, &$callableArguments) { + $callableRequest = $rqst; + $callableArguments = $args; + return null; + }; + + $handlerUnpacker = new HandlerUnpacker(); + $handlerUnpacker->unpack($handlerCallable, $request->reveal(), $args); + + $this->assertSame($callableRequest, $request->reveal()); + $this->assertSame($callableArguments, $args); + } + public function testUnpacksFromString() { $handlerContainer = __NAMESPACE__ . "\\HandlerUnpackerTest_Handler"; @@ -36,15 +59,6 @@ class HandlerUnpackerTest extends \PHPUnit_Framework_TestCase $handler = $handlerUnpacker->unpack($handler); $this->assertInstanceOf("\\pjdietz\\WellRESTed\\Interfaces\\HandlerInterface", $handler); } - - /** - * @expectedException \UnexpectedValueException - */ - public function testThrowsExceptionWhenUnpackedInstanceDoesNotImplementInterface() - { - $handlerUnpacker = new HandlerUnpacker(); - $handlerUnpacker->unpack("\\stdClass"); - } } class HandlerUnpackerTest_Handler implements HandlerInterface