Completed
Pull Request — master (#18)
by SignpostMarv
02:54
created

Restriction::loadRestriction()   B

Complexity

Conditions 4
Paths 6

Size

Total Lines 47
Code Lines 33

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 37
CRAP Score 4

Importance

Changes 0
Metric Value
cc 4
eloc 33
nc 6
nop 3
dl 0
loc 47
ccs 37
cts 37
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 135
            Type::loadTypeWithCallbackOnChildNodes(
60 135
                $reader,
61 135
                $type->getSchema(),
62 135
                $node,
63 90
                $addCallback
64 45
            );
65
        }
66 135
        foreach ($node->childNodes as $childNode) {
67
            if (
68 135
                in_array(
69 135
                    $childNode->localName,
70
                    [
71 135
                        '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 90
                    true
85 45
                )
86 45
            ) {
87 135
                $restriction->addCheck(
88 135
                    $childNode->localName,
89
                    [
90 135
                        'value' => $childNode->getAttribute("value"),
91 135
                        'doc' => SchemaReader::getDocumentation($childNode)
92 45
                    ]
93 45
                );
94 45
            }
95 45
        }
96 135
    }
97
}
98