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)));
 }
예제 #2
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);
 }
 public function testRegisterFunction()
 {
     $expressionEvaluator = new ExpressionEvaluator(new ExpressionLanguage());
     $expressionEvaluator->registerFunction(new HelloExpressionFunction());
     $this->string($expressionEvaluator->evaluate('expr(hello("toto"))', null))->isEqualTo('Hello, toto!');
 }
예제 #4
0
 public function testRegisterFunction()
 {
     $expressionEvaluator = new ExpressionEvaluator(new ExpressionLanguage());
     $expressionEvaluator->registerFunction(new HelloExpressionFunction());
     $this->assertSame('Hello, toto!', $expressionEvaluator->evaluate('expr(hello("toto"))', null));
 }