Add HandlerUnpacker

This commit is contained in:
PJ Dietz 2015-02-19 19:51:42 -05:00
parent d34607a0d9
commit 5dc5cdab06
2 changed files with 77 additions and 0 deletions

View File

@ -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;
}
}

View File

@ -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;
}
}