From bcfcb5c112d0c4252a24c5d0582c6adee6192f18 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Simonas=20=C5=A0erlinskas?= <simonas.serlinskas@nfq.com>
Date: Mon, 18 Feb 2019 09:56:09 +0200
Subject: [PATCH] introducing field aware trait and named builder interface

---
 src/Aggregation/AbstractAggregation.php |  8 +++---
 src/FieldAwareTrait.php                 | 36 +++++++++++++++++++++++++
 src/InnerHit/NestedInnerHit.php         |  4 +--
 src/NamedBuilderInterface.php           | 25 +++++++++++++++++
 src/Search.php                          |  2 +-
 src/Suggest/Suggest.php                 |  4 +--
 6 files changed, 70 insertions(+), 9 deletions(-)
 create mode 100644 src/FieldAwareTrait.php
 create mode 100644 src/NamedBuilderInterface.php

diff --git a/src/Aggregation/AbstractAggregation.php b/src/Aggregation/AbstractAggregation.php
index 32977f4..fe59853 100644
--- a/src/Aggregation/AbstractAggregation.php
+++ b/src/Aggregation/AbstractAggregation.php
@@ -12,14 +12,14 @@
 namespace ONGR\ElasticsearchDSL\Aggregation;
 
 use ONGR\ElasticsearchDSL\BuilderBag;
-use ONGR\ElasticsearchDSL\BuilderInterface;
 use ONGR\ElasticsearchDSL\NameAwareTrait;
+use ONGR\ElasticsearchDSL\NamedBuilderInterface;
 use ONGR\ElasticsearchDSL\ParametersTrait;
 
 /**
  * AbstractAggregation class.
  */
-abstract class AbstractAggregation implements BuilderInterface
+abstract class AbstractAggregation implements NamedBuilderInterface
 {
     use ParametersTrait;
     use NameAwareTrait;
@@ -93,7 +93,7 @@ abstract class AbstractAggregation implements BuilderInterface
     /**
      * Returns all sub aggregations.
      *
-     * @return BuilderBag[]|BuilderInterface[]
+     * @return BuilderBag[]|NamedBuilderInterface[]
      */
     public function getAggregations()
     {
@@ -108,7 +108,7 @@ abstract class AbstractAggregation implements BuilderInterface
      * Returns sub aggregation.
      * @param string $name Aggregation name to return.
      *
-     * @return AbstractAggregation|BuilderInterface|null
+     * @return AbstractAggregation|NamedBuilderInterface|null
      */
     public function getAggregation($name)
     {
diff --git a/src/FieldAwareTrait.php b/src/FieldAwareTrait.php
new file mode 100644
index 0000000..3316e51
--- /dev/null
+++ b/src/FieldAwareTrait.php
@@ -0,0 +1,36 @@
+<?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\ElasticsearchDSL;
+
+trait FieldAwareTrait
+{
+    /**
+     * @var string
+     */
+    private $field;
+
+    /**
+     * @return mixed
+     */
+    public function getField()
+    {
+        return $this->field;
+    }
+
+    /**
+     * @param mixed $field
+     */
+    public function setField($field)
+    {
+        $this->field = $field;
+    }
+}
diff --git a/src/InnerHit/NestedInnerHit.php b/src/InnerHit/NestedInnerHit.php
index e04707a..e52ca71 100644
--- a/src/InnerHit/NestedInnerHit.php
+++ b/src/InnerHit/NestedInnerHit.php
@@ -11,8 +11,8 @@
 
 namespace ONGR\ElasticsearchDSL\InnerHit;
 
-use ONGR\ElasticsearchDSL\BuilderInterface;
 use ONGR\ElasticsearchDSL\NameAwareTrait;
+use ONGR\ElasticsearchDSL\NamedBuilderInterface;
 use ONGR\ElasticsearchDSL\ParametersTrait;
 use ONGR\ElasticsearchDSL\Search;
 
@@ -21,7 +21,7 @@ use ONGR\ElasticsearchDSL\Search;
  *
  * @link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-inner-hits.html
  */
-class NestedInnerHit implements BuilderInterface
+class NestedInnerHit implements NamedBuilderInterface
 {
     use ParametersTrait;
     use NameAwareTrait;
diff --git a/src/NamedBuilderInterface.php b/src/NamedBuilderInterface.php
new file mode 100644
index 0000000..b9df432
--- /dev/null
+++ b/src/NamedBuilderInterface.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\ElasticsearchDSL;
+
+/**
+ * Interface NamedBuilderInterface.
+ */
+interface NamedBuilderInterface extends BuilderInterface
+{
+    /**
+     * Returns element name.
+     *
+     * @return string
+     */
+    public function getName();
+}
diff --git a/src/Search.php b/src/Search.php
index 1a1b51b..9d140f2 100644
--- a/src/Search.php
+++ b/src/Search.php
@@ -412,7 +412,7 @@ class Search
     *
     * @return $this
     */
-    public function addSuggest(BuilderInterface $suggest)
+    public function addSuggest(NamedBuilderInterface $suggest)
     {
         $this->getEndpoint(SuggestEndpoint::NAME)->add($suggest, $suggest->getName());
 
diff --git a/src/Suggest/Suggest.php b/src/Suggest/Suggest.php
index f795130..5baab70 100644
--- a/src/Suggest/Suggest.php
+++ b/src/Suggest/Suggest.php
@@ -11,11 +11,11 @@
 
 namespace ONGR\ElasticsearchDSL\Suggest;
 
-use ONGR\ElasticsearchDSL\BuilderInterface;
+use ONGR\ElasticsearchDSL\NamedBuilderInterface;
 use ONGR\ElasticsearchDSL\ParametersTrait;
 use Symfony\Component\Serializer\Exception\InvalidArgumentException;
 
-class Suggest implements BuilderInterface
+class Suggest implements NamedBuilderInterface
 {
     use ParametersTrait;
 
-- 
GitLab