Skip to content

Commit fd8f5c3

Browse files
DaveXo9DavidStyleCIBot
authored
Implemented contains,starts/ends_with in searchCallbacks instead of i… (#53)
* Implemented contains,starts/ends_with in searchCallbacks instead of in getSpecialOperators() * Apply fixes from StyleCI * Pipeline fix * Small fix * Apply fixes from StyleCI --------- Co-authored-by: David <david.katalinic@asseco-see.hr> Co-authored-by: StyleCI Bot <bot@styleci.io>
1 parent 531b333 commit fd8f5c3

File tree

6 files changed

+157
-1
lines changed

6 files changed

+157
-1
lines changed

Diff for: config/asseco-json-query-builder.php

+6
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,16 @@
1111
use Asseco\JsonQueryBuilder\RequestParameters\SearchParameter;
1212
use Asseco\JsonQueryBuilder\RequestParameters\SoftDeletedParameter;
1313
use Asseco\JsonQueryBuilder\SearchCallbacks\Between;
14+
use Asseco\JsonQueryBuilder\SearchCallbacks\Contains;
15+
use Asseco\JsonQueryBuilder\SearchCallbacks\EndsWith;
1416
use Asseco\JsonQueryBuilder\SearchCallbacks\Equals;
1517
use Asseco\JsonQueryBuilder\SearchCallbacks\GreaterThan;
1618
use Asseco\JsonQueryBuilder\SearchCallbacks\GreaterThanOrEqual;
1719
use Asseco\JsonQueryBuilder\SearchCallbacks\LessThan;
1820
use Asseco\JsonQueryBuilder\SearchCallbacks\LessThanOrEqual;
1921
use Asseco\JsonQueryBuilder\SearchCallbacks\NotBetween;
2022
use Asseco\JsonQueryBuilder\SearchCallbacks\NotEquals;
23+
use Asseco\JsonQueryBuilder\SearchCallbacks\StartsWith;
2124
use Asseco\JsonQueryBuilder\Types\BooleanType;
2225
use Asseco\JsonQueryBuilder\Types\GenericType;
2326

@@ -51,6 +54,9 @@
5154
Equals::class,
5255
LessThan::class,
5356
GreaterThan::class,
57+
Contains::class,
58+
StartsWith::class,
59+
EndsWith::class,
5460
],
5561

5662
/**

Diff for: src/SearchCallbacks/AbstractCallback.php

+60
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,66 @@ protected function betweenCallback(Builder $builder, string $column, Categorized
138138
$builder->{$callback}($column, [$values->and[0], $values->and[1]]);
139139
}
140140

141+
/**
142+
* @param Builder $builder
143+
* @param string $column
144+
* @param CategorizedValues $values
145+
* @param string $operator
146+
*
147+
* @throws JsonQueryBuilderException
148+
*/
149+
protected function containsCallback(Builder $builder, string $column, CategorizedValues $values, string $operator)
150+
{
151+
if ($values->andLike) {
152+
$builder->where($column, $this->getLikeOperator(), '%' . $values->andLike[0] . '%');
153+
}
154+
if ($values->and) {
155+
foreach ($values->and as $andValue) {
156+
$builder->orWhere($column, $this->getLikeOperator(), '%' . $andValue . '%');
157+
}
158+
}
159+
}
160+
161+
/**
162+
* @param Builder $builder
163+
* @param string $column
164+
* @param CategorizedValues $values
165+
* @param string $operator
166+
*
167+
* @throws JsonQueryBuilderException
168+
*/
169+
protected function endsWithCallback(Builder $builder, string $column, CategorizedValues $values, string $operator)
170+
{
171+
if ($values->andLike) {
172+
$builder->where($column, $this->getLikeOperator(), '%' . $values->andLike[0]);
173+
}
174+
if ($values->and) {
175+
foreach ($values->and as $andValue) {
176+
$builder->orWhere($column, $this->getLikeOperator(), '%' . $andValue);
177+
}
178+
}
179+
}
180+
181+
/**
182+
* @param Builder $builder
183+
* @param string $column
184+
* @param CategorizedValues $values
185+
* @param string $operator
186+
*
187+
* @throws JsonQueryBuilderException
188+
*/
189+
protected function startsWithCallback(Builder $builder, string $column, CategorizedValues $values, string $operator)
190+
{
191+
if ($values->andLike) {
192+
$builder->where($column, $this->getLikeOperator(), $values->andLike[0] . '%');
193+
}
194+
if ($values->and) {
195+
foreach ($values->and as $andValue) {
196+
$builder->orWhere($column, $this->getLikeOperator(), $andValue . '%');
197+
}
198+
}
199+
}
200+
141201
/**
142202
* Should throw exception if anything except '$values->and' is filled out.
143203
*

Diff for: src/SearchCallbacks/Contains.php

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Asseco\JsonQueryBuilder\SearchCallbacks;
6+
7+
use Asseco\JsonQueryBuilder\CategorizedValues;
8+
use Exception;
9+
use Illuminate\Database\Eloquent\Builder;
10+
11+
class Contains extends AbstractCallback
12+
{
13+
public static function operator(): string
14+
{
15+
return 'contains';
16+
}
17+
18+
/**
19+
* @param Builder $builder
20+
* @param string $column
21+
* @param CategorizedValues $values
22+
* @return void
23+
*
24+
* @throws Exception
25+
*/
26+
public function execute(Builder $builder, string $column, CategorizedValues $values): void
27+
{
28+
$this->containsCallback($builder, $column, $values, 'contains');
29+
}
30+
}

Diff for: src/SearchCallbacks/EndsWith.php

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Asseco\JsonQueryBuilder\SearchCallbacks;
6+
7+
use Asseco\JsonQueryBuilder\CategorizedValues;
8+
use Exception;
9+
use Illuminate\Database\Eloquent\Builder;
10+
11+
class EndsWith extends AbstractCallback
12+
{
13+
public static function operator(): string
14+
{
15+
return 'ends_with';
16+
}
17+
18+
/**
19+
* @param Builder $builder
20+
* @param string $column
21+
* @param CategorizedValues $values
22+
* @return void
23+
*
24+
* @throws Exception
25+
*/
26+
public function execute(Builder $builder, string $column, CategorizedValues $values): void
27+
{
28+
$this->endsWithCallback($builder, $column, $values, 'ends_with');
29+
}
30+
}

Diff for: src/SearchCallbacks/StartsWith.php

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Asseco\JsonQueryBuilder\SearchCallbacks;
6+
7+
use Asseco\JsonQueryBuilder\CategorizedValues;
8+
use Exception;
9+
use Illuminate\Database\Eloquent\Builder;
10+
11+
class StartsWith extends AbstractCallback
12+
{
13+
public static function operator(): string
14+
{
15+
return 'starts_with';
16+
}
17+
18+
/**
19+
* @param Builder $builder
20+
* @param string $column
21+
* @param CategorizedValues $values
22+
* @return void
23+
*
24+
* @throws Exception
25+
*/
26+
public function execute(Builder $builder, string $column, CategorizedValues $values): void
27+
{
28+
$this->startsWithCallback($builder, $column, $values, 'starts_with');
29+
}
30+
}

Diff for: tests/Unit/Config/OperatorsConfigTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public function returns_registered_operators()
3434
{
3535
$operatorsConfig = new OperatorsConfig();
3636

37-
$expected = ['!<>', '<=', '>=', '<>', '!=', '=', '<', '>'];
37+
$expected = ['!<>', '<=', '>=', '<>', '!=', '=', '<', '>', 'contains', 'starts_with', 'ends_with'];
3838

3939
$this->assertEquals($expected, $operatorsConfig->getOperators());
4040
}

0 commit comments

Comments
 (0)