Esempio n. 1
0
 /**
  * convert data into transformed array
  *
  * @param mixed $data
  * @param Item|Collection $resource
  * @param array|string $embeds
  * @return array
  */
 public function convert($data, Item $resource, $embeds = [])
 {
     if (is_string($embeds)) {
         $embeds = $this->embedManager->getEmbedsFromParam($embeds);
     }
     $embeds = $this->embedManager->filter($this->availableEmbeds, $embeds);
     return $resource->transform($data, $embeds);
 }
Esempio n. 2
0
 public function testFilter()
 {
     // All empty
     $embeds = [];
     $filteringEmbeds = [];
     $results = $this->embedManager->filter($embeds, $filteringEmbeds);
     $this->assertEquals([], $results);
     // Master list is empty
     $embeds = [];
     $filteringEmbeds = [new Embed('comments')];
     $results = $this->embedManager->filter($embeds, $filteringEmbeds);
     $this->assertEquals([], $results);
     // Same list with 1 element
     $embeds = [new Embed('comments')];
     $filteringEmbeds = [new Embed('comments')];
     $results = $this->embedManager->filter($embeds, $filteringEmbeds);
     $this->assertEquals(1, count($results));
     $this->assertEquals('comments', $results[0]->name);
     $this->assertEquals([], $results[0]->children);
     // Master list has more stuff
     $embeds = [new Embed('comments', [new Embed('users')]), new Embed('likes')];
     $filteringEmbeds = [new Embed('comments')];
     $results = $this->embedManager->filter($embeds, $filteringEmbeds);
     $this->assertEquals(1, count($results));
     $this->assertEquals('comments', $results[0]->name);
     $this->assertEquals([], $results[0]->children);
     // Input list has more stuff
     $embeds = [new Embed('comments')];
     $filteringEmbeds = [new Embed('comments', [new Embed('users')])];
     $results = $this->embedManager->filter($embeds, $filteringEmbeds);
     $this->assertEquals(1, count($results));
     $this->assertEquals('comments', $results[0]->name);
     $this->assertEquals([], $results[0]->children);
     // Input list has different stuff compare to master
     $embeds = [new Embed('likes')];
     $filteringEmbeds = [new Embed('comments')];
     $results = $this->embedManager->filter($embeds, $filteringEmbeds);
     $this->assertEquals([], $results);
     // Input list has different stuff compare to master on children level
     $embeds = [new Embed('comments', [new Embed('likes')])];
     $filteringEmbeds = [new Embed('comments', [new Embed('users')])];
     $results = $this->embedManager->filter($embeds, $filteringEmbeds);
     $this->assertEquals(1, count($results));
     $this->assertEquals('comments', $results[0]->name);
     $this->assertEquals([], $results[0]->children);
     // Input list has different stuff compare to master on children level pretty complex one
     $embeds = [new Embed('comments', [new Embed('users')]), new Embed('likes', [new Embed('users')])];
     $filteringEmbeds = [new Embed('comments', [new Embed('users')]), new Embed('likes')];
     $results = $this->embedManager->filter($embeds, $filteringEmbeds);
     $this->assertEquals(2, count($results));
     $this->assertEquals('comments', $results[0]->name);
     $this->assertEquals(1, count($results[0]->children));
     $this->assertEquals('users', $results[0]->children[0]->name);
     $this->assertEquals('likes', $results[1]->name);
     $this->assertEquals([], $results[1]->children);
     // Input list has different stuff compare to master on children, oh what a mess!
     $embeds = [new Embed('comments', [new Embed('users')]), new Embed('likes', [new Embed('users')])];
     $filteringEmbeds = [new Embed('comments', [new Embed('likes')]), new Embed('likes', [new Embed('guns')])];
     $results = $this->embedManager->filter($embeds, $filteringEmbeds);
     $this->assertEquals(2, count($results));
     $this->assertEquals('comments', $results[0]->name);
     $this->assertEquals([], $results[0]->children);
     $this->assertEquals('likes', $results[1]->name);
     $this->assertEquals([], $results[1]->children);
 }