InfoLogger   A
last analyzed

Complexity

Total Complexity 19

Size/Duplication

Total Lines 91
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 35
dl 0
loc 91
rs 10
c 0
b 0
f 0
wmc 19

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A resolveReferenceInfo() 0 11 5
A resolveLabelLines() 0 17 3
A outputPatchSource() 0 19 6
A outputPatchInfo() 0 9 1
A outputPatchDescription() 0 10 3
1
<?php
2
/**
3
 * Copyright © Vaimo Group. All rights reserved.
4
 * See LICENSE_VAIMO.txt for license details.
5
 */
6
namespace Vaimo\ComposerPatches\Package\PatchApplier;
7
8
use Vaimo\ComposerPatches\Patch\Definition as Patch;
9
10
class InfoLogger
11
{
12
    /**
13
     * @var \Vaimo\ComposerPatches\Logger
14
     */
15
    private $logger;
16
17
    /**
18
     * @param \Vaimo\ComposerPatches\Logger $logger
19
     */
20
    public function __construct(
21
        \Vaimo\ComposerPatches\Logger $logger
22
    ) {
23
        $this->logger = $logger;
24
    }
25
26
    public function outputPatchSource(array $patch)
27
    {
28
        $label = '';
29
30
        if (isset($patch[Patch::STATUS_LABEL]) && $patch[Patch::STATUS_LABEL]) {
31
            $label = $patch[Patch::STATUS_LABEL];
32
        }
33
34
        $label = $label ? sprintf(' [<info>%s</info>]', $label) : '';
35
36
        $messageTemplate = '%s%s';
37
        $args = array($patch[Patch::SOURCE], $label);
38
39
        if ($patch[Patch::OWNER] && $patch[Patch::OWNER] !== Patch::OWNER_UNKNOWN) {
40
            $messageTemplate = '<info>%s</info>: ' . $messageTemplate;
41
            array_unshift($args, $patch[Patch::OWNER]);
42
        }
43
44
        $this->logger->writeRaw($messageTemplate, $args);
45
    }
46
47
    public function outputPatchDescription(array $patch)
48
    {
49
        if (!trim($patch[Patch::LABEL])) {
50
            return;
51
        }
52
53
        $labelLines = $this->resolveLabelLines($patch);
54
55
        foreach ($labelLines as $line) {
56
            $this->logger->write('comment', $line);
57
        }
58
    }
59
60
    public function outputPatchInfo(array $patch)
61
    {
62
        $this->outputPatchSource($patch);
63
64
        $loggerIndentation = $this->logger->push();
65
66
        $this->outputPatchDescription($patch);
67
68
        $this->logger->reset($loggerIndentation);
69
    }
70
71
    private function resolveLabelLines(array $patch)
72
    {
73
        $lines = explode(PHP_EOL, trim($patch[Patch::LABEL], PHP_EOL));
74
75
        $reference = $this->resolveReferenceInfo($patch);
76
77
        if (!$reference) {
78
            return $lines;
79
        }
80
81
        if (count($lines) > 1) {
82
            return array_merge($lines, array(
83
                sprintf('reference: <fg=default;options=underscore>%s</>', $reference)
84
            ));
85
        }
86
87
        return array(sprintf('%s (<fg=default;options=underscore>%s</>)', reset($lines), $reference));
88
    }
89
90
    private function resolveReferenceInfo(array $patch)
91
    {
92
        if (isset($patch[Patch::LINK]) && $patch[Patch::LINK]) {
93
            return $patch[Patch::LINK];
94
        }
95
96
        if (isset($patch[Patch::ISSUE]) && $patch[Patch::ISSUE]) {
97
            return $patch[Patch::ISSUE];
98
        }
99
100
        return false;
101
    }
102
}
103