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
{
$this->setRequirements();
$this->addToQuery(
new From($from)
);
return $this;
}
@ -30,6 +33,8 @@ trait Basics
public function fromMeasurement(string $measurement): QueryBuilderInterface
{
$this->setRequirements();
$this->addToQuery(
new Measurement($measurement)
);
@ -44,6 +49,8 @@ trait Basics
*/
public function addFilter(KeyValue $keyValue): QueryBuilderInterface
{
$this->setRequirements();
$this->addToQuery(
new Filter($keyValue)
);
@ -52,6 +59,8 @@ trait Basics
public function addKeyFilter(KeyFilter $keyFilter): QueryBuilderInterface
{
$this->setRequirements();
$this->addToQuery(
new Filter($keyFilter)
);
@ -60,6 +69,8 @@ trait Basics
public function addFieldFilter(array $fields): QueryBuilderInterface
{
$this->setRequirements();
$this->addToQuery(
new Filter($fields)
);
@ -68,6 +79,8 @@ trait Basics
public function addRange(DateTime $start, ?DateTime $stop = null): QueryBuilderInterface
{
$this->setRequirements();
$this->addToQuery(
new Range($start, $stop)
);
@ -93,4 +106,13 @@ trait Basics
);
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\Basics;
use Arendsen\FluxQueryBuilder\Builder\Universe;
use Arendsen\FluxQueryBuilder\Functions\From;
use Arendsen\FluxQueryBuilder\Functions\Measurement;
use Arendsen\FluxQueryBuilder\Functions\Range;
class QueryBuilder implements QueryBuilderInterface
{
@ -16,14 +13,9 @@ class QueryBuilder implements QueryBuilderInterface
use Universe;
/**
* The required Flux query parts and the correct order.
* Depends on Basics trait
* @var array $requiredFluxQueryParts
*/
public const REQUIRED_FLUX_QUERY_PARTS = [
From::class,
Range::class,
Measurement::class,
];
private $requiredFluxQueryParts = [];
/**
* @var array $fluxQueryParts
@ -39,7 +31,7 @@ class QueryBuilder implements QueryBuilderInterface
{
$this->fluxQueryParts[] = $query;
foreach (self::REQUIRED_FLUX_QUERY_PARTS as $input) {
foreach ($this->requiredFluxQueryParts as $input) {
if ($query instanceof $input) {
$this->requiredData[] = $query;
}
@ -61,7 +53,7 @@ class QueryBuilder implements QueryBuilderInterface
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) {
throw new Exception('You need to put the "' . $input . '" part of the query in the correct order!');
} elseif (!isset($this->requiredData[$key])) {