private function applyTraitVariables(array $values, array $trait)
{
$variables = implode('|', array_keys($values));
$newTrait = [];
foreach ($trait as $key => &$value) {
$newKey = preg_replace_callback('/<<(' . $variables . ')([\\s]*\\|[\\s]*!(singularize|pluralize))?>>/', function ($matches) use($values) {
$transformer = isset($matches[3]) ? $matches[3] : '';
switch ($transformer) {
case 'singularize':
return Inflect::singularize($values[$matches[1]]);
break;
case 'pluralize':
return Inflect::pluralize($values[$matches[1]]);
break;
default:
return $values[$matches[1]];
}
}, $key);
if (is_array($value)) {
$value = $this->applyTraitVariables($values, $value);
} else {
$value = preg_replace_callback('/<<(' . $variables . ')([\\s]*\\|[\\s]*!(singularize|pluralize))?>>/', function ($matches) use($values) {
$transformer = isset($matches[3]) ? $matches[3] : '';
switch ($transformer) {
case 'singularize':
return Inflect::singularize($values[$matches[1]]);
break;
case 'pluralize':
return Inflect::pluralize($values[$matches[1]]);
break;
default:
return $values[$matches[1]];
}
}, $value);
}
$newTrait[$newKey] = $value;
}
return $newTrait;
}