CodeFileWriter::write()   A
last analyzed

Complexity

Conditions 5
Paths 5

Size

Total Lines 45
Code Lines 31

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 30

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 31
c 1
b 0
f 0
dl 0
loc 45
ccs 0
cts 35
cp 0
rs 9.1128
cc 5
nc 5
nop 2
crap 30
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