buildRegexDirectoryIterator()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 11
ccs 7
cts 7
cp 1
rs 9.9
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 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