StdFilesystem::readDir()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 2
nc 2
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * This file is part of byrokrat\giroapp.
5
 *
6
 * byrokrat\giroapp is free software: you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License as published
8
 * by the Free Software Foundation, either version 3 of the License, or
9
 * (at your option) any later version.
10
 *
11
 * byrokrat\giroapp is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with byrokrat\giroapp. If not, see <http://www.gnu.org/licenses/>.
18
 *
19
 * Copyright 2016-21 Hannes Forsgård
20
 */
21
22
declare(strict_types=1);
23
24
namespace byrokrat\giroapp\Filesystem;
25
26
use byrokrat\giroapp\Exception\UnableToReadFileException;
27
use Symfony\Component\Filesystem\Filesystem as SymfonyFilesystem;
28
use Symfony\Component\Finder\Finder;
29
30
final class StdFilesystem implements FilesystemInterface
31
{
32
    /** @var string */
33
    private $baseDir;
34
35
    /** @var SymfonyFilesystem */
36
    private $fs;
37
38
    public function __construct(string $baseDir, SymfonyFilesystem $fs)
39
    {
40
        $this->baseDir = $baseDir;
41
        $this->fs = $fs;
42
    }
43
44
    public function getAbsolutePath(string $path): string
45
    {
46
        return $this->fs->isAbsolutePath($path) ? $path : $this->baseDir . DIRECTORY_SEPARATOR . $path;
47
    }
48
49
    public function exists(string $path): bool
50
    {
51
        return $this->fs->exists($this->getAbsolutePath($path));
52
    }
53
54
    public function mkdir(string $path): void
55
    {
56
        $this->fs->mkdir($this->getAbsolutePath($path));
57
    }
58
59
    public function isFile(string $path): bool
60
    {
61
        $path = $this->getAbsolutePath($path);
62
        return $this->fs->exists($path) && is_file($path) && is_readable($path);
63
    }
64
65
    public function readFile(string $path): FileInterface
66
    {
67
        if (!$this->isFile($path)) {
68
            throw new UnableToReadFileException("Unable to read {$this->getAbsolutePath($path)}");
69
        }
70
71
        return new Sha256File(
72
            basename($path),
73
            (string)file_get_contents($this->getAbsolutePath($path))
74
        );
75
    }
76
77
    public function readDir(string $path): iterable
78
    {
79
        foreach ((new Finder())->in($this->getAbsolutePath($path))->files() as $fileInfo) {
80
            yield $fileInfo->getRealPath() => new Sha256File($fileInfo->getFilename(), $fileInfo->getContents());
81
        }
82
    }
83
84
    public function writeFile(FileInterface $file): void
85
    {
86
        $this->fs->dumpFile($this->getAbsolutePath($file->getFilename()), $file->getContent());
87
    }
88
}
89