Completed
Push — master ( e98ae3...0e888f )
by Matt
02:50
created

OneOf   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 32
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
dl 0
loc 32
ccs 19
cts 19
cp 1
rs 10
c 0
b 0
f 0
wmc 4
lcom 0
cbo 4

1 Method

Rating   Name   Duplication   Size   Complexity  
B validate() 0 24 4
1
<?php
2
3
namespace League\JsonGuard\Constraints;
4
5
use League\JsonGuard\Assert;
6
use League\JsonGuard\SubSchemaValidatorFactory;
7
use League\JsonGuard\ValidationError;
8
9
class OneOf implements ContainerInstanceConstraint
10
{
11
    const KEYWORD = 'oneOf';
12
13
    /**
14
     * {@inheritdoc}
15
     */
16 8
    public static function validate($data, $parameter, SubSchemaValidatorFactory $validatorFactory, $pointer = null)
17
    {
18 8
        Assert::type($parameter, 'array', self::KEYWORD, $pointer);
19 6
        Assert::notEmpty($parameter, self::KEYWORD, $pointer);
20
21 4
        $passed = 0;
22 4
        foreach ($parameter as $schema) {
23 4
            $validator = $validatorFactory->makeSubSchemaValidator($data, $schema, $pointer);
24 4
            if ($validator->passes()) {
25 4
                $passed++;
26 4
            }
27 4
        }
28 4
        if ($passed !== 1) {
29 4
            return new ValidationError(
30 4
                'Failed matching exactly one of the provided schemas.',
31 4
                self::KEYWORD,
32 4
                $data,
33 4
                $pointer,
34 4
                ['one_of' => $parameter]
35 4
            );
36
        }
37
38 4
        return null;
39
    }
40
}
41