Completed
Push — master ( a4e6dd...a851cc )
by Arne
02:45
created

StandardIndexBuilder   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 42
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Importance

Changes 0
Metric Value
wmc 6
c 0
b 0
f 0
lcom 0
cbo 4
dl 0
loc 42
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
B buildIndexFromPath() 0 36 6
1
<?php
2
3
namespace Storeman\IndexBuilder;
4
5
use Storeman\Index;
6
use Storeman\IndexObject;
7
use Symfony\Component\Finder\Finder;
8
use Symfony\Component\Finder\SplFileInfo;
9
10
class StandardIndexBuilder implements IndexBuilderInterface
11
{
12
    /**
13
     * {@inheritdoc}
14
     */
15
    public function buildIndexFromPath(string $path, array $excludedPathsRegexp = []): Index
16
    {
17
        if (!is_dir($path) || !is_readable($path))
18
        {
19
            throw new \InvalidArgumentException("Given path {$path} does not exist or is not readable.");
20
        }
21
22
        $finder = new Finder();
23
        $finder->in($path);
24
        $finder->ignoreDotFiles(false);
25
26
        foreach ($excludedPathsRegexp as $excludedPathRegexp)
27
        {
28
            $finder->notPath($excludedPathRegexp);
29
        }
30
31
        $index = new Index();
32
33
        foreach ($finder->directories() as $fileInfo)
34
        {
35
            /** @var SplFileInfo $fileInfo */
36
37
            $index->addObject(IndexObject::fromPath($path, $fileInfo->getRelativePathname()));
38
        }
39
40
        foreach ($finder->files() as $fileInfo)
41
        {
42
            /** @var SplFileInfo $fileInfo */
43
44
            $index->addObject(IndexObject::fromPath($path, $fileInfo->getRelativePathname()));
45
        }
46
47
        // todo: add symlinks
48
49
        return $index;
50
    }
51
}
52