From 61dd80ec2135ed6791ceda78830095b463718f1e Mon Sep 17 00:00:00 2001 From: Martynas Sudintas <martynas.sudintas@nfq.lt> Date: Thu, 22 Jan 2015 16:58:49 +0200 Subject: [PATCH] implemented FriendlyBuilderBag --- Aggregation/AbstractAggregation.php | 15 ++-- Aggregation/Aggregations.php | 86 --------------------- FriendlyBuilderBag.php | 114 ++++++++++++++++++++++++++++ FriendlyBuilderInterface.php | 25 ++++++ Search.php | 16 ++-- Suggester/AbstractSuggester.php | 6 +- Suggester/Suggesters.php | 86 --------------------- 7 files changed, 158 insertions(+), 190 deletions(-) delete mode 100644 Aggregation/Aggregations.php create mode 100644 FriendlyBuilderBag.php create mode 100644 FriendlyBuilderInterface.php delete mode 100644 Suggester/Suggesters.php diff --git a/Aggregation/AbstractAggregation.php b/Aggregation/AbstractAggregation.php index e9106db..88f786f 100644 --- a/Aggregation/AbstractAggregation.php +++ b/Aggregation/AbstractAggregation.php @@ -11,13 +11,16 @@ namespace ONGR\ElasticsearchBundle\DSL\Aggregation; -use ONGR\ElasticsearchBundle\DSL\BuilderInterface; +use ONGR\ElasticsearchBundle\DSL\FriendlyBuilderBag; +use ONGR\ElasticsearchBundle\DSL\FriendlyBuilderInterface; /** * AbstractAggregation class. */ -abstract class AbstractAggregation implements BuilderInterface +abstract class AbstractAggregation implements FriendlyBuilderInterface { + const PREFIX = 'agg_'; + /** * @var string */ @@ -29,7 +32,7 @@ abstract class AbstractAggregation implements BuilderInterface protected $name; /** - * @var Aggregations + * @var FriendlyBuilderBag */ public $aggregations; @@ -58,7 +61,7 @@ abstract class AbstractAggregation implements BuilderInterface public function __construct($name) { $this->name = $name; - $this->aggregations = new Aggregations(); + $this->aggregations = new FriendlyBuilderBag(); } /** @@ -78,11 +81,11 @@ abstract class AbstractAggregation implements BuilderInterface } /** - * @return string + * {@inheritdoc} */ public function getName() { - return Aggregations::PREFIX . $this->name; + return self::PREFIX . $this->name; } /** diff --git a/Aggregation/Aggregations.php b/Aggregation/Aggregations.php deleted file mode 100644 index c7885ab..0000000 --- a/Aggregation/Aggregations.php +++ /dev/null @@ -1,86 +0,0 @@ -<?php - -/* - * This file is part of the ONGR package. - * - * (c) NFQ Technologies UAB <info@nfq.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace ONGR\ElasticsearchBundle\DSL\Aggregation; - -/** - * Aggregations class. - */ -class Aggregations -{ - const PREFIX = 'agg_'; - - /** - * @var array - */ - private $aggregations = []; - - /** - * @param AbstractAggregation $agg - */ - public function addAggregation(AbstractAggregation $agg) - { - $this->aggregations[$agg->getName()] = $agg; - } - - /** - * Checks if aggregation is set. - * - * @param string $name - * - * @return bool - */ - public function has($name) - { - return isset($this->aggregations[$name]); - } - - /** - * Removes aggregation by it's name. - * - * @param string $name - */ - public function remove($name) - { - unset($this->aggregations[$name]); - } - - /** - * Gets aggregation by it's name. - * - * @param string $name - * - * @return AbstractAggregation - */ - public function get($name) - { - return $this->aggregations[$name]; - } - - /** - * Returns all aggregations. - * - * @param string|null $type - * - * @return AbstractAggregation[] - */ - public function all($type = null) - { - return array_filter( - $this->aggregations, - function ($aggregation) use ($type) { - /** @var AbstractAggregation $aggregation */ - - return $type === null || $aggregation->getType() == $type; - } - ); - } -} diff --git a/FriendlyBuilderBag.php b/FriendlyBuilderBag.php new file mode 100644 index 0000000..dd90e94 --- /dev/null +++ b/FriendlyBuilderBag.php @@ -0,0 +1,114 @@ +<?php + +/* + * This file is part of the ONGR package. + * + * (c) NFQ Technologies UAB <info@nfq.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace ONGR\ElasticsearchBundle\DSL; + +/** + * Container for friendly builders. + */ +class FriendlyBuilderBag +{ + /** + * @var FriendlyBuilderInterface[] + */ + private $bag = []; + + /** + * @param FriendlyBuilderInterface[] $builders + */ + public function __construct(array $builders = []) + { + $this->set($builders); + } + + /** + * Replaces builders with new ones. + * + * @param FriendlyBuilderInterface[] $builders + */ + public function set(array $builders) + { + foreach ($builders as $builder) { + $this->add($builder); + } + } + + /** + * Adds a builder. + * + * @param FriendlyBuilderInterface $builder + */ + public function add(FriendlyBuilderInterface $builder) + { + $this->bag[$builder->getName()] = $builder; + } + + /** + * Checks if builder is set by name. + * + * @param string $name Builder name. + * + * @return bool + */ + public function has($name) + { + return isset($this->bag[$name]); + } + + /** + * Removes a builder by name. + * + * @param string $name Builder name. + */ + public function remove($name) + { + unset($this->bag[$name]); + } + + /** + * Clears contained builders. + */ + public function clear() + { + $this->bag = []; + } + + /** + * Returns a builder by name. + * + * @param string $name Builder name. + * + * @return FriendlyBuilderInterface + */ + public function get($name) + { + return $this->bag[$name]; + } + + /** + * Returns all builders contained. + * + * @param string|null $name Builder name. + * + * @return FriendlyBuilderInterface[] + */ + public function all($name = null) + { + return array_filter( + $this->bag, + function ($builder) use ($name) { + /** @var FriendlyBuilderInterface $builder */ + + return $name === null || $builder->getName() == $name; + } + ); + } +} diff --git a/FriendlyBuilderInterface.php b/FriendlyBuilderInterface.php new file mode 100644 index 0000000..a4e1e4b --- /dev/null +++ b/FriendlyBuilderInterface.php @@ -0,0 +1,25 @@ +<?php + +/* + * This file is part of the ONGR package. + * + * (c) NFQ Technologies UAB <info@nfq.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace ONGR\ElasticsearchBundle\DSL; + +/** + * Interface used by builders with names. + */ +interface FriendlyBuilderInterface extends BuilderInterface +{ + /** + * Returns builder name. + * + * @return string + */ + public function getName(); +} diff --git a/Search.php b/Search.php index 94316a4..0328cf6 100644 --- a/Search.php +++ b/Search.php @@ -12,7 +12,6 @@ namespace ONGR\ElasticsearchBundle\DSL; use ONGR\ElasticsearchBundle\DSL\Aggregation\AbstractAggregation; -use ONGR\ElasticsearchBundle\DSL\Aggregation\Aggregations; use ONGR\ElasticsearchBundle\DSL\Bool\Bool; use ONGR\ElasticsearchBundle\DSL\Filter\PostFilter; use ONGR\ElasticsearchBundle\DSL\Highlight\Highlight; @@ -21,7 +20,6 @@ use ONGR\ElasticsearchBundle\DSL\Query\Query; use ONGR\ElasticsearchBundle\DSL\Sort\AbstractSort; use ONGR\ElasticsearchBundle\DSL\Sort\Sorts; use ONGR\ElasticsearchBundle\DSL\Suggester\AbstractSuggester; -use ONGR\ElasticsearchBundle\DSL\Suggester\Suggesters; /** * Search object that can be executed by a manager. @@ -91,7 +89,7 @@ class Search private $scriptFields; /** - * @var Suggesters + * @var FriendlyBuilderBag */ private $suggesters; @@ -116,7 +114,7 @@ class Search private $stats; /** - * @var Aggregations + * @var FriendlyBuilderBag */ private $aggregations; @@ -361,9 +359,9 @@ class Search public function addAggregation($agg) { if ($this->aggregations === null) { - $this->aggregations = new Aggregations(); + $this->aggregations = new FriendlyBuilderBag(); } - $this->aggregations->addAggregation($agg); + $this->aggregations->add($agg); return $this; } @@ -406,7 +404,7 @@ class Search public function addSuggester(AbstractSuggester $suggester) { if ($this->suggesters === null) { - $this->suggesters = new Suggesters(); + $this->suggesters = new FriendlyBuilderBag(); } $this->suggesters->add($suggester); @@ -475,7 +473,7 @@ class Search } /** - * @return Aggregations + * @return FriendlyBuilderBag */ public function getAggregations() { @@ -611,7 +609,7 @@ class Search } /** - * @return Suggesters + * @return FriendlyBuilderBag */ public function getSuggesters() { diff --git a/Suggester/AbstractSuggester.php b/Suggester/AbstractSuggester.php index 922aec1..ecef664 100644 --- a/Suggester/AbstractSuggester.php +++ b/Suggester/AbstractSuggester.php @@ -11,12 +11,12 @@ namespace ONGR\ElasticsearchBundle\DSL\Suggester; -use ONGR\ElasticsearchBundle\DSL\BuilderInterface; +use ONGR\ElasticsearchBundle\DSL\FriendlyBuilderInterface; /** * AbstractSuggester class. */ -abstract class AbstractSuggester implements BuilderInterface +abstract class AbstractSuggester implements FriendlyBuilderInterface { /** * @var string @@ -96,7 +96,7 @@ abstract class AbstractSuggester implements BuilderInterface } /** - * @return string + * {@inheritdoc} */ public function getName() { diff --git a/Suggester/Suggesters.php b/Suggester/Suggesters.php deleted file mode 100644 index dcfdca0..0000000 --- a/Suggester/Suggesters.php +++ /dev/null @@ -1,86 +0,0 @@ -<?php - -/* - * This file is part of the ONGR package. - * - * (c) NFQ Technologies UAB <info@nfq.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace ONGR\ElasticsearchBundle\DSL\Suggester; - -/** - * Suggesters class. - */ -class Suggesters -{ - /** - * @var AbstractSuggester - */ - private $suggesters = []; - - /** - * Adds a suggester. - * - * @param AbstractSuggester $suggester - */ - public function add(AbstractSuggester $suggester) - { - $this->suggesters[$suggester->getName()] = $suggester; - } - - /** - * Checks if suggester is set. - * - * @param string $name - * - * @return bool - */ - public function has($name) - { - return isset($this->suggesters[$name]); - } - - /** - * Removes suggester. - * - * @param string $name - */ - public function remove($name) - { - unset($this->suggesters[$name]); - } - - /** - * Gets a suggester by it's name. - * - * @param string $name - * - * @return AbstractSuggester - */ - public function get($name) - { - return $this->suggesters[$name]; - } - - /** - * Gets all suggesters. - * - * @param string|null $name - * - * @return AbstractSuggester[] - */ - public function all($name = null) - { - return array_filter( - $this->suggesters, - function ($build) use ($name) { - /** @var AbstractSuggester $suggester */ - - return $name === null || $suggester->getName() == $name; - } - ); - } -} -- GitLab