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

Commit

Permalink
[zendframework/zendframework#5364] Use existing filters
Browse files Browse the repository at this point in the history
- Modified class to use existing filters, via a filter chain, to perform
  the work. Filter chains are stored as static properties as the
  implementation will not change between instances.
  • Loading branch information
weierophinney committed Jan 3, 2014
1 parent accee7c commit 5de64e2
Showing 1 changed file with 39 additions and 14 deletions.
53 changes: 39 additions & 14 deletions src/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@

namespace Zend\Stdlib\Hydrator\NamingStrategy;

/**
* Class UnderscoreNamingStrategy
* @package Zend\Stdlib\Hydrator\NamingStrategy
*/
use Zend\Filter\FilterChain;

class UnderscoreNamingStrategy implements NamingStrategyInterface
{
protected static $camelCaseToUnderscoreFilter;

protected static $underscoreToCamelCaseFilter;

/**
* Remove underscores and capitalize letters
*
Expand All @@ -23,11 +25,7 @@ class UnderscoreNamingStrategy implements NamingStrategyInterface
*/
public function hydrate($name)
{
return preg_replace_callback('/(_[a-z])/i', function($letters) {
$letter = substr(array_shift($letters), 1, 1);

return ucfirst($letter);
}, $name);
return $this->getUnderscoreToCamelCaseFilter()->filter($name);
}

/**
Expand All @@ -38,10 +36,37 @@ public function hydrate($name)
*/
public function extract($name)
{
return preg_replace_callback('/([A-Z])/', function($letters) {
$letter = array_shift($letters);
return $this->getCamelCaseToUnderscoreFilter()->filter($name);
}

/**
* @return FilterChain
*/
protected function getUnderscoreToCamelCaseFilter()
{
if (static::$underscoreToCamelCaseFilter instanceof FilterChain) {
return static::$underscoreToCamelCaseFilter;
}

$filter = new FilterChain();
$filter->attachByName('WordUnderscoreToCamelCase');
static::$underscoreToCamelCaseFilter = $filter;
return $filter;
}

/**
* @return FilterChain
*/
protected function getCamelCaseToUnderscoreFilter()
{
if (static::$camelCaseToUnderscoreFilter instanceof FilterChain) {
return static::$camelCaseToUnderscoreFilter;
}

return '_' . strtolower($letter);
}, $name);
$filter = new FilterChain();
$filter->attachByName('WordCamelCaseToUnderscore');
$filter->attachByName('StringToLower');
static::$camelCaseToUnderscoreFilter = $filter;
return $filter;
}
}
}

0 comments on commit 5de64e2

Please sign in to comment.