Passed
Pull Request — master (#69)
by Dave
02:32
created

BaseLineAnalysisResults   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 24
dl 0
loc 76
rs 10
c 1
b 0
f 0
wmc 10

6 Methods

Rating   Name   Duplication   Size   Complexity  
A getCount() 0 3 1
A __construct() 0 3 1
A asArray() 0 8 2
A getBaseLineAnalysisResults() 0 3 1
A fromAnalysisResults() 0 8 2
A fromArray() 0 18 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace DaveLiddament\StaticAnalysisResultsBaseliner\Domain\BaseLiner;
6
7
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\AnalysisResults;
8
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Utils\ArrayParseException;
9
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Utils\ArrayUtils;
10
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Utils\ParseAtLocationException;
11
12
class BaseLineAnalysisResults
13
{
14
    /**
15
     * @var BaseLineAnalysisResult[]
16
     */
17
    private $baseLineAnalysisResults;
18
19
    /**
20
     * @psalm-param array<mixed> $array
21
     *
22
     * @throws ParseAtLocationException
23
     */
24
    public static function fromArray(array $array): self
25
    {
26
        $baseLineAnalysisResults = [];
27
28
        $resultCount = 0;
29
        /** @psalm-suppress MixedAssignment */
30
        foreach ($array as $entry) {
31
            ++$resultCount;
32
            try {
33
                ArrayUtils::assertArray($entry);
34
                $baseLineAnalysisResult = BaseLineAnalysisResult::fromArray($entry);
35
                $baseLineAnalysisResults[] = $baseLineAnalysisResult;
36
            } catch (ArrayParseException $e) {
37
                throw ParseAtLocationException::issueAtPosition($e, $resultCount);
38
            }
39
        }
40
41
        return new self($baseLineAnalysisResults);
42
    }
43
44
    public static function fromAnalysisResults(AnalysisResults $analysisResults): self
45
    {
46
        $baseLineAnalysisResults = [];
47
        foreach ($analysisResults->getAnalysisResults() as $analysisResult) {
48
            $baseLineAnalysisResults[] = $analysisResult->asBaseLineAnalysisResult();
49
        }
50
51
        return new self($baseLineAnalysisResults);
52
    }
53
54
    /**
55
     * @param BaseLineAnalysisResult[] $baseLineAnalysisResults
56
     */
57
    private function __construct(array $baseLineAnalysisResults)
58
    {
59
        $this->baseLineAnalysisResults = $baseLineAnalysisResults;
60
    }
61
62
    public function getCount(): int
63
    {
64
        return count($this->baseLineAnalysisResults);
65
    }
66
67
    /**
68
     * @return BaseLineAnalysisResult[]
69
     */
70
    public function getBaseLineAnalysisResults(): array
71
    {
72
        return $this->baseLineAnalysisResults;
73
    }
74
75
    /**
76
     * Return as an array of arrays (ready for storing in a file).
77
     *
78
     * @psalm-return array<int, array<string,int|string>>
79
     */
80
    public function asArray(): array
81
    {
82
        $array = [];
83
        foreach ($this->getBaseLineAnalysisResults() as $baseLineAnalysisResult) {
84
            $array[] = $baseLineAnalysisResult->asArray();
85
        }
86
87
        return $array;
88
    }
89
}
90