Skip to content

Commit 4ef4b38

Browse files
committed
Replace Filter::equal and Filter::unequal with Filter::similar and Filter::unlike correspondingly
1 parent f4080ec commit 4ef4b38

File tree

6 files changed

+75
-6
lines changed

6 files changed

+75
-6
lines changed

src/Control/SearchBar/ValidatedOperator.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@ class ValidatedOperator extends ValidatedTerm
2121
public static function fromFilterCondition(Filter\Condition $condition)
2222
{
2323
switch (true) {
24+
case $condition instanceof Filter\Unlike:
2425
case $condition instanceof Filter\Unequal:
2526
$operator = '!=';
2627
break;
28+
case $condition instanceof Filter\Similar:
2729
case $condition instanceof Filter\Equal:
2830
$operator = '=';
2931
break;

src/Control/SearchEditor.php

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -173,19 +173,38 @@ protected function applyChanges(Filter\Rule $rule, array &$values, array $path =
173173

174174
$newOperator = $this->popKey($values, $identifier . '-operator');
175175
if ($newOperator !== null && QueryString::getRuleSymbol($rule) !== $newOperator) {
176+
$value = $rule->getValue();
177+
$column = $rule->getColumn();
176178
switch ($newOperator) {
177179
case '=':
178-
return Filter::equal($rule->getColumn(), $rule->getValue());
180+
if (is_string($value) && strpos($value, '*') !== false) {
181+
return Filter::similar($column, $value);
182+
}
183+
184+
return Filter::equal($column, $value);
179185
case '!=':
180-
return Filter::unequal($rule->getColumn(), $rule->getValue());
186+
if (is_string($value) && strpos($value, '*') !== false) {
187+
return Filter::unlike($column, $value);
188+
}
189+
190+
return Filter::unequal($column, $value);
181191
case '>':
182-
return Filter::greaterThan($rule->getColumn(), $rule->getValue());
192+
return Filter::greaterThan($column, $value);
183193
case '>=':
184-
return Filter::greaterThanOrEqual($rule->getColumn(), $rule->getValue());
194+
return Filter::greaterThanOrEqual($column, $value);
185195
case '<':
186-
return Filter::lessThan($rule->getColumn(), $rule->getValue());
196+
return Filter::lessThan($column, $value);
187197
case '<=':
188-
return Filter::lessThanOrEqual($rule->getColumn(), $rule->getValue());
198+
return Filter::lessThanOrEqual($column, $value);
199+
}
200+
}
201+
202+
$value = $rule->getValue();
203+
if (is_string($value) && strpos($value, '*') !== false) {
204+
if (QueryString::getRuleSymbol($rule) === '=') {
205+
return Filter::similar($rule->getColumn(), $value);
206+
} elseif (QueryString::getRuleSymbol($rule) === '!=') {
207+
return Filter::unlike($rule->getColumn(), $value);
189208
}
190209
}
191210
} else {

src/Filter/Parser.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,8 +516,16 @@ protected function createCondition($column, $operator, $value)
516516

517517
switch ($operator) {
518518
case '=':
519+
if (is_string($value) && strpos($value, "*") !== false) {
520+
return Filter::similar($column, $value);
521+
}
522+
519523
return Filter::equal($column, $value);
520524
case '!=':
525+
if (is_string($value) && strpos($value, '*') !== false) {
526+
return Filter::unlike($column, $value);
527+
}
528+
521529
return Filter::unequal($column, $value);
522530
case '>':
523531
return Filter::greaterThan($column, $value);

src/Filter/QueryString.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,10 @@ public static function getRuleSymbol(Filter\Rule $rule)
6767
{
6868
switch (true) {
6969
case $rule instanceof Filter\Unequal:
70+
case $rule instanceof Filter\Unlike:
7071
return '!=';
7172
case $rule instanceof Filter\Equal:
73+
case $rule instanceof Filter\Similar:
7274
return '=';
7375
case $rule instanceof Filter\GreaterThan:
7476
return '>';

src/Filter/Renderer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,9 +152,11 @@ protected function renderCondition(Filter\Condition $condition)
152152

153153
switch (true) {
154154
case $condition instanceof Filter\Unequal:
155+
case $condition instanceof Filter\Unlike:
155156
$this->string .= '!=';
156157
break;
157158
case $condition instanceof Filter\Equal:
159+
case $condition instanceof Filter\Similar:
158160
$this->string .= '=';
159161
break;
160162
case $condition instanceof Filter\GreaterThan:

tests/FilterTest.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,25 @@ public function testParserIdentifiesSingleConditions()
2323
);
2424
}
2525

26+
public function testParserIdentifiesWildCardCharacters()
27+
{
28+
$expectedSimilar = QueryString::render(Filter::similar('foo', 'ba*'));
29+
30+
$this->assertEquals(
31+
$expectedSimilar,
32+
QueryString::render(QueryString::parse($expectedSimilar)),
33+
"Filter\Parser doesn't parse conditions with wildcard character correctly"
34+
);
35+
36+
$expectedUnlike = QueryString::render(Filter::unlike('foo', 'ba*'));
37+
38+
$this->assertEquals(
39+
$expectedUnlike,
40+
QueryString::render(QueryString::parse($expectedUnlike)),
41+
"Filter\Parser doesn't parse conditions with wildcard character correctly"
42+
);
43+
}
44+
2645
public function testParserIdentifiesBooleanConditions()
2746
{
2847
$expectedTrue = QueryString::render(Filter::equal('active', true));
@@ -56,13 +75,27 @@ public function testParserIdentifiesRelationalOperators()
5675
"Filter\Parser doesn't parse = comparisons correctly"
5776
);
5877

78+
$expectedSimilar = QueryString::render(Filter::similar('foo', 'ba*'));
79+
$this->assertEquals(
80+
$expectedSimilar,
81+
QueryString::render(QueryString::parse($expectedSimilar)),
82+
"Filter\Parser doesn't parse != comparisons correctly for wildcard characters"
83+
);
84+
5985
$expectedUnequal = QueryString::render(Filter::unequal('foo', 'bar'));
6086
$this->assertEquals(
6187
$expectedUnequal,
6288
QueryString::render(QueryString::parse($expectedUnequal)),
6389
"Filter\Parser doesn't parse != comparisons correctly"
6490
);
6591

92+
$expectedUnlike = QueryString::render(Filter::unlike('foo', 'ba*'));
93+
$this->assertEquals(
94+
$expectedUnlike,
95+
QueryString::render(QueryString::parse($expectedUnlike)),
96+
"Filter\Parser doesn't parse != comparisons correctly for wildcard characters"
97+
);
98+
6699
$expectedGreaterThan = QueryString::render(Filter::greaterThan('length', 3));
67100
$this->assertEquals(
68101
$expectedGreaterThan,
@@ -340,6 +373,9 @@ public function testParserIdentifiesTheHolyGrail()
340373
/* testParserIdentifiesBooleanConditions */
341374
Filter::equal('active', true),
342375
Filter::equal('active', false),
376+
/* testParserIdentifiesWildCardCharacters */
377+
Filter::similar('foo', 'ba*'),
378+
Filter::unlike('foo', 'ba*'),
343379
/* testParserIdentifiesRelationalOperators */
344380
Filter::unequal('foo', 'bar'),
345381
Filter::greaterThan('length', 3),

0 commit comments

Comments
 (0)