From cfefc1fcc6f1bec34a993f1c994f38bf66040a95 Mon Sep 17 00:00:00 2001 From: tchiotludo <tchiot.ludo@gmail.com> Date: Wed, 7 Sep 2016 18:29:51 +0200 Subject: [PATCH] InnerHit new implementation --- src/InnerHit/NestedInnerHit.php | 89 +++------------------------ tests/InnerHit/NestedInnerHitTest.php | 55 +++++++++-------- tests/InnerHit/ParentInnerHitTest.php | 7 ++- 3 files changed, 45 insertions(+), 106 deletions(-) diff --git a/src/InnerHit/NestedInnerHit.php b/src/InnerHit/NestedInnerHit.php index 73dc853..7df7421 100644 --- a/src/InnerHit/NestedInnerHit.php +++ b/src/InnerHit/NestedInnerHit.php @@ -11,10 +11,10 @@ namespace ONGR\ElasticsearchDSL\InnerHit; -use ONGR\ElasticsearchDSL\BuilderBag; use ONGR\ElasticsearchDSL\BuilderInterface; use ONGR\ElasticsearchDSL\NameAwareTrait; use ONGR\ElasticsearchDSL\ParametersTrait; +use ONGR\ElasticsearchDSL\Search; /** * Represents Elasticsearch top level nested inner hits. @@ -36,19 +36,14 @@ class NestedInnerHit implements BuilderInterface */ private $query; - /** - * @var BuilderBag - */ - private $innerHits; - /** * Inner hits container init. * - * @param string $name - * @param string $path - * @param BuilderInterface $query + * @param string $name + * @param string $path + * @param Search $query */ - public function __construct($name, $path, BuilderInterface $query) + public function __construct($name, $path, Search $query = null) { $this->setName($name); $this->setPath($path); @@ -80,9 +75,9 @@ class NestedInnerHit implements BuilderInterface } /** - * @param BuilderInterface $query + * @param Search $query */ - public function setQuery(BuilderInterface $query) + public function setQuery(Search $query = null) { $this->query = $query; } @@ -95,64 +90,16 @@ class NestedInnerHit implements BuilderInterface return 'nested'; } - /** - * Adds a sub-innerHit. - * - * @param NestedInnerHit $innerHit - */ - public function addInnerHit(NestedInnerHit $innerHit) - { - if (!$this->innerHits) { - $this->innerHits = new BuilderBag(); - } - - $this->innerHits->add($innerHit); - } - - /** - * Returns all sub inner hits. - * - * @return BuilderInterface[] - */ - public function getInnerHits() - { - if ($this->innerHits) { - return $this->innerHits->all(); - } else { - return []; - } - } - - /** - * Returns sub inner hit. - * @param string $name inner hit name to return. - * - * @return NestedInnerHit|null - */ - public function getInnerHit($name) - { - if ($this->innerHits && $this->innerHits->has($name)) { - return $this->innerHits->get($name); - } else { - return null; - } - } - /** * {@inheritdoc} */ public function toArray() { - $out = array_filter( - [ - 'query' => $this->getQuery()->toArray(), - 'inner_hits' => $this->collectNestedInnerHits(), - ] - ); + $out = $this->getQuery() ? $this->getQuery()->toArray() : new \stdClass(); $out = [ $this->getPathType() => [ - $this->getPath() => $this->processArray($out), + $this->getPath() => $out , ], ]; @@ -160,7 +107,7 @@ class NestedInnerHit implements BuilderInterface } /** - * Returns 'path' for neted and 'type' for parent inner hits + * Returns 'path' for nested and 'type' for parent inner hits * * @return null|string */ @@ -178,20 +125,4 @@ class NestedInnerHit implements BuilderInterface } return $type; } - - /** - * Process all nested inner hits. - * - * @return array - */ - private function collectNestedInnerHits() - { - $result = []; - /** @var NestedInnerHit $innerHit */ - foreach ($this->getInnerHits() as $innerHit) { - $result[$innerHit->getName()] = $innerHit->toArray(); - } - - return $result; - } } diff --git a/tests/InnerHit/NestedInnerHitTest.php b/tests/InnerHit/NestedInnerHitTest.php index 9cb88fc..44c59ee 100644 --- a/tests/InnerHit/NestedInnerHitTest.php +++ b/tests/InnerHit/NestedInnerHitTest.php @@ -5,7 +5,7 @@ namespace ONGR\ElasticsearchDSL\Tests\InnerHit; use ONGR\ElasticsearchDSL\InnerHit\NestedInnerHit; use ONGR\ElasticsearchDSL\Query\MatchQuery; use ONGR\ElasticsearchDSL\Query\NestedQuery; -use ONGR\ElasticsearchDSL\Query\TermQuery; +use ONGR\ElasticsearchDSL\Search; class NestedInnerHitTest extends \PHPUnit_Framework_TestCase { @@ -20,11 +20,28 @@ class NestedInnerHitTest extends \PHPUnit_Framework_TestCase $matchQuery = new MatchQuery('foo.bar.aux', 'foo'); $nestedQuery = new NestedQuery('foo.bar', $matchQuery); - $innerHit = new NestedInnerHit('acme', 'foo', $nestedQuery); - $nestedInnerHit1 = new NestedInnerHit('aux', 'foo.bar.aux', $matchQuery); - $nestedInnerHit2 = new NestedInnerHit('lux', 'foo.bar.aux', $matchQuery); - $innerHit->addInnerHit($nestedInnerHit1); - $innerHit->addInnerHit($nestedInnerHit2); + $searchQuery = new Search(); + $searchQuery->addQuery($nestedQuery); + + $matchSearch = new Search(); + $matchSearch->addQuery($matchQuery); + + $innerHit = new NestedInnerHit('acme', 'foo', $searchQuery); + $emptyInnerHit = new NestedInnerHit('acme', 'foo'); + + $nestedInnerHit1 = new NestedInnerHit('aux', 'foo.bar.aux', $matchSearch); + $nestedInnerHit2 = new NestedInnerHit('lux', 'foo.bar.aux', $matchSearch); + $searchQuery->addInnerHit($nestedInnerHit1); + $searchQuery->addInnerHit($nestedInnerHit2); + + $out[] = [ + $emptyInnerHit, + [ + 'path' => [ + 'foo' => new \stdClass(), + ], + ], + ]; $out[] = [ $nestedInnerHit1, @@ -88,30 +105,16 @@ class NestedInnerHitTest extends \PHPUnit_Framework_TestCase public function testGettersAndSetters() { $query = new MatchQuery('acme', 'test'); - $hit = new NestedInnerHit('test', 'acme', new TermQuery('foo', 'bar')); + $search = new Search(); + $search->addQuery($query); + + $hit = new NestedInnerHit('test', 'acme', new Search()); $hit->setName('foo'); $hit->setPath('bar'); - $hit->setQuery($query); + $hit->setQuery($search); $this->assertEquals('foo', $hit->getName()); $this->assertEquals('bar', $hit->getPath()); - $this->assertEquals($query, $hit->getQuery()); - } - - /** - * Tests getInnerHit() method - */ - public function testGetInnerHit() - { - $query = new MatchQuery('acme', 'test'); - $hit = new NestedInnerHit('test', 'acme', $query); - $nestedInnerHit1 = new NestedInnerHit('foo', 'acme.foo', $query); - $nestedInnerHit2 = new NestedInnerHit('bar', 'acme.bar', $query); - $hit->addInnerHit($nestedInnerHit1); - $hit->addInnerHit($nestedInnerHit2); - - $this->assertEquals($nestedInnerHit1, $hit->getInnerHit('foo')); - $this->assertEquals($nestedInnerHit2, $hit->getInnerHit('bar')); - $this->assertNull($hit->getInnerHit('non_existing_hit')); + $this->assertEquals($search, $hit->getQuery()); } } diff --git a/tests/InnerHit/ParentInnerHitTest.php b/tests/InnerHit/ParentInnerHitTest.php index 0a80b63..9444ec6 100644 --- a/tests/InnerHit/ParentInnerHitTest.php +++ b/tests/InnerHit/ParentInnerHitTest.php @@ -4,13 +4,18 @@ namespace ONGR\ElasticsearchDSL\Tests\InnerHit; use ONGR\ElasticsearchDSL\InnerHit\ParentInnerHit; use ONGR\ElasticsearchDSL\Query\TermQuery; +use ONGR\ElasticsearchDSL\Search; class ParentInnerHitTest extends \PHPUnit_Framework_TestCase { public function testToArray() { $query = new TermQuery('foo', 'bar'); - $hit = new ParentInnerHit('test', 'acme', $query); + $search = new Search(); + $search->addQuery($query); + + + $hit = new ParentInnerHit('test', 'acme', $search); $expected = [ 'type' => [ 'acme' => [ -- GitLab