Skip to content

Commit

Permalink
Update code
Browse files Browse the repository at this point in the history
  • Loading branch information
bakura10 committed Dec 1, 2013
1 parent b032133 commit 4da206a
Show file tree
Hide file tree
Showing 5 changed files with 241 additions and 2 deletions.
72 changes: 72 additions & 0 deletions src/ZfrRest/Mvc/Controller/MethodHandler/DataValidationTrait.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<?php
/*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the MIT license.
*/

namespace ZfrRest\Mvc\Controller\MethodHandler;

use Zend\InputFilter\InputFilterPluginManager;
use ZfrRest\Mvc\Exception\RuntimeException;
use ZfrRest\Options\ControllerBehavioursOptions;
use ZfrRest\Resource\ResourceInterface;

/**
* This trait is responsible for validating data for any method handler
*
* @author Michaël Gallego <mic.gallego@gmail.com>
* @licence MIT
*/
trait DataValidationTrait
{
/**
* @var InputFilterPluginManager
*/
protected $inputFilterPluginManager;

/**
* Filter and validate the data
*
* @param ResourceInterface $resource
* @param array $data
* @return array
* @throws RuntimeException If no input filter metadata has been found
*/
public function validateData(ResourceInterface $resource, array $data)
{
if (!$this->getControllerBehavioursOptions()->getAutoValidate()) {
return $data;
}

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

/* @var \Zend\InputFilter\InputFilter $inputFilter */
$inputFilter = $this->inputFilterPluginManager->get($inputFilterName);
$inputFilter->setData($data);

if (!$inputFilter->isValid()) {

}

return $inputFilter->getValues();
}

/**
* @return ControllerBehavioursOptions
*/
abstract public function getControllerBehavioursOptions();
}
83 changes: 83 additions & 0 deletions src/ZfrRest/Options/ControllerBehavioursOptions.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
<?php
/*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the MIT license.
*/

namespace ZfrRest\Options;

use Zend\Stdlib\AbstractOptions;

/**
* Options class to define which behaviours method handlers should follow
*
* @license MIT
* @author Michaël Gallego <mic.gallego@gmail.com>
*/
class ControllerBehavioursOptions extends AbstractOptions
{
/**
* If this is set to true, then controller will automatically instantiate the input filter specified in
* resource metadata (if there is one) - from service locator first, or directly instantiate it if not found -,
* and validate data. If data is incorrect, it will return a 400 HTTP error (Bad Request) with the failed
* validation messages in it).
*
* @var bool
*/
protected $autoValidate = true;

/**
* If this is set to true, then controller will automatically instantiate the hydrator specified in resource
* metadata (if there is one) - from service locator first, or directly instantiate it if not found - and
* hydrate resource object with previously validated data
*
* @var bool
*/
protected $autoHydrate = true;

/**
* @param bool $autoValidate
* @return void
*/
public function setAutoValidate($autoValidate)
{
$this->autoValidate = (bool) $autoValidate;
}

/**
* @return bool
*/
public function getAutoValidate()
{
return $this->autoValidate;
}

/**
* @param bool $autoHydrate
* @return void
*/
public function setAutoHydrate($autoHydrate)
{
$this->autoHydrate = (bool) $autoHydrate;
}

/**
* @return bool
*/
public function getAutoHydrate()
{
return $this->autoHydrate;
}
}
29 changes: 28 additions & 1 deletion src/ZfrRest/Options/ModuleOptions.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,20 @@ class ModuleOptions extends AbstractOptions
*/
protected $cache;

/**
* Controller behaviours
*
* @var ControllerBehavioursOptions|null
*/
protected $controllerBehaviours;

/**
* Should we register this listener?
*
* @var bool
*/
protected $registerHttpMethodOverrideListener = false;


/**
* Set the object manager key
*
Expand Down Expand Up @@ -112,6 +118,27 @@ public function getCache()
return $this->cache;
}

/**
* @param array $controllerBehaviours
* @return void
*/
public function setControllerBehaviours(array $controllerBehaviours)
{
$this->controllerBehaviours = new ControllerBehavioursOptions($controllerBehaviours);
}

/**
* @return ControllerBehavioursOptions
*/
public function getControllerBehaviours()
{
if (null === $this->controllerBehaviours) {
$this->controllerBehaviours = new ControllerBehavioursOptions();
}

return $this->controllerBehaviours;
}

/**
* @param boolean $registerHttpMethodOverrideListener
* @return void
Expand Down
51 changes: 51 additions & 0 deletions tests/ZfrRestTest/Options/ControllerBehavioursOptionsTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<?php
/*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the MIT license.
*/

namespace ZfrRestTest\Options;

use PHPUnit_Framework_TestCase;
use ZfrRest\Options\ControllerBehavioursOptions;

/**
* @licence MIT
* @author Michaël Gallego <mic.gallego@gmail.com>
*
* @group Coverage
* @covers \ZfrRest\Options\ControllerBehavioursOptions
*/
class ControllerBehavioursOptionsTest extends PHPUnit_Framework_TestCase
{
public function testAssertDefaultValue()
{
$options = new ControllerBehavioursOptions();

$this->assertTrue($options->getAutoHydrate());
$this->assertTrue($options->getAutoValidate());
}

public function testSettersAndGetters()
{
$options = new ControllerBehavioursOptions([
'auto_hydrate' => false,
'auto_validate' => false
]);

$this->assertFalse($options->getAutoHydrate());
$this->assertFalse($options->getAutoValidate());
}
}
8 changes: 7 additions & 1 deletion tests/ZfrRestTest/Options/ModuleOptionsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,10 @@ public function testAssertDefaultValue()
$options = new ModuleOptions();

$this->assertEmpty($options->getObjectManager());
$this->assertFalse($options->getRegisterHttpMethodOverrideListener());
$this->assertCount(0, $options->getDrivers());
$this->assertNull($options->getCache());
$this->assertInstanceOf('ZfrRest\Options\ControllerBehavioursOptions', $options->getControllerBehaviours());
$this->assertFalse($options->getRegisterHttpMethodOverrideListener());
}

public function testSettersAndGetters()
Expand All @@ -48,6 +49,9 @@ public function testSettersAndGetters()
'drivers' => [
['class' => 'foo']
],
'controller_behaviours' => [
'auto_hydrate' => false
],
'cache' => 'myCache'
]);

Expand All @@ -59,5 +63,7 @@ public function testSettersAndGetters()
foreach ($options->getDrivers() as $driver) {
$this->assertInstanceOf('ZfrRest\Options\DriverOptions', $driver);
}

$this->assertInstanceOf('ZfrRest\Options\ControllerBehavioursOptions', $options->getControllerBehaviours());
}
}

0 comments on commit 4da206a

Please sign in to comment.