Files   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 17
c 1
b 0
f 0
dl 0
loc 60
rs 10
wmc 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A addFile() 0 6 2
A __construct() 0 3 1
A count() 0 3 1
A addFiles() 0 4 2
A scanDirectory() 0 10 2
A getIterator() 0 3 1
A addDirectory() 0 3 1
1
<?php declare(strict_types=1);
2
3
namespace PmgDev\DatabaseReplicator\Source;
4
5
use Nette\Utils\Finder;
6
use PmgDev\DatabaseReplicator\Exceptions\FileNotFoundException;
7
8
final class Files implements \IteratorAggregate, \Countable
9
{
10
	/** @var string[] */
11
	private $files = [];
12
13
14
	public function __construct(iterable $files = [])
15
	{
16
		$this->addFiles($files);
17
	}
18
19
20
	public function addDirectory(string $directory, string $mask = '*.sql'): void
21
	{
22
		$this->addFiles(self::scanDirectory($directory, $mask));
23
	}
24
25
26
	public function addFiles(iterable $files): void
27
	{
28
		foreach ($files as $file) {
29
			$this->addFile($file);
30
		}
31
	}
32
33
34
	public function addFile(string $file): void
35
	{
36
		if (!is_file($file)) {
37
			throw new FileNotFoundException($file);
38
		}
39
		$this->files[] = $file;
40
	}
41
42
43
	public function getIterator(): \Iterator
44
	{
45
		return new \ArrayIterator($this->files);
46
	}
47
48
49
	public function count()
50
	{
51
		return count($this->files);
52
	}
53
54
55
	/**
56
	 * @return \SplFileInfo[]
57
	 */
58
	private static function scanDirectory(string $directory, string $mask): array
59
	{
60
		$finder = Finder::findFiles($mask)->in($directory);
61
		$files = [];
62
		foreach ($finder as $file) {
63
			/** @var \SplFileInfo $file */
64
			$files[] = $file->getPathname();
65
		}
66
		sort($files);
67
		return $files;
68
	}
69
70
}
71