/** * Transforms argument value using registered transformers. * * @param Transformation $transformation * @param DefinitionCall $definitionCall * @param integer|string $index * @param mixed $value * * @return mixed */ private function transform(DefinitionCall $definitionCall, Transformation $transformation, $index, $value) { if (is_object($value) && !$value instanceof ArgumentInterface) { return $value; } if ($transformation instanceof SimpleArgumentTransformation && $transformation->supportsDefinitionAndArgument($definitionCall, $index, $value)) { return $transformation->transformArgument($this->callCenter, $definitionCall, $index, $value); } if ($transformation instanceof PatternTransformation && $transformation->supportsDefinitionAndArgument($this, $definitionCall, $value)) { return $transformation->transformArgument($this, $this->callCenter, $definitionCall, $value); } return $value; }
/** * Checks if provided transformation is token-based. * * @param Transformation $transformation * * @return Boolean */ private function isTokenTransformation(Transformation $transformation) { return 1 === preg_match('/^\\:\\w+$/', $transformation->getPattern()); }
/** * Checks if provided transformation is applicable pattern transformation. * * @param DefinitionCall $definitionCall * @param Transformation|string $transformation * @param mixed $value * @param array $match * * @return Boolean */ private function isApplicablePatternTransformation(DefinitionCall $definitionCall, Transformation $transformation, $value, &$match) { $regex = $this->getRegex($definitionCall->getEnvironment()->getSuite()->getName(), $transformation->getPattern(), $definitionCall->getFeature()->getLanguage()); if (is_string($value) && preg_match($regex, $value, $match)) { // take arguments from capture groups if there are some if (count($match) > 1) { $match = array_slice($match, 1); } return true; } return false; }