Parser::ensureError()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 3

Importance

Changes 0
Metric Value
cc 3
eloc 4
nc 3
nop 1
dl 0
loc 7
ccs 5
cts 5
cp 1
crap 3
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
4
namespace cwreden\php7ccAnalyser;
5
6
7
class Parser
8
{
9
    private const KEY_SUMMARY = 'summary';
10
11
    /**
12
     * @param ScanResultFile $scanResultFile
13
     * @return Scan
14
     * @throws ScanResultParsingException
15
     */
16 11
    public function parse(ScanResultFile $scanResultFile)
17
    {
18 11
        $result = $scanResultFile->getResult();
19
20 11
        $this->ensureResultData($result);
21
22 8
        $summary = new Summary(
23 8
            $result[self::KEY_SUMMARY]['checkedFiles']
24
        );
25
26 8
        $scannedFileCollection = new ScannedSourceFileCollection();
27 8
        foreach ($result['files'] as $file) {
28 8
            $this->ensureFile($file);
29
30 5
            $warningIssueCollection = new IssueCollection();
31 5
            $errorIssueCollection = new IssueCollection();
32
33 5
            foreach ($file['warnings'] as $warning) {
34 3
                $this->ensureWarning($warning);
35 1
                $warningIssueCollection->add(new Issue((int)$warning['line'], $warning['text']));
36
            }
37
38 3
            foreach ($file['errors'] as $error) {
39 3
                $this->ensureError($error);
40 1
                $errorIssueCollection->add(new Issue((int)$error['line'], $error['text']));
41
            }
42
43 1
            $scannedFileCollection->add(new ScannedSourceFile(
44 1
                $file['name'],
45 1
                $warningIssueCollection,
46 1
                $errorIssueCollection
47
            ));
48
        }
49
50 1
        return new Scan($summary, $scannedFileCollection);
51
    }
52
53
    /**
54
     * @param $result
55
     * @throws ScanResultParsingException
56
     */
57 11
    private function ensureResultData($result)
58
    {
59 11
        if (!array_key_exists(self::KEY_SUMMARY, $result)) {
60 1
            throw new ScanResultParsingException('Missing attribute "summary".');
61
        }
62 10
        if (!array_key_exists('checkedFiles', $result[self::KEY_SUMMARY])) {
63 1
            throw new ScanResultParsingException('Missing attribute "checkedFiles" under "summary".');
64
        }
65 9
        if (!array_key_exists('files', $result)) {
66 1
            throw new ScanResultParsingException('Missing attribute "files".');
67
        }
68 8
    }
69
70
    /**
71
     * @param $file
72
     * @throws ScanResultParsingException
73
     */
74 8
    private function ensureFile($file)
75
    {
76 8
        if (!array_key_exists('name', $file)) {
77 1
            throw new ScanResultParsingException('Missing attribute "name" at files.');
78
        }
79 7
        if (!array_key_exists('warnings', $file)) {
80 1
            throw new ScanResultParsingException(sprintf(
81 1
                'Missing attribute "warnings" at file %s.',
82 1
                $file['name']
83
            ));
84
        }
85 6
        if (!array_key_exists('errors', $file)) {
86 1
            throw new ScanResultParsingException(sprintf(
87 1
                'Missing attribute "errors" at file %s.',
88 1
                $file['name']
89
            ));
90
        }
91 5
    }
92
93
    /**
94
     * @param $warning
95
     * @throws ScanResultParsingException
96
     */
97 3
    private function ensureWarning($warning)
98
    {
99 3
        if (!array_key_exists('line', $warning)) {
100 1
            throw new ScanResultParsingException('Missing attribute "line" at warning.');
101
        }
102 2
        if (!array_key_exists('text', $warning)) {
103 1
            throw new ScanResultParsingException('Missing attribute "text" at warning.');
104
        }
105 1
    }
106
107
    /**
108
     * @param $error
109
     * @throws ScanResultParsingException
110
     */
111 3
    private function ensureError($error)
112
    {
113 3
        if (!array_key_exists('line', $error)) {
114 1
            throw new ScanResultParsingException('Missing attribute "line" at error.');
115
        }
116 2
        if (!array_key_exists('text', $error)) {
117 1
            throw new ScanResultParsingException('Missing attribute "text" at error.');
118
        }
119
    }
120
}