Completed
Push — master ( 5927eb...1e13db )
by
unknown
04:04
created

OneOf::validate()   B

Complexity

Conditions 5
Paths 7

Size

Total Lines 25
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 18
CRAP Score 5.0035
Metric Value
cc 5
eloc 16
nc 7
nop 4
dl 0
loc 25
ccs 18
cts 19
cp 0.9474
crap 5.0035
rs 8.439
1
<?php
2
3
namespace League\JsonGuard\Constraints;
4
5
use League\JsonGuard\ErrorCode;
6
use League\JsonGuard\SubSchemaValidatorFactory;
7
use League\JsonGuard\ValidationError;
8
9
class OneOf implements ContainerInstanceConstraint
10
{
11
    /**
12
     * {@inheritdoc}
13
     */
14 2
    public static function validate($data, $parameter, SubSchemaValidatorFactory $validatorFactory, $pointer = null)
15
    {
16 2
        if (!is_array($parameter)) {
17
            return null;
18
        }
19
20 2
        $passed = 0;
21 2
        foreach ($parameter as $schema) {
22 2
            $validator = $validatorFactory->makeSubSchemaValidator($data, $schema, $pointer);
23 2
            if ($validator->passes()) {
24 2
                $passed++;
25 2
            }
26 2
        }
27 2
        if ($passed !== 1) {
28 2
            return new ValidationError(
29 2
                'Failed matching exactly one of the provided schemas.',
30 2
                ErrorCode::ONE_OF_SCHEMA,
31 2
                $data,
32 2
                $pointer,
33 2
                ['one_of' => $parameter]
34 2
            );
35
        }
36
37 2
        return null;
38
    }
39
}
40