Passed
Push — master ( 7f18df...a7a2a6 )
by Cesar
10:48
created

RotativeProcessor::getnumber()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 8
rs 10
1
<?php
2
3
namespace Cesargb\Log\Processors;
4
5
class RotativeProcessor extends AbstractProcessor
6
{
7
    private $maxFiles = 366;
8
9
    /**
10
     * Log files are rotated count times before being removed.
11
     */
12
    public function files(int $count): self
13
    {
14
        $this->maxFiles = $count;
15
16
        return $this;
17
    }
18
19
    public function handler(string $filename): ?string
20
    {
21
        $filenameTarget = "{$this->filenameSource}.1";
22
23
        $this->rotate();
24
25
        rename($filename, $filenameTarget);
26
27
        return $this->processed($filenameTarget);
28
    }
29
30
    private function rotate(int $number = 1): string
31
    {
32
        $filenameTarget = "{$this->filenameSource}.{$number}{$this->extension}";
33
34
        if (!file_exists($filenameTarget)) {
35
            return $filenameTarget;
36
        }
37
38
        if ($this->maxFiles > 0 && $number >= $this->maxFiles) {
39
            if (file_exists($filenameTarget)) {
40
                unlink($filenameTarget);
41
            }
42
43
            return $filenameTarget;
44
        }
45
46
        $nextFilename = $this->rotate($number + 1);
47
48
        rename($filenameTarget, $nextFilename);
49
50
        return $filenameTarget;
51
    }
52
}
53