/** * @param ParserInterface $parser * @param string $value * * @return mixed|ValueInterface */ private function parseValue(ParserInterface $parser, string $value) { try { return $parser->parse($value); } catch (ParseThrowable $throwable) { throw DenormalizerExceptionFactory::createForUnparsableValue($value, 0, $throwable); } }
/** * Uses the decorated parser to parse the value and then walk through the list of values to merge two successive * strings. * * {@inheritdoc} */ public function parse(string $value) { $parsedValue = $this->parser->parse($value); if (false === $parsedValue instanceof ListValue) { return $parsedValue; } $mergedValues = array_reduce($parsedValue->getValue(), [$this, 'mergeStrings'], $initial = []); return 1 === count($mergedValues) ? $mergedValues[0] : new ListValue($mergedValues); }
private function parseElements(ParserInterface $parser, string $elements) { if ('' === $elements) { return []; } $elements = preg_split('/\\s*,\\s*/', $elements); foreach ($elements as $index => $argument) { $elements[$index] = $parser->parse(trim($argument)); } return $elements; }
private function parseArguments(ParserInterface $parser, string $arguments) : array { if ('' === $arguments) { return []; } $arguments = preg_split('/\\s*,\\s*/', $arguments); foreach ($arguments as $index => $argument) { $argument = trim($argument); if (is_string($argument) && preg_match('/^\'(.*)\'$|^"(.*)"$/', $argument, $match)) { $argument = array_key_exists(2, $match) ? $match[2] : $match[1]; } $argument = $parser->parse($argument); $arguments[$index] = $argument; } return $arguments; }
/** * @dataProvider provideValues */ public function testTestParseValues(string $value, $expected) { try { $actual = $this->parser->parse($value); if (null === $expected) { $this->fail(sprintf('Expected exception to be thrown for "%s", got "%s" instead.', $value, var_export($actual, true))); } } catch (\InvalidArgumentException $exception) { if (null === $expected) { return; } throw $exception; } catch (ExpressionLanguageParseThrowable $exception) { if (null === $expected) { return; } throw $exception; } $this->assertEquals($expected, $actual, var_export($actual, true)); }