Skip to content

Commit f2a0147

Browse files
committed
ENHANCE: filter builder to allow combinate several filters and insure efficiency when query parameters are generated
1 parent 390c195 commit f2a0147

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

src/Filter/FilterBuilder.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,17 @@ class FilterBuilder implements FilterBuilderInterface
1414
/** @var FilterInterface */
1515
protected $filter;
1616

17-
public function __construct(FilterInterface $filter)
17+
public function __construct(FilterInterface ...$filters)
1818
{
19-
$this->filter = $filter;
19+
$this->filters = $filters;
2020
}
2121

2222
public function __invoke(): array
2323
{
24-
return $this->filter->getCriteria() ?? [];
24+
$criteria = [];
25+
foreach ($this->filters as $filter) {
26+
$criteria = array_merge($criteria, $filter->getCriteria());
27+
}
28+
return $criteria;
2529
}
2630
}

src/Filter/FilterBuilderInterface.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
interface FilterBuilderInterface
1515
{
16-
public function __construct(FilterInterface $filter);
16+
public function __construct(FilterInterface ...$filters);
1717

1818
public function __invoke(): array;
1919
}

test/Filter.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
namespace Diglin\Sylius\ApiClient\Test;
1111

12+
use Diglin\Sylius\ApiClient\Filter\FilterBuilder;
13+
use Diglin\Sylius\ApiClient\Routing\UriGenerator;
1214
use PHPUnit\Framework\TestCase;
1315

1416
class Filter extends TestCase
@@ -22,4 +24,15 @@ public function testFilter()
2224
$this->assertArrayHasKey('criteria[date][from][date]', $criteria);
2325
$this->assertEquals('2021-02-04', $criteria['criteria[date][from][date]']);
2426
}
27+
28+
public function testFilterBuilder()
29+
{
30+
$builder = (new FilterBuilder(
31+
new \Diglin\Sylius\ApiClient\Filter\Filter('channel', 1),
32+
new \Diglin\Sylius\ApiClient\Filter\Filter(['date'=> ['from' => ['date' => '2021-02-04']]])
33+
));
34+
35+
$criteria = $builder();
36+
$this->assertCount(2, $criteria);
37+
}
2538
}

0 commit comments

Comments
 (0)