CodeFileWriter   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 55
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 5
eloc 32
c 1
b 0
f 0
dl 0
loc 55
ccs 0
cts 35
cp 0
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
A write() 0 45 5
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Yii\Gii\Component\CodeFile;
6
7
use Exception;
8
9
final class CodeFileWriter
10
{
11
    /**
12
     * Saves the generated code into files.
13
     *
14
     * @param CodeFile[] $files the code files to be saved
15
     * @param string[] $answers
16
     *
17
     * @return CodeFileWriteResult whether files are successfully saved without any error.
18
     */
19
    public function write(array $files, array $answers): CodeFileWriteResult
20
    {
21
        $result = new CodeFileWriteResult();
22
23
        foreach ($files as $file) {
24
            $fileId = $file->getId();
25
            $operation = $answers[$fileId];
26
27
            switch (CodeFileWriteOperationEnum::tryFrom($operation)) {
28
                case CodeFileWriteOperationEnum::SKIP:
29
                    $result->addResult($file, CodeFileWriteStatusEnum::SKIPPED);
30
                    break;
31
                case CodeFileWriteOperationEnum::SAVE:
32
                    try {
33
                        $status = $file->save();
34
                    } catch (Exception $e) {
35
                        $result->addError(
36
                            $file,
37
                            $e->getMessage()
38
                        );
39
                        break;
40
                    }
41
42
                    $result->addResult($file, $status);
43
                    break;
44
                default:
45
                    $result->addError(
46
                        $file,
47
                        sprintf(
48
                            'Unknown operation "%s". Only the following operations are available: %s',
49
                            $operation,
50
                            implode(
51
                                ', ',
52
                                array_map(
53
                                    fn (CodeFileWriteOperationEnum $value) => $value->value,
54
                                    CodeFileWriteOperationEnum::cases()
55
                                )
56
                            ),
57
                        ),
58
                    );
59
                    break;
60
            }
61
        }
62
63
        return $result;
64
    }
65
}
66