Separation of concerns

This commit is contained in:
2021-04-08 15:36:57 +02:00
parent cc2696668c
commit afff03166e
15 changed files with 155 additions and 96 deletions

View File

@@ -3,38 +3,32 @@
namespace IO\Input;
use Filter\DocumentFilter;
use Filter\FilterFactory;
use IO\Exception\DirectoryNotFoundException;
use IO\Exception\DirectoryNotReadableException;
use IO\Exception\NotADirectoryException;
use Filter\FilterParser;
use IO\Filesystem\Directory;
class FinderArguments
{
use ArgvAccess;
private ?string $directory;
private Directory $directory;
private array $filters;
public static function createFromGlobals(): self
{
$arguments = self::getArguments();
$arguments = self::getScriptArgs();
$directory = array_shift($arguments);
$dir = array_shift($arguments) ?? getcwd();
$dir = rtrim($dir, DIRECTORY_SEPARATOR);
return new self($dir, $arguments);
return new self($directory, $arguments);
}
public function __construct(?string $directory, array $filters)
{
$this->guardUnusableDirectory($directory);
$this->directory = realpath($directory);
$factory = new FilterFactory();
$this->filters = array_map([$factory, 'createFromString'], $filters);
$factory = new FilterParser();
$this->directory = Directory::fromString($directory);
$this->filters = array_map([$factory, 'parse'], $filters);
}
public function getDirectory(): string
public function getDirectory(): Directory
{
return $this->directory;
}
@@ -46,17 +40,4 @@ class FinderArguments
{
return $this->filters;
}
private function guardUnusableDirectory(string $directory): void
{
if (!file_exists($directory)) {
throw new DirectoryNotFoundException($directory);
}
if (!is_dir($directory)) {
throw new NotADirectoryException($directory);
}
if (!is_readable($directory)) {
throw new DirectoryNotReadableException($directory);
}
}
}