magickatt/MultiContextBDDTalk

View on GitHub
backend/src/HistoricalMeteorological/Data/Loader/FileLoader.php

Summary

Maintainability
A
25 mins
Test Coverage
<?php
 
namespace HistoricalMeteorological\Data\Loader;
 
use Generator;
use SplFileInfo;
use SeekableIterator;
use DirectoryIterator;
use InvalidArgumentException;
 
class FileLoader implements LoaderInterface
{
/**
* @inheritdoc
*/
public function getResources(SeekableIterator $location):Generator
{
if (!$location instanceof DirectoryIterator) {
throw new InvalidArgumentException('FileLoader can only get resources from a DirectoryIterator');
}
return $this->getFilesFromDirectory($location);
}
 
/**
* @inheritdoc
*/
public function getRows($resource):Generator
{
if (!$resource instanceof SplFileInfo) {
throw new InvalidArgumentException('FileLoader can only get rows from SplFileInfo resources');
}
return $this->getRowsFromFile($resource);
}
 
/**
* @param DirectoryIterator $directory
* @return Generator
*/
Function `getFilesFromDirectory` has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
private function getFilesFromDirectory(DirectoryIterator $directory):Generator
{
if (!$directory->isDir() || !$directory->isReadable()) {
throw new InvalidArgumentException('Directory is either not actually a directory or not accessible');
}
foreach ($directory as $file) {
if (!$file->isDot() && $file->isFile()) {
yield $file;
}
}
}
 
/**
* Get rows from local file resource
* @param SplFileInfo $file
* @return Generator
*/
private function getRowsFromFile(SplFileInfo $file):Generator
{
$file = fopen($file->getRealPath(), 'r');
while (($line = fgets($file)) !== false) {
yield $line;
}
fclose($file);
}
}