Skip to content

Commit 835c069

Browse files
authored
[Feature] Add evaluator "not has any" (#44)
* add NotHasAnyEvaluator * update docs
1 parent fa71ffa commit 835c069

File tree

11 files changed

+265
-121
lines changed

11 files changed

+265
-121
lines changed

.mr-linter.yml

+6-6
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,20 @@ rules:
2424
when:
2525
targetBranch:
2626
equals: "master"
27-
title:
28-
notStarts: '[Docs]'
2927
labels:
30-
notHas: 'Tests'
28+
notHasAny:
29+
- 'Tests'
30+
- 'Docs'
3131

3232
- changes:
3333
- file: "CHANGELOG.md"
3434
when:
3535
targetBranch:
3636
equals: "master"
37-
title:
38-
notStarts: '[Docs]'
3937
labels:
40-
notHas: 'Tests'
38+
notHasAny:
39+
- 'Tests'
40+
- 'Docs'
4141

4242
custom:
4343
- definition: "Branch must be in kebab-case"

CHANGELOG.md

+11
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,17 @@ This file contains changelogs.
44

55
[View all Releases](https://github.com/ArtARTs36/php-merge-request-linter/releases)
66

7+
-----------------------------------------------------------------
8+
9+
## [v0.12.1 (2023-05-22)](https://github.com/ArtARTs36/php-merge-request-linter/compare/0.12.0..0.12.1)
10+
11+
### Added
12+
* Add evaluator "not has any"
13+
14+
[💾 Assets](https://github.com/ArtARTs36/php-merge-request-linter/releases/tag/0.12.1)
15+
16+
-----------------------------------------------------------------
17+
718
## [v0.12.0 (2023-05-21)](https://github.com/ArtARTs36/php-merge-request-linter/compare/0.11.1..0.12.0)
819

920
### Added

Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
FROM php:8.1
22

3-
RUN apt update && apt install -y zip
3+
RUN apt update && apt install -y git zip
44

55
COPY --from=composer:2.4.0 /usr/bin/composer /usr/bin/composer
66

Makefile

+7
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,13 @@ docs:
7272
php docs/Builder/build_config_json_schema.php
7373
php docs/Builder/build_conditions.php
7474

75+
docs-docker: docker-build
76+
docker run \
77+
--volume ./:/app \
78+
--env-file .env \
79+
--entrypoint "make" \
80+
artarts36/merge-request-linter "docs"
81+
7582
deps-check:
7683
@test -f composer-require-checker.phar || wget \
7784
https://github.com/maglnet/ComposerRequireChecker/releases/latest/download/composer-require-checker.phar -O composer-require-checker.phar && \

docs/Builder/ConfigJsonSchema/OperatorSchemaArrayGenerator.php

+4
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use ArtARTs36\MergeRequestLinter\Application\Condition\Evaluators\LinesMaxEvaluator;
2020
use ArtARTs36\MergeRequestLinter\Application\Condition\Evaluators\LteEvaluator;
2121
use ArtARTs36\MergeRequestLinter\Application\Condition\Evaluators\NotEqualsEvaluator;
22+
use ArtARTs36\MergeRequestLinter\Application\Condition\Evaluators\NotHasAnyEvaluator;
2223
use ArtARTs36\MergeRequestLinter\Application\Condition\Evaluators\NotHasEvaluator;
2324
use ArtARTs36\MergeRequestLinter\Application\Condition\Evaluators\Strings\Cases\IsCamelCaseEvaluator;
2425
use ArtARTs36\MergeRequestLinter\Application\Condition\Evaluators\Strings\Cases\IsKebabCaseEvaluator;
@@ -104,6 +105,7 @@ class OperatorSchemaArrayGenerator
104105
HasEvaluator::class,
105106
NotHasEvaluator::class,
106107
HasAnyEvaluator::class,
108+
NotHasAnyEvaluator::class,
107109
IsEmptyEvaluator::class,
108110
AllEvaluator::class,
109111
AnyEvaluator::class,
@@ -117,6 +119,7 @@ class OperatorSchemaArrayGenerator
117119
HasEvaluator::class,
118120
NotHasEvaluator::class,
119121
HasAnyEvaluator::class,
122+
NotHasAnyEvaluator::class,
120123
IsEmptyEvaluator::class,
121124
AllEvaluator::class,
122125
AnyEvaluator::class,
@@ -129,6 +132,7 @@ class OperatorSchemaArrayGenerator
129132
CountEqualsAnyEvaluator::class,
130133
HasEvaluator::class,
131134
NotHasEvaluator::class,
135+
NotHasAnyEvaluator::class,
132136
HasAnyEvaluator::class,
133137
IsEmptyEvaluator::class,
134138
AllEvaluator::class,

docs/conditions.md

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Currently is available that operators:
2525
| notHas | Check if an array not contains some value. | string / integer / number / boolean |
2626
| equalsAny | Check if the field is equal to one of the values. | array of strings |
2727
| hasAny | Check if an array contains some value of list. | array of strings |
28+
| notHasAny | Check if an array not contains values of list. | array of strings |
2829
| countEquals | Check count equals. | integer |
2930
| countNotEquals | Check count not equals. | integer |
3031
| countEqualsAny | Check count equals. | array of integers |

mr-linter-config-schema.json

+162-113
Large diffs are not rendered by default.

src/Application/Condition/Evaluators/DefaultEvaluators.php

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ final class DefaultEvaluators
6060
NotHasEvaluator::NAME => NotHasEvaluator::class,
6161
EqualsAnyEvaluator::NAME => EqualsAnyEvaluator::class,
6262
HasAnyEvaluator::NAME => HasAnyEvaluator::class,
63+
NotHasAnyEvaluator::NAME => NotHasAnyEvaluator::class,
6364
CountEqualsEvaluator::NAME => CountEqualsEvaluator::class,
6465
CountNotEqualsEvaluator::NAME => CountNotEqualsEvaluator::class,
6566
CountEqualsAnyEvaluator::NAME => CountEqualsAnyEvaluator::class,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
namespace ArtARTs36\MergeRequestLinter\Application\Condition\Evaluators;
4+
5+
use ArtARTs36\MergeRequestLinter\Domain\Condition\EvaluatingSubject;
6+
use ArtARTs36\MergeRequestLinter\Shared\Attributes\Generic;
7+
use ArtARTs36\MergeRequestLinter\Shared\Contracts\DataStructure\Collection;
8+
9+
/**
10+
* Check if an array not contains values of list.
11+
*/
12+
final class NotHasAnyEvaluator extends Evaluator
13+
{
14+
public const NAME = 'notHasAny';
15+
16+
/**
17+
* @param array<scalar> $value
18+
*/
19+
public function __construct(
20+
#[Generic(Generic::OF_STRING)]
21+
private readonly array $value,
22+
) {
23+
//
24+
}
25+
26+
protected function doEvaluate(EvaluatingSubject $subject): bool
27+
{
28+
return ! $subject
29+
->interface(Collection::class)
30+
->containsAny($this->value);
31+
}
32+
}

src/Version.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*/
99
final class Version
1010
{
11-
public const VERSION = '0.12.0';
11+
public const VERSION = '0.12.1';
1212

1313
private function __construct()
1414
{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
namespace ArtARTs36\MergeRequestLinter\Tests\Unit\Application\Condition\Evaluators;
4+
5+
use ArtARTs36\MergeRequestLinter\Application\Condition\Evaluators\NotHasAnyEvaluator;
6+
use ArtARTs36\MergeRequestLinter\Tests\Mocks\MockEvaluatingSubject;
7+
use ArtARTs36\MergeRequestLinter\Tests\TestCase;
8+
9+
final class NotHasAnyEvaluatorTest extends TestCase
10+
{
11+
public function providerForTestEvaluate(): array
12+
{
13+
return [
14+
'true' => [
15+
[1, 2, 3],
16+
[4],
17+
true,
18+
],
19+
'false' => [
20+
[1, 2, 3],
21+
[1],
22+
false,
23+
],
24+
];
25+
}
26+
27+
/**
28+
* @covers \ArtARTs36\MergeRequestLinter\Application\Condition\Evaluators\NotHasAnyEvaluator::evaluate
29+
* @covers \ArtARTs36\MergeRequestLinter\Application\Condition\Evaluators\NotHasAnyEvaluator::doEvaluate
30+
* @covers \ArtARTs36\MergeRequestLinter\Application\Condition\Evaluators\NotHasAnyEvaluator::__construct
31+
* @dataProvider providerForTestEvaluate
32+
*/
33+
public function testEvaluate(array $collection, array $evaluatorValue, bool $expected): void
34+
{
35+
$evaluator = new NotHasAnyEvaluator($evaluatorValue);
36+
37+
self::assertEquals($expected, $evaluator->evaluate(new MockEvaluatingSubject($collection)));
38+
}
39+
}

0 commit comments

Comments
 (0)