Propagate arguments to callable in HandlerUnpacker::unpack
This commit is contained in:
parent
bc966f5924
commit
d785e21fee
|
|
@ -2,20 +2,17 @@
|
||||||
|
|
||||||
namespace pjdietz\WellRESTed;
|
namespace pjdietz\WellRESTed;
|
||||||
|
|
||||||
use pjdietz\WellRESTed\Interfaces\HandlerInterface;
|
use pjdietz\WellRESTed\Interfaces\RequestInterface;
|
||||||
|
|
||||||
class HandlerUnpacker
|
class HandlerUnpacker
|
||||||
{
|
{
|
||||||
public function unpack($handler)
|
public function unpack($handler, RequestInterface $request = null, array $args = null)
|
||||||
{
|
{
|
||||||
if (is_callable($handler)) {
|
if (is_callable($handler)) {
|
||||||
$handler = $handler();
|
$handler = $handler($request, $args);
|
||||||
} elseif (is_string($handler)) {
|
} elseif (is_string($handler)) {
|
||||||
$handler = new $handler();
|
$handler = new $handler();
|
||||||
}
|
}
|
||||||
if (!$handler instanceof HandlerInterface) {
|
|
||||||
throw new \UnexpectedValueException("Handler must implement HandlerInterface");
|
|
||||||
}
|
|
||||||
return $handler;
|
return $handler;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,29 @@ class HandlerUnpackerTest extends \PHPUnit_Framework_TestCase
|
||||||
$this->assertInstanceOf("\\pjdietz\\WellRESTed\\Interfaces\\HandlerInterface", $handler);
|
$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()
|
public function testUnpacksFromString()
|
||||||
{
|
{
|
||||||
$handlerContainer = __NAMESPACE__ . "\\HandlerUnpackerTest_Handler";
|
$handlerContainer = __NAMESPACE__ . "\\HandlerUnpackerTest_Handler";
|
||||||
|
|
@ -36,15 +59,6 @@ class HandlerUnpackerTest extends \PHPUnit_Framework_TestCase
|
||||||
$handler = $handlerUnpacker->unpack($handler);
|
$handler = $handlerUnpacker->unpack($handler);
|
||||||
$this->assertInstanceOf("\\pjdietz\\WellRESTed\\Interfaces\\HandlerInterface", $handler);
|
$this->assertInstanceOf("\\pjdietz\\WellRESTed\\Interfaces\\HandlerInterface", $handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException \UnexpectedValueException
|
|
||||||
*/
|
|
||||||
public function testThrowsExceptionWhenUnpackedInstanceDoesNotImplementInterface()
|
|
||||||
{
|
|
||||||
$handlerUnpacker = new HandlerUnpacker();
|
|
||||||
$handlerUnpacker->unpack("\\stdClass");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class HandlerUnpackerTest_Handler implements HandlerInterface
|
class HandlerUnpackerTest_Handler implements HandlerInterface
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue