Separation of concerns
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user