Passed
Push — static-analysis ( 5a0c71...7ccf34 )
by SignpostMarv
03:20
created

Restriction::loadRestriction()   B

Complexity

Conditions 4
Paths 6

Size

Total Lines 47
Code Lines 33

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 35
CRAP Score 4

Importance

Changes 0
Metric Value
cc 4
eloc 33
nc 6
nop 3
dl 0
loc 47
ccs 35
cts 35
cp 1
crap 4
rs 8.6845
c 0
b 0
f 0
1
<?php
2
namespace GoetasWebservices\XML\XSDReader\Schema\Inheritance;
3
4
use DOMElement;
5
use GoetasWebservices\XML\XSDReader\Schema\Type\Type;
6
use GoetasWebservices\XML\XSDReader\SchemaReader;
7
8
class Restriction extends Base
9
{
10
    /**
11
    * @var mixed[][]
12
    */
13
    protected $checks = array();
14
15
    /**
16
    * @param string $type
17
    * @param mixed[] $value
18
    *
19
    * @return $this
20
    */
21 135
    public function addCheck($type, $value)
22
    {
23 135
        $this->checks[$type][] = $value;
24 135
        return $this;
25
    }
26
27
    /**
28
    * @return mixed[][]
29
    */
30 30
    public function getChecks()
31
    {
32 30
        return $this->checks;
33
    }
34
35
    /**
36
    * @param string $type
37
    *
38
    * @return mixed[]
39
    */
40
    public function getChecksByType($type)
41
    {
42
        return isset($this->checks[$type])?$this->checks[$type]:array();
43
    }
44
45 135
    public static function loadRestriction(
46
        SchemaReader $reader,
47
        Type $type,
48
        DOMElement $node
49
    ) {
50 135
        $restriction = new Restriction();
51 135
        $type->setRestriction($restriction);
52 135
        if ($node->hasAttribute("base")) {
53 135
            $reader->findAndSetSomeBase($type, $restriction, $node);
54 45
        } else {
55 135
            $addCallback = function (Type $restType) use ($restriction) {
56 135
                $restriction->setBase($restType);
57 135
            };
58
59 45
            Type::loadTypeWithCallbackOnChildNodes(
60 45
                $reader,
61 45
                $type->getSchema(),
62 45
                $node,
63
                $addCallback
64 45
            );
65
        }
66 45
        foreach ($node->childNodes as $childNode) {
67
            if (
68 45
                in_array(
69 45
                    $childNode->localName,
70
                    [
71 45
                        'enumeration',
72 45
                        'pattern',
73 45
                        'length',
74 45
                        'minLength',
75 45
                        'maxLength',
76 45
                        'minInclusive',
77 45
                        'maxInclusive',
78 45
                        'minExclusive',
79 45
                        'maxExclusive',
80 45
                        'fractionDigits',
81 45
                        'totalDigits',
82
                        'whiteSpace'
83 45
                    ],
84
                    true
85 45
                )
86 45
            ) {
87 45
                $restriction->addCheck(
88 45
                    $childNode->localName,
89
                    [
90 45
                        'value' => $childNode->getAttribute("value"),
91 45
                        'doc' => SchemaReader::getDocumentation($childNode)
92 45
                    ]
93 45
                );
94 45
            }
95 45
        }
96 45
    }
97
}
98