Making sources
New Source
use Juampi92\Phecks\Domain\Contracts\Source;/**
* @implements Source<FileMatch>
*/
class FileSource implements Source
{
private ?string $dir = null;
public function __construct(
private readonly Filesystem $filesystem
) {}
public function directory(string $dir): self
{
$this->dir = $dir;
return $this;
}
/**
* @return MatchCollection<FileMatch>
*/
public function run(): MatchCollection
{
if (!$this->dir) {
throw new RuntimeException('Please specify a directory using directory(string)');
}
/** @var array<SplFileInfo> */
$files = $this->filesystem->allFiles($this->dir);
return MatchCollection::fromFiles(
collect($files)
->map(fn (SplFileInfo $fileInfo): FileMatch => new FileMatch($fileInfo->getPathname()))
->all(),
);
}
}
Last updated