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

Dependencies::validate()   B

Complexity

Conditions 6
Paths 5

Size

Total Lines 20
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 6
Metric Value
cc 6
eloc 12
nc 5
nop 4
dl 0
loc 20
ccs 15
cts 15
cp 1
crap 6
rs 8.8571
1
<?php
2
3
namespace League\JsonGuard\Constraints;
4
5
use League\JsonGuard;
6
use League\JsonGuard\ErrorCode;
7
use League\JsonGuard\SubSchemaValidatorFactory;
8
use League\JsonGuard\ValidationError;
9
10
class Dependencies implements ContainerInstanceConstraint
11
{
12
    /**
13
     * {@inheritdoc}
14
     */
15 6
    public static function validate($data, $parameter, SubSchemaValidatorFactory $validatorFactory, $pointer = null)
16
    {
17 6
        $errors = [];
18 6
        foreach ($parameter as $property => $dependencies) {
19 6
            if (!is_object($data) || !property_exists($data, $property)) {
20 6
                continue;
21
            }
22
23 2
            if (is_array($dependencies)) {
24 2
                $errors = array_merge($errors, self::validatePropertyDependency($data, $dependencies, $pointer));
25 2
            } elseif (is_object($dependencies)) {
26 2
                $errors = array_merge(
27 2
                    $errors,
28 2
                    self::validateSchemaDependency($data, $dependencies, $validatorFactory, $pointer)
29 2
                );
30 2
            }
31 6
        }
32
33 6
        return $errors;
34
    }
35
36
    /**
37
     * @param object $data
38
     * @param array  $dependencies
39
     * @param string $pointer
40
     *
41
     * @return array
42
     */
43 2
    protected static function validatePropertyDependency($data, $dependencies, $pointer)
44
    {
45 2
        $errors = [];
46 2
        foreach ($dependencies as $dependency) {
47 2
            if (!in_array($dependency, array_keys(get_object_vars($data)), true)) {
48 2
                $errors[] = new ValidationError(
49 2
                    sprintf('Unmet dependency "%s"', $dependency),
50 2
                    ErrorCode::UNMET_DEPENDENCY,
51 2
                    $data,
52
                    $pointer
53 2
                );
54 2
            }
55 2
        }
56
57 2
        return $errors;
58
    }
59
60
    /**
61
     * @param object                                      $data
62
     * @param object                                      $dependencies
63
     * @param \League\JsonGuard\SubSchemaValidatorFactory $validatorFactory
64
     * @param string                                      $pointer
65
     *
66
     * @return array
67
     */
68 2
    protected static function validateSchemaDependency(
69
        $data,
70
        $dependencies,
71
        SubSchemaValidatorFactory $validatorFactory,
72
        $pointer
73
    ) {
74 2
        $validator = $validatorFactory->makeSubSchemaValidator(
75 2
            $data,
76 2
            $dependencies,
77
            $pointer
78 2
        );
79
80 2
        return $validator->errors();
81
    }
82
}
83