DirectoryFileScanner   A
last analyzed

Complexity

Total Complexity 2

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 2
lcom 0
cbo 1
dl 0
loc 41
ccs 16
cts 16
cp 1
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 16 1
A buildRegexDirectoryIterator() 0 11 1
1
<?php
2
3
namespace Finalizer\Scanner;
4
5
use Finalizer\Iterator\MapIterator;
6
7
final class DirectoryFileScanner
8
{
9
    /**
10
     * @param string[] $directories
11
12
     * @return \Traversable|string[] paths of all the existing PHP files in the given directories
13
     */
14 14
    public function __invoke(array $directories)
15
    {
16 14
        $appendIterator = new \AppendIterator();
17
18 14
        array_map(
19 14
            [$appendIterator, 'append'],
20 14
            array_map([$this, 'buildRegexDirectoryIterator'], $directories)
21
        );
22
23 14
        return new MapIterator(
24 14
            $appendIterator,
25
            function (array $fileInfo) {
26 12
                return $fileInfo[0];
27 14
            }
28
        );
29
    }
30
31
    /**
32
     * @param string $path
33
     *
34
     * @return \Iterator
35
     */
36 14
    private function buildRegexDirectoryIterator($path)
37
    {
38 14
        return new \RegexIterator(
39 14
            new \RecursiveIteratorIterator(
40 14
                new \RecursiveDirectoryIterator($path, \FilesystemIterator::SKIP_DOTS),
41 14
                \RecursiveIteratorIterator::LEAVES_ONLY
42
            ),
43 14
            '/^.+(\.php|\.hh)$/i',
44 14
            \RecursiveRegexIterator::GET_MATCH
45
        );
46
    }
47
}
48