Add HandlerUnpacker
This commit is contained in:
parent
d34607a0d9
commit
5dc5cdab06
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace pjdietz\WellRESTed;
|
||||||
|
|
||||||
|
use pjdietz\WellRESTed\Interfaces\HandlerInterface;
|
||||||
|
|
||||||
|
class HandlerUnpacker
|
||||||
|
{
|
||||||
|
public function unpack($handler)
|
||||||
|
{
|
||||||
|
if (is_callable($handler)) {
|
||||||
|
$handler = $handler();
|
||||||
|
} elseif (is_string($handler)) {
|
||||||
|
$handler = new $handler();
|
||||||
|
}
|
||||||
|
if (!$handler instanceof HandlerInterface) {
|
||||||
|
throw new \UnexpectedValueException("Handler must implement HandlerInterface");
|
||||||
|
}
|
||||||
|
return $handler;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,56 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace pjdietz\WellRESTed\Test;
|
||||||
|
|
||||||
|
use pjdietz\WellRESTed\HandlerUnpacker;
|
||||||
|
use pjdietz\WellRESTed\Interfaces\HandlerInterface;
|
||||||
|
use pjdietz\WellRESTed\Interfaces\RequestInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers pjdietz\WellRESTed\HandlerUnpacker
|
||||||
|
*/
|
||||||
|
class HandlerUnpackerTest extends \PHPUnit_Framework_TestCase
|
||||||
|
{
|
||||||
|
public function testUnpacksFromCallable()
|
||||||
|
{
|
||||||
|
$handlerContainer = function () {
|
||||||
|
return new HandlerUnpackerTest_Handler();
|
||||||
|
};
|
||||||
|
$handlerUnpacker = new HandlerUnpacker();
|
||||||
|
$handler = $handlerUnpacker->unpack($handlerContainer);
|
||||||
|
$this->assertInstanceOf("\\pjdietz\\WellRESTed\\Interfaces\\HandlerInterface", $handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testUnpacksFromString()
|
||||||
|
{
|
||||||
|
$handlerContainer = __NAMESPACE__ . "\\HandlerUnpackerTest_Handler";
|
||||||
|
$handlerUnpacker = new HandlerUnpacker();
|
||||||
|
$handler = $handlerUnpacker->unpack($handlerContainer);
|
||||||
|
$this->assertInstanceOf("\\pjdietz\\WellRESTed\\Interfaces\\HandlerInterface", $handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testUnpacksInstance()
|
||||||
|
{
|
||||||
|
$handler = new HandlerUnpackerTest_Handler();
|
||||||
|
$handlerUnpacker = new HandlerUnpacker();
|
||||||
|
$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
|
||||||
|
{
|
||||||
|
public function getResponse(RequestInterface $request, array $args = null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue