Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
12.50% covered (danger)
12.50%
1 / 8
33.33% covered (danger)
33.33%
1 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
RelativeFilepathLogProcessor
12.50% covered (danger)
12.50%
1 / 8
33.33% covered (danger)
33.33%
1 / 3
39.83
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 __invoke
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
30
 isAbsolutePath
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2/**
3 * A logger that changes file paths to be relative to the project directory.
4 *
5 * @see \BrianHenryIE\Strauss\Helpers\FileSystem::getProjectRelativePath()
6 */
7
8namespace BrianHenryIE\Strauss\Helpers\Log;
9
10use BrianHenryIE\Strauss\Helpers\FileSystem;
11use Monolog\Processor\ProcessorInterface;
12
13class RelativeFilepathLogProcessor implements ProcessorInterface
14{
15    protected FileSystem $fileSystem;
16
17    public function __construct(
18        FileSystem $fileSystem
19    ) {
20        $this->fileSystem = $fileSystem;
21    }
22
23    /**
24     * Checks all context values for keys containing 'path' modifies their values to be
25     * relative to the project root.
26     *
27     */
28    public function __invoke(array $record): array
29    {
30        $context = $record['context'];
31
32        foreach ($context as $key => $val) {
33            if (false !== stripos($key, 'path') && is_string($val)) {
34                if ($this->isAbsolutePath($val)) {
35                    $record['context'][ $key ] = $this->fileSystem->getProjectRelativePath($val);
36                }
37            }
38        }
39
40        return $record;
41    }
42
43    protected function isAbsolutePath(string $path): bool
44    {
45        return 0 !== strpos($path, '..');
46    }
47}