ExMoveetting the required flux query parts intohe Basics trait

Signed-off-by: davidarendsen <davidarendsen@hey.com>
This commit is contained in:
davidarendsen 2023-01-16 14:55:07 +00:00
commit ee0ae4ca20
2 changed files with 26 additions and 12 deletions

View file

@ -17,9 +17,12 @@ trait Basics
{ {
public function from(array $from): QueryBuilderInterface public function from(array $from): QueryBuilderInterface
{ {
$this->setRequirements();
$this->addToQuery( $this->addToQuery(
new From($from) new From($from)
); );
return $this; return $this;
} }
@ -30,6 +33,8 @@ trait Basics
public function fromMeasurement(string $measurement): QueryBuilderInterface public function fromMeasurement(string $measurement): QueryBuilderInterface
{ {
$this->setRequirements();
$this->addToQuery( $this->addToQuery(
new Measurement($measurement) new Measurement($measurement)
); );
@ -44,6 +49,8 @@ trait Basics
*/ */
public function addFilter(KeyValue $keyValue): QueryBuilderInterface public function addFilter(KeyValue $keyValue): QueryBuilderInterface
{ {
$this->setRequirements();
$this->addToQuery( $this->addToQuery(
new Filter($keyValue) new Filter($keyValue)
); );
@ -52,6 +59,8 @@ trait Basics
public function addKeyFilter(KeyFilter $keyFilter): QueryBuilderInterface public function addKeyFilter(KeyFilter $keyFilter): QueryBuilderInterface
{ {
$this->setRequirements();
$this->addToQuery( $this->addToQuery(
new Filter($keyFilter) new Filter($keyFilter)
); );
@ -60,6 +69,8 @@ trait Basics
public function addFieldFilter(array $fields): QueryBuilderInterface public function addFieldFilter(array $fields): QueryBuilderInterface
{ {
$this->setRequirements();
$this->addToQuery( $this->addToQuery(
new Filter($fields) new Filter($fields)
); );
@ -68,6 +79,8 @@ trait Basics
public function addRange(DateTime $start, ?DateTime $stop = null): QueryBuilderInterface public function addRange(DateTime $start, ?DateTime $stop = null): QueryBuilderInterface
{ {
$this->setRequirements();
$this->addToQuery( $this->addToQuery(
new Range($start, $stop) new Range($start, $stop)
); );
@ -93,4 +106,13 @@ trait Basics
); );
return $this; return $this;
} }
private function setRequirements()
{
$this->requiredFluxQueryParts = [
From::class,
Range::class,
Measurement::class,
];
}
} }

View file

@ -6,9 +6,6 @@ use Exception;
use Arendsen\FluxQueryBuilder\Builder\QueryBuilderInterface; use Arendsen\FluxQueryBuilder\Builder\QueryBuilderInterface;
use Arendsen\FluxQueryBuilder\Builder\Basics; use Arendsen\FluxQueryBuilder\Builder\Basics;
use Arendsen\FluxQueryBuilder\Builder\Universe; use Arendsen\FluxQueryBuilder\Builder\Universe;
use Arendsen\FluxQueryBuilder\Functions\From;
use Arendsen\FluxQueryBuilder\Functions\Measurement;
use Arendsen\FluxQueryBuilder\Functions\Range;
class QueryBuilder implements QueryBuilderInterface class QueryBuilder implements QueryBuilderInterface
{ {
@ -16,14 +13,9 @@ class QueryBuilder implements QueryBuilderInterface
use Universe; use Universe;
/** /**
* The required Flux query parts and the correct order. * @var array $requiredFluxQueryParts
* Depends on Basics trait
*/ */
public const REQUIRED_FLUX_QUERY_PARTS = [ private $requiredFluxQueryParts = [];
From::class,
Range::class,
Measurement::class,
];
/** /**
* @var array $fluxQueryParts * @var array $fluxQueryParts
@ -39,7 +31,7 @@ class QueryBuilder implements QueryBuilderInterface
{ {
$this->fluxQueryParts[] = $query; $this->fluxQueryParts[] = $query;
foreach (self::REQUIRED_FLUX_QUERY_PARTS as $input) { foreach ($this->requiredFluxQueryParts as $input) {
if ($query instanceof $input) { if ($query instanceof $input) {
$this->requiredData[] = $query; $this->requiredData[] = $query;
} }
@ -61,7 +53,7 @@ class QueryBuilder implements QueryBuilderInterface
protected function checkRequired() protected function checkRequired()
{ {
foreach (self::REQUIRED_FLUX_QUERY_PARTS as $key => $input) { foreach ($this->requiredFluxQueryParts as $key => $input) {
if (isset($this->requiredData[$key]) && !$this->requiredData[$key] instanceof $input) { if (isset($this->requiredData[$key]) && !$this->requiredData[$key] instanceof $input) {
throw new Exception('You need to put the "' . $input . '" part of the query in the correct order!'); throw new Exception('You need to put the "' . $input . '" part of the query in the correct order!');
} elseif (!isset($this->requiredData[$key])) { } elseif (!isset($this->requiredData[$key])) {