JsonRpcParamsValidator::validate()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 21
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 3

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 12
c 1
b 0
f 0
dl 0
loc 21
ccs 15
cts 15
cp 1
rs 9.8666
cc 3
nc 3
nop 2
crap 3
1
<?php
2
namespace Yoanm\JsonRpcParamsSymfonyValidator\Infra;
3
4
use Symfony\Component\Validator\ConstraintViolationInterface;
5
use Symfony\Component\Validator\Validator\ValidatorInterface;
6
use Yoanm\JsonRpcParamsSymfonyValidator\Domain\MethodWithValidatedParamsInterface;
7
use Yoanm\JsonRpcServer\Domain\JsonRpcMethodInterface;
8
use Yoanm\JsonRpcServer\Domain\JsonRpcMethodParamsValidatorInterface;
9
use Yoanm\JsonRpcServer\Domain\Model\JsonRpcRequest;
10
11
/**
12
 * Class JsonRpcParamsValidator
13
 */
14
class JsonRpcParamsValidator implements JsonRpcMethodParamsValidatorInterface
15
{
16
    /** @var ValidatorInterface */
17
    private $validator;
18
19
    /**
20
     * @param ValidatorInterface $validator
21
     */
22 9
    public function __construct(ValidatorInterface $validator)
23
    {
24 9
        $this->validator = $validator;
25
    }
26
27 9
    public function validate(JsonRpcRequest $jsonRpcRequest, JsonRpcMethodInterface $method) : array
28
    {
29 9
        $violationList = [];
30 9
        if (!$method instanceof MethodWithValidatedParamsInterface) {
31 3
            return $violationList;
32
        }
33 6
        $sfViolationList = $this->validator->validate(
34 6
            $jsonRpcRequest->getParamList(),
35 6
            $method->getParamsConstraint()
36 6
        );
37
38 6
        foreach ($sfViolationList as $violation) {
39
            /** @var ConstraintViolationInterface $violation */
40 3
            $violationList[] = [
41 3
                'path' => $violation->getPropertyPath(),
42 3
                'message' => $violation->getMessage(),
43 3
                'code' => $violation->getCode(),
44 3
            ];
45
        }
46
47 6
        return $violationList;
48
    }
49
}
50