Completed
Push — static-analysis ( ac129b...b6e8eb )
by SignpostMarv
02:57
created

Restriction   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 97
Duplicated Lines 0 %

Test Coverage

Coverage 96.23%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 97
ccs 51
cts 53
cp 0.9623
rs 10
c 1
b 0
f 0
wmc 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A addCheck() 0 4 1
A getChecksByType() 0 3 2
A getChecks() 0 3 1
B maybeLoadRestrictionOnChildNode() 0 29 2
B loadRestriction() 0 26 4
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 135
            if ($childNode instanceof DOMElement) {
68 135
                static::maybeLoadRestrictionOnChildNode(
69 135
                    $restriction,
70 90
                    $childNode
71 45
                );
72 45
            }
73 45
        }
74 135
    }
75
76 135
    protected static function maybeLoadRestrictionOnChildNode(
77
        Restriction $restriction,
78
        DOMElement $childNode
79
    ) {
80
            if (
81 135
                in_array(
82 135
                    $childNode->localName,
83
                    [
84 135
                        'enumeration',
85 45
                        'pattern',
86 45
                        'length',
87 45
                        'minLength',
88 45
                        'maxLength',
89 45
                        'minInclusive',
90 45
                        'maxInclusive',
91 45
                        'minExclusive',
92 45
                        'maxExclusive',
93 45
                        'fractionDigits',
94 45
                        'totalDigits',
95
                        'whiteSpace'
96 45
                    ],
97 90
                    true
98 45
                )
99 45
            ) {
100 135
                $restriction->addCheck(
101 135
                    $childNode->localName,
102
                    [
103 135
                        'value' => $childNode->getAttribute("value"),
104 135
                        'doc' => SchemaReader::getDocumentation($childNode)
105 45
                    ]
106 45
                );
107 45
            }
108 135
    }
109
}
110