Ejemplo n.º 1
0
 private function shouldSkip($object, Exclusion $exclusion = null, SerializationContext $context)
 {
     if (null !== $exclusion && null !== $exclusion->getExcludeIf() && $this->expressionEvaluator->evaluate($exclusion->getExcludeIf(), $object)) {
         return true;
     }
     if (!$context->getExclusionStrategy()) {
         return false;
     }
     $propertyMetadata = new RelationPropertyMetadata($exclusion);
     return $context->getExclusionStrategy()->shouldSkipProperty($propertyMetadata, $context);
 }
 public function testCompile()
 {
     $object = new \StdClass();
     $linkHelperMock = $this->mockHelper('/foo', $object, 'self', false);
     $expressionLanguage = new ExpressionLanguage();
     $expressionEvaluator = new ExpressionEvaluator($expressionLanguage);
     $expressionEvaluator->registerFunction(new LinkExpressionFunction($linkHelperMock));
     $compiledExpression = $expressionLanguage->compile('link(object, "self", false)', array('object', 'link_helper'));
     // setup variables for expression eval
     $object = $object;
     $link_helper = $linkHelperMock;
     $this->assertEquals('/foo', eval(sprintf('return %s;', $compiledExpression)));
 }
Ejemplo n.º 3
0
 /**
  * @param  object               $object
  * @param  SerializationContext $context
  * @return Embed[]
  */
 public function create($object, SerializationContext $context)
 {
     $embeds = array();
     foreach ($this->relationsRepository->getRelations($object) as $relation) {
         if ($this->exclusionManager->shouldSkipEmbed($object, $relation, $context)) {
             continue;
         }
         $rel = $this->expressionEvaluator->evaluate($relation->getName(), $object);
         $data = $this->expressionEvaluator->evaluate($relation->getEmbed()->getContent(), $object);
         $xmlElementName = $this->expressionEvaluator->evaluate($relation->getEmbed()->getXmlElementName(), $object);
         $embeds[] = new Embed($rel, $data, $xmlElementName);
     }
     return $embeds;
 }
 public function evaluateArray(array $array, $data)
 {
     if (!empty($this->functionsIds)) {
         $this->registerFunctions();
     }
     return parent::evaluateArray($array, $data);
 }
Ejemplo n.º 5
0
 /**
  * @param object   $object
  * @param Relation $relation
  *
  * @return Link
  */
 public function createLink($object, Relation $relation)
 {
     $rel = $this->expressionEvaluator->evaluate($relation->getName(), $object);
     $href = $relation->getHref();
     if ($href instanceof Route) {
         if (!$this->urlGeneratorRegistry->hasGenerators()) {
             throw new \RuntimeException('You cannot use a route without an url generator.');
         }
         $name = $this->expressionEvaluator->evaluate($href->getName(), $object);
         $parameters = is_array($href->getParameters()) ? $this->expressionEvaluator->evaluateArray($href->getParameters(), $object) : $this->expressionEvaluator->evaluate($href->getParameters(), $object);
         $isAbsolute = $this->expressionEvaluator->evaluate($href->isAbsolute(), $object);
         if (!is_array($parameters)) {
             throw new \RuntimeException(sprintf('The route parameters should be an array, %s given. Maybe you forgot to wrap the expression in expr(...).', gettype($parameters)));
         }
         $href = $this->urlGeneratorRegistry->get($href->getGenerator())->generate($name, $parameters, $isAbsolute);
     } else {
         $href = $this->expressionEvaluator->evaluate($href, $object);
     }
     $attributes = $this->expressionEvaluator->evaluateArray($relation->getAttributes(), $object);
     return new Link($rel, $href, $attributes);
 }
 public function testRegisterFunction()
 {
     $expressionEvaluator = new ExpressionEvaluator(new ExpressionLanguage());
     $expressionEvaluator->registerFunction(new HelloExpressionFunction());
     $this->string($expressionEvaluator->evaluate('expr(hello("toto"))', null))->isEqualTo('Hello, toto!');
 }
Ejemplo n.º 7
0
 /**
  * Build a configured Hateoas instance.
  *
  * @return Hateoas
  */
 public function build()
 {
     $metadataFactory = $this->buildMetadataFactory();
     $relationProvider = new RelationProvider($metadataFactory, $this->chainResolver);
     $relationsRepository = new RelationsRepository($metadataFactory, $relationProvider);
     $expressionEvaluator = new ExpressionEvaluator($this->getExpressionLanguage(), $this->contextVariables);
     $linkFactory = new LinkFactory($expressionEvaluator, $this->urlGeneratorRegistry);
     $exclusionManager = new ExclusionManager($expressionEvaluator);
     $linksFactory = new LinksFactory($relationsRepository, $linkFactory, $exclusionManager);
     $embeddedsFactory = new EmbeddedsFactory($relationsRepository, $expressionEvaluator, $exclusionManager);
     $linkHelper = new LinkHelper($linkFactory, $relationsRepository);
     // Register Hateoas core functions
     $expressionEvaluator->registerFunction(new LinkExpressionFunction($linkHelper));
     // Register user functions
     foreach ($this->expressionFunctions as $expressionFunction) {
         $expressionEvaluator->registerFunction($expressionFunction);
     }
     if (null === $this->xmlSerializer) {
         $this->setDefaultXmlSerializer();
     }
     if (null === $this->jsonSerializer) {
         $this->setDefaultJsonSerializer();
     }
     $inlineDeferrers = array();
     $eventSubscribers = array(new XmlEventSubscriber($this->xmlSerializer, $linksFactory, $embeddedsFactory), new JsonEventSubscriber($this->jsonSerializer, $linksFactory, $embeddedsFactory, $inlineDeferrers[] = new InlineDeferrer(), $inlineDeferrers[] = new InlineDeferrer()));
     $this->serializerBuilder->addDefaultListeners()->configureListeners(function (EventDispatcherInterface $dispatcher) use($eventSubscribers) {
         foreach ($eventSubscribers as $eventSubscriber) {
             $dispatcher->addSubscriber($eventSubscriber);
         }
     });
     $jmsSerializer = $this->serializerBuilder->build();
     foreach (array_merge($inlineDeferrers, array($this->jsonSerializer, $this->xmlSerializer)) as $serializer) {
         if ($serializer instanceof JMSSerializerMetadataAwareInterface) {
             $serializer->setMetadataFactory($jmsSerializer->getMetadataFactory());
         }
     }
     return new Hateoas($jmsSerializer, $linkHelper);
 }
Ejemplo n.º 8
0
 /**
  * @dataProvider getTestEvaluateNonStringData
  */
 public function testEvaluateNonString($value)
 {
     $expressionEvaluator = new ExpressionEvaluator(new ExpressionLanguage());
     $this->variable($expressionEvaluator->evaluate($value, array()))->isIdenticalTo($value);
 }
Ejemplo n.º 9
0
 /**
  * @dataProvider getTestEvaluateNonStringData
  */
 public function testEvaluateNonString($value)
 {
     $expressionEvaluator = new ExpressionEvaluator(new ExpressionLanguage());
     $this->assertSame($value, $expressionEvaluator->evaluate($value, array()));
 }
 public function evaluateArray(array $array, $data)
 {
     $this->registerFunctions();
     return parent::evaluateArray($array, $data);
 }