Skip to content

Commit

Permalink
Move logic to listener
Browse files Browse the repository at this point in the history
  • Loading branch information
bakura10 committed May 4, 2014
1 parent fa51553 commit e069033
Show file tree
Hide file tree
Showing 7 changed files with 49 additions and 24 deletions.
Binary file modified db.sqlite
Binary file not shown.
12 changes: 12 additions & 0 deletions src/ZfrRest/Mvc/Controller/Event/HydrationEvent.php
Expand Up @@ -21,6 +21,7 @@
use Zend\EventManager\Event;
use Zend\Stdlib\Hydrator\HydratorInterface;
use Zend\Stdlib\Hydrator\HydratorPluginManager;
use ZfrRest\Mvc\Exception\RuntimeException;
use ZfrRest\Resource\ResourceInterface;

/**
Expand Down Expand Up @@ -106,10 +107,21 @@ public function setHydrator(HydratorInterface $hydrator)
}

/**
* Lazy load the hydrator from plugin manager (or retrieve the one that is set)
*
* @return null|HydratorInterface
* @throws RuntimeException
*/
public function getHydrator()
{
if (!$this->hydrator instanceof HydratorInterface) {
if (!($hydratorName = $this->resource->getMetadata()->getHydratorName())) {
throw new RuntimeException('No hydrator name has been found in resource metadata');
}

$this->hydrator = $this->hydratorManager->get($hydratorName);
}

return $this->hydrator;
}
}
12 changes: 12 additions & 0 deletions src/ZfrRest/Mvc/Controller/Event/ValidationEvent.php
Expand Up @@ -21,6 +21,7 @@
use Zend\EventManager\Event;
use Zend\InputFilter\InputFilterInterface;
use Zend\InputFilter\InputFilterPluginManager;
use ZfrRest\Mvc\Exception\RuntimeException;
use ZfrRest\Resource\ResourceInterface;

/**
Expand Down Expand Up @@ -107,10 +108,21 @@ public function setInputFilter(InputFilterInterface $inputFilter)
}

/**
* Lazy load the hydrator from plugin manager (or retrieve the one that is set)
*
* @return null|InputFilterInterface
* @throws RuntimeException
*/
public function getInputFilter()
{
if (!$this->inputFilter instanceof InputFilterInterface) {
if (!($inputFilterName = $this->resource->getMetadata()->getInputFilterName())) {
throw new RuntimeException('No input filter name has been found in resource metadata');
}

$this->inputFilter = $this->inputFilterManager->get($inputFilterName);
}

return $this->inputFilter;
}
}
11 changes: 1 addition & 10 deletions src/ZfrRest/Mvc/Controller/MethodHandler/DataHydrationTrait.php
Expand Up @@ -19,6 +19,7 @@
namespace ZfrRest\Mvc\Controller\MethodHandler;

use Zend\EventManager\EventManagerAwareInterface;
use Zend\EventManager\EventManagerInterface;
use Zend\Stdlib\Hydrator\HydratorInterface;
use Zend\Stdlib\Hydrator\HydratorPluginManager;
use ZfrRest\Mvc\Controller\Event\HydrationEvent;
Expand Down Expand Up @@ -64,16 +65,6 @@ public function hydrateData(ResourceInterface $resource, array $data, EventManag
/* @var HydratorInterface $inputFilter */
$hydrator = $event->getHydrator();

if (!$hydrator instanceof HydratorInterface) {
if (!($hydratorName = $resource->getMetadata()->getHydratorName())) {
throw new RuntimeException('No hydrator name has been found in resource metadata');
}

$hydrator = $this->hydratorPluginManager->get($hydratorName);

$event->setHydrator($hydrator);
}

$eventManager->trigger(HydrationEvent::EVENT_HYDRATE_POST, $event);

return $hydrator->hydrate($data, $resource->getData());
Expand Down
11 changes: 0 additions & 11 deletions src/ZfrRest/Mvc/Controller/MethodHandler/DataValidationTrait.php
Expand Up @@ -66,17 +66,6 @@ public function validateData(ResourceInterface $resource, array $data, EventMana

/* @var InputFilterInterface $inputFilter */
$inputFilter = $event->getInputFilter();

if (!$inputFilter instanceof InputFilterInterface) {
if (!($inputFilterName = $resource->getMetadata()->getInputFilterName())) {
throw new RuntimeException('No input filter name has been found in resource metadata');
}

$inputFilter = $this->inputFilterPluginManager->get($inputFilterName);

$event->setInputFilter($inputFilter);
}

$inputFilter->setData($data);

if (!$inputFilter->isValid($resource->getData())) {
Expand Down
15 changes: 13 additions & 2 deletions tests/ZfrRestTest/Mvc/Controller/Event/HydrationEventTest.php
Expand Up @@ -56,11 +56,22 @@ public function testSetGetAutoHydrate()
public function testSetGetHydrator()
{
$resource = $this->getMock('ZfrRest\Resource\ResourceInterface');
$metadata = $this->getMock('ZfrRest\Resource\Metadata\ResourceMetadataInterface');
$hydratorManager = $this->getMock('Zend\Stdlib\Hydrator\HydratorPluginManager');
$hydrator = $this->getMock('Zend\Stdlib\Hydrator\HydratorInterface');
$event = new HydrationEvent($resource, $hydratorManager);

$this->assertNull($event->getHydrator());
$resource->expects($this->once())->method('getMetadata')->will($this->returnValue($metadata));
$metadata->expects($this->once())->method('getHydratorName')->will($this->returnValue('MyHydrator'));

$expectedHydrator = $this->getMock('Zend\Stdlib\Hydrator\HydratorInterface');
$hydratorManager->expects($this->once())
->method('get')
->with('MyHydrator')
->will($this->returnValue($expectedHydrator));

// We first assert it can retrieves by default the one attached to the resource
$this->assertSame($expectedHydrator, $event->getHydrator());

$event->setHydrator($hydrator);

Expand All @@ -82,6 +93,6 @@ public function testSetGetHydratorManager()
$hydratorManager = $this->getMock('Zend\Stdlib\Hydrator\HydratorPluginManager');
$event = new HydrationEvent($resource, $hydratorManager);

$this->assertSame($hydratorManager, $event->gethydratorManager());
$this->assertSame($hydratorManager, $event->getHydratorManager());
}
}
12 changes: 11 additions & 1 deletion tests/ZfrRestTest/Mvc/Controller/Event/ValidationEventTest.php
Expand Up @@ -56,11 +56,21 @@ public function testSetGetAutoValidate()
public function testSetGetInputFilter()
{
$resource = $this->getMock('ZfrRest\Resource\ResourceInterface');
$metadata = $this->getMock('ZfrRest\Resource\Metadata\ResourceMetadataInterface');
$inputFilterManager = $this->getMock('Zend\InputFilter\InputFilterPluginManager');
$inputFilter = $this->getMock('Zend\InputFilter\InputFilterInterface');
$event = new ValidationEvent($resource, $inputFilterManager);

$this->assertNull($event->getInputFilter());
$resource->expects($this->once())->method('getMetadata')->will($this->returnValue($metadata));
$metadata->expects($this->once())->method('getInputFilterName')->will($this->returnValue('MyInputFilter'));

$expectedInputfilter = $this->getMock('Zend\InputFilter\InputFilterInterface');
$inputFilterManager->expects($this->once())
->method('get')
->with('MyInputFilter')
->will($this->returnValue($expectedInputfilter));

$this->assertSame($expectedInputfilter, $event->getInputFilter());

$event->setInputFilter($inputFilter);

Expand Down

0 comments on commit e069033

Please sign in to comment.