diff --git a/src/Dataset.php b/src/Dataset.php index e740795..0eb2f1a 100644 --- a/src/Dataset.php +++ b/src/Dataset.php @@ -2,6 +2,8 @@ namespace NoccyLabs\Dataset; +use NoccyLabs\Dataset\Readers\CsvReader; +use NoccyLabs\Dataset\Readers\JsonReader; class Dataset { @@ -20,5 +22,25 @@ class Dataset return $this->identifier; } + public function open(): ReaderInterface + { + $filename = $this->options['filename']; + $reader = $this->determineReaderForFile($filename); + $inst = new $reader($filename, $this->options); + return $inst; + } + + private function determineReaderForFile(string $filename): string + { + if ($reader = $this->options['reader']??null) { + return $reader; + } + $ext = pathinfo($filename, PATHINFO_EXTENSION); + return match ($ext) { + 'json' => JsonReader::class, + 'csv' => CsvReader::class, + default => throw new \RuntimeException("Unable to determine reader for dataset file") + }; + } } \ No newline at end of file diff --git a/src/DatasetManager.php b/src/DatasetManager.php index f6de99d..3324565 100644 --- a/src/DatasetManager.php +++ b/src/DatasetManager.php @@ -27,6 +27,16 @@ class DatasetManager return self::$datasets; } + public function getDataset(string $identifier): Dataset + { + return self::$dataset[$identifier]; + } + + public function openDataset(string $identifier): ReaderInterface + { + return $this->getDataset($identifier)->open(); + } + /** * Find the vendor directory and try to locate all bundled datasets * diff --git a/src/ReaderInterface.php b/src/ReaderInterface.php new file mode 100644 index 0000000..ce8abef --- /dev/null +++ b/src/ReaderInterface.php @@ -0,0 +1,8 @@ +