Test Failed
Pull Request — master (#58)
by Alexander
05:19 queued 02:39
created

CodeFileWriter::write()   B

Complexity

Conditions 6
Paths 7

Size

Total Lines 46
Code Lines 32

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 32
c 0
b 0
f 0
dl 0
loc 46
rs 8.7857
cc 6
nc 7
nop 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Yii\Gii;
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::OP_SKIP:
29
                    $result->addResult($file, CodeFileWriteStatusEnum::SKIPPED);
30
                    break;
31
                case CodeFileWriteOperationEnum::OP_CREATE:
32
                case CodeFileWriteOperationEnum::OP_OVERWRITE:
33
                    try {
34
                        $status = $file->save();
35
                    } catch (Exception $e) {
36
                        $result->addError(
37
                            $file,
38
                            $e->getMessage()
39
                        );
40
                        break;
41
                    }
42
43
                    $result->addResult($file, $status);
44
                    break;
45
                default:
46
                    $result->addError(
47
                        $file,
48
                        sprintf(
49
                            'Unknown operation "%s". Only the following operations are available: %s',
50
                            $operation,
51
                            implode(
52
                                ', ',
53
                                array_map(
54
                                    fn (CodeFileWriteOperationEnum $value) => $value->value,
55
                                    CodeFileWriteOperationEnum::cases()
56
                                )
57
                            ),
58
                        ),
59
                    );
60
                    break;
61
            }
62
        }
63
64
        return $result;
65
    }
66
}
67