Skip to content
This repository has been archived by the owner on Jan 8, 2020. It is now read-only.

Commit

Permalink
Merge branch 'feature/3754' into develop
Browse files Browse the repository at this point in the history
Close #3754
Close #4229
  • Loading branch information
weierophinney committed Apr 15, 2013
2 parents aa21bd2 + 65067f6 commit e1091c3
Show file tree
Hide file tree
Showing 3 changed files with 146 additions and 2 deletions.
5 changes: 3 additions & 2 deletions library/Zend/Stdlib/Hydrator/ClassMethods.php
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,9 @@ public function extract($object)
$attribute = $method;
if (preg_match('/^get/', $method)) {
$attribute = substr($method, 3);
$attribute = lcfirst($attribute);
if(!property_exists($object, $attribute)) {
$attribute = lcfirst($attribute);
}
}

if ($this->underscoreSeparatedKeys) {
Expand Down Expand Up @@ -185,5 +187,4 @@ public function hydrate(array $data, $object)

return $object;
}

}
52 changes: 52 additions & 0 deletions tests/ZendTest/Stdlib/HydratorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
use Zend\Stdlib\Hydrator\ArraySerializable;
use Zend\Stdlib\Hydrator\Filter\FilterComposite;
use ZendTest\Stdlib\TestAsset\ClassMethodsCamelCase;
use ZendTest\Stdlib\TestAsset\ClassMethodsTitleCase;
use ZendTest\Stdlib\TestAsset\ClassMethodsFilterProviderInterface;
use ZendTest\Stdlib\TestAsset\ClassMethodsMagicMethodSetter;
use ZendTest\Stdlib\TestAsset\ClassMethodsProtectedSetter;
Expand Down Expand Up @@ -44,6 +45,11 @@ class HydratorTest extends \PHPUnit_Framework_TestCase
*/
protected $classMethodsCamelCase;

/**
* @var ClassMethodsTitleCase
*/
protected $classMethodsTitleCase;

/**
* @var ClassMethodsCamelCaseMissing
*/
Expand All @@ -67,6 +73,7 @@ class HydratorTest extends \PHPUnit_Framework_TestCase
public function setUp()
{
$this->classMethodsCamelCase = new ClassMethodsCamelCase();
$this->classMethodsTitleCase = new ClassMethodsTitleCase();
$this->classMethodsCamelCaseMissing = new ClassMethodsCamelCaseMissing();
$this->classMethodsUnderscore = new ClassMethodsUnderscore();
$this->classMethodsInvalidParameter = new ClassMethodsInvalidParameter();
Expand All @@ -82,6 +89,12 @@ public function testInitiateValues()
$this->assertEquals($this->classMethodsCamelCase->isBar(), true);
$this->assertEquals($this->classMethodsCamelCase->getHasFoo(), true);
$this->assertEquals($this->classMethodsCamelCase->hasBar(), true);
$this->assertEquals($this->classMethodsTitleCase->getFooBar(), '1');
$this->assertEquals($this->classMethodsTitleCase->getFooBarBaz(), '2');
$this->assertEquals($this->classMethodsTitleCase->getIsFoo(), true);
$this->assertEquals($this->classMethodsTitleCase->getIsBar(), true);
$this->assertEquals($this->classMethodsTitleCase->getHasFoo(), true);
$this->assertEquals($this->classMethodsTitleCase->getHasBar(), true);
$this->assertEquals($this->classMethodsUnderscore->getFooBar(), '1');
$this->assertEquals($this->classMethodsUnderscore->getFooBarBaz(), '2');
$this->assertEquals($this->classMethodsUnderscore->getIsFoo(), true);
Expand Down Expand Up @@ -143,6 +156,45 @@ public function testHydratorClassMethodsCamelCase()
$this->assertEquals($test->hasBar(), false);
}



public function testHydratorClassMethodsTitleCase()
{
$hydrator = new ClassMethods(false);
$datas = $hydrator->extract($this->classMethodsTitleCase);
$this->assertTrue(isset($datas['FooBar']));
$this->assertEquals($datas['FooBar'], '1');
$this->assertTrue(isset($datas['FooBarBaz']));
$this->assertFalse(isset($datas['foo_bar']));
$this->assertTrue(isset($datas['IsFoo']));
$this->assertEquals($datas['IsFoo'], true);
$this->assertTrue(isset($datas['IsBar']));
$this->assertEquals($datas['IsBar'], true);
$this->assertTrue(isset($datas['HasFoo']));
$this->assertEquals($datas['HasFoo'], true);
$this->assertTrue(isset($datas['HasBar']));
$this->assertEquals($datas['HasBar'], true);
$test = $hydrator->hydrate(
array(
'FooBar' => 'foo',
'FooBarBaz' => 'bar',
'IsFoo' => false,
'IsBar' => false,
'HasFoo' => false,
'HasBar' => false,
),
$this->classMethodsTitleCase
);
$this->assertSame($this->classMethodsTitleCase, $test);
$this->assertEquals($test->getFooBar(), 'foo');
$this->assertEquals($test->getFooBarBaz(), 'bar');
$this->assertEquals($test->getIsFoo(), false);
$this->assertEquals($test->getIsBar(), false);
$this->assertEquals($test->getHasFoo(), false);
$this->assertEquals($test->getHasBar(), false);
}


public function testHydratorClassMethodsUnderscore()
{
$hydrator = new ClassMethods(true);
Expand Down
91 changes: 91 additions & 0 deletions tests/ZendTest/Stdlib/TestAsset/ClassMethodsTitleCase.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2013 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @package Zend_Stdlib
*/

namespace ZendTest\Stdlib\TestAsset;

class ClassMethodsTitleCase
{
protected $FooBar = '1';

protected $FooBarBaz = '2';

protected $IsFoo = true;

protected $IsBar = true;

protected $HasFoo = true;

protected $HasBar = true;

public function getFooBar()
{
return $this->FooBar;
}

public function setFooBar($value)
{
$this->FooBar = $value;
return $this;
}

public function getFooBarBaz()
{
return $this->FooBarBaz;
}

public function setFooBarBaz($value)
{
$this->FooBarBaz = $value;
return $this;
}

public function getIsFoo()
{
return $this->IsFoo;
}

public function setIsFoo($IsFoo)
{
$this->IsFoo = $IsFoo;
return $this;
}

public function getIsBar()
{
return $this->IsBar;
}

public function setIsBar($IsBar)
{
$this->IsBar = $IsBar;
return $this;
}

public function getHasFoo()
{
return $this->HasFoo;
}

public function getHasBar()
{
return $this->HasBar;
}

public function setHasFoo($HasFoo)
{
$this->HasFoo = $HasFoo;
return $this;
}

public function setHasBar($HasBar)
{
$this->HasBar = $HasBar;
}
}

0 comments on commit e1091c3

Please sign in to comment.