From c8a20734ecb622f6e782dc89fea8c241836d3bfa Mon Sep 17 00:00:00 2001
From: pmishev <pmishev@gmail.com>
Date: Thu, 27 Jun 2019 11:44:45 +0100
Subject: [PATCH] Added support for 'keyed' option to DateRangeAggregation
 (#283) (#287)

---
 .../Bucketing/DateRangeAggregation.php        | 45 ++++++++++++++-----
 .../Bucketing/DateRangeAggregationTest.php    |  2 +
 2 files changed, 36 insertions(+), 11 deletions(-)

diff --git a/src/Aggregation/Bucketing/DateRangeAggregation.php b/src/Aggregation/Bucketing/DateRangeAggregation.php
index 00184c9..3ca14e2 100644
--- a/src/Aggregation/Bucketing/DateRangeAggregation.php
+++ b/src/Aggregation/Bucketing/DateRangeAggregation.php
@@ -29,25 +29,29 @@ class DateRangeAggregation extends AbstractAggregation
     private $format;
 
     /**
-     * @return string
+     * @var array
      */
-    public function getFormat()
-    {
-        return $this->format;
-    }
+    private $ranges = [];
+
+    /**
+     * @var bool
+     */
+    private $keyed = false;
 
     /**
      * @param string $name
      * @param string $field
      * @param string $format
      * @param array  $ranges
+     * @param bool   $keyed
      */
-    public function __construct($name, $field = null, $format = null, array $ranges = [])
+    public function __construct($name, $field = null, $format = null, array $ranges = [], $keyed = false)
     {
         parent::__construct($name);
 
         $this->setField($field);
         $this->setFormat($format);
+        $this->setKeyed($keyed);
         foreach ($ranges as $range) {
             $from = isset($range['from']) ? $range['from'] : null;
             $to = isset($range['to']) ? $range['to'] : null;
@@ -57,23 +61,41 @@ class DateRangeAggregation extends AbstractAggregation
     }
 
     /**
-     * @param string $format
+     * Sets if result buckets should be keyed.
+     *
+     * @param bool $keyed
+     *
+     * @return DateRangeAggregation
      */
-    public function setFormat($format)
+    public function setKeyed($keyed)
     {
-        $this->format = $format;
+        $this->keyed = $keyed;
+
+        return $this;
     }
 
     /**
-     * @var array
+     * @return string
      */
-    private $ranges = [];
+    public function getFormat()
+    {
+        return $this->format;
+    }
+
+    /**
+     * @param string $format
+     */
+    public function setFormat($format)
+    {
+        $this->format = $format;
+    }
 
     /**
      * Add range to aggregation.
      *
      * @param string|null $from
      * @param string|null $to
+     * @param string|null $key
      *
      * @return $this
      *
@@ -111,6 +133,7 @@ class DateRangeAggregation extends AbstractAggregation
                 'format' => $this->getFormat(),
                 'field' => $this->getField(),
                 'ranges' => $this->ranges,
+                'keyed' => $this->keyed,
             ];
 
             return $data;
diff --git a/tests/Unit/Aggregation/Bucketing/DateRangeAggregationTest.php b/tests/Unit/Aggregation/Bucketing/DateRangeAggregationTest.php
index 13b0c8f..92a40bd 100644
--- a/tests/Unit/Aggregation/Bucketing/DateRangeAggregationTest.php
+++ b/tests/Unit/Aggregation/Bucketing/DateRangeAggregationTest.php
@@ -47,11 +47,13 @@ class DateRangeAggregationTest extends \PHPUnit_Framework_TestCase
         $agg = new DateRangeAggregation('foo', 'baz');
         $agg->addRange(10, 20);
         $agg->setFormat('bar');
+        $agg->setKeyed(true);
         $result = $agg->getArray();
         $expected = [
             'format' => 'bar',
             'field' => 'baz',
             'ranges' => [['from' => 10, 'to' => 20]],
+            'keyed' => true,
         ];
         $this->assertEquals($expected, $result);
     }
-- 
GitLab