Skip to content

Commit 78e559f

Browse files
author
Oleg
committed
fix csv provider - add dependency on splFileObject
1 parent 5c5d2c5 commit 78e559f

File tree

4 files changed

+25
-23
lines changed

4 files changed

+25
-23
lines changed

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,9 @@ $pipeline = (new PipelineBuilder($emitter))
7171
use SlayerBirden\DataFlow\Plumber;
7272
use SlayerBirden\DataFlow\Provider\Csv;
7373
...
74-
(new Plumber(new Csv('users_file', __DIR__ . '/users.csv'), $pipeline, $emitter))->pour();
74+
$file = new \SplFileObject(__DIR__ . '/users.csv');
75+
$file->setFlags(\SplFileObject::READ_CSV | \SplFileObject::READ_AHEAD | \SplFileObject::SKIP_EMPTY);
76+
(new Plumber(new Csv('users_file', $file), $pipeline, $emitter))->pour();
7577
```
7678
5. We want some reporting to know what's going on. Let's implement basic stdOut emitter.
7779
```php

examples/example1-import-cli/import.php

+4-1
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,7 @@ public function __invoke($value, DataBagInterface $dataBag)
4848
->addSection($dbWrite)
4949
->build();
5050

51-
(new Plumber(new Csv('users_file', __DIR__ . '/users.csv'), $pipeline, $emitter))->pour();
51+
$file = new \SplFileObject(__DIR__ . '/users.csv');
52+
$file->setFlags(\SplFileObject::READ_CSV | \SplFileObject::READ_AHEAD | \SplFileObject::SKIP_EMPTY);
53+
54+
(new Plumber(new Csv('users_file', $file), $pipeline, $emitter))->pour();

src/Provider/Csv.php

+3-8
Original file line numberDiff line numberDiff line change
@@ -33,21 +33,16 @@ class Csv implements ProviderInterface
3333

3434
/**
3535
* @param string $id
36-
* @param string $fileName
36+
* @param \SplFileObject $file
3737
* @param bool $headerRow
3838
* @param string[]|null $header
3939
* @throws FileDoesNotExist
4040
* @throws HeaderMissing
4141
*/
42-
public function __construct(string $id, string $fileName, bool $headerRow = true, ?array $header = null)
42+
public function __construct(string $id, \SplFileObject $file, bool $headerRow = true, ?array $header = null)
4343
{
4444
$this->id = $id;
45-
$path = realpath($fileName);
46-
if ($path === false) {
47-
throw new FileDoesNotExist(sprintf('Could not find file %s.', $fileName));
48-
}
49-
$this->file = new \SplFileObject($path);
50-
$this->file->setFlags(\SplFileObject::READ_CSV | \SplFileObject::READ_AHEAD | \SplFileObject::SKIP_EMPTY);
45+
$this->file = $file;
5146
if (!$headerRow && empty($header)) {
5247
throw new HeaderMissing(
5348
sprintf('You did not provide header for the file %s.', $this->file->getFilename())

tests/unit/Provider/CsvTest.php

+15-13
Original file line numberDiff line numberDiff line change
@@ -48,25 +48,21 @@ protected function setUp()
4848
fclose($file);
4949
}
5050

51-
/**
52-
* @expectedException \SlayerBirden\DataFlow\Provider\Exception\FileDoesNotExist
53-
*/
54-
public function testNonExistingFile()
55-
{
56-
new Csv('testId', self::$root->url() . '/fictional.file', true);
57-
}
58-
5951
/**
6052
* @expectedException \SlayerBirden\DataFlow\Provider\Exception\HeaderMissing
6153
*/
6254
public function testNoHeader()
6355
{
64-
new Csv('testId', self::$root->getChild('users.csv')->url(), false);
56+
$file = new \SplFileObject(self::$root->getChild('users.csv')->url());
57+
$file->setFlags(\SplFileObject::READ_CSV | \SplFileObject::READ_AHEAD | \SplFileObject::SKIP_EMPTY);
58+
new Csv('testId', $file, false);
6559
}
6660

6761
public function testGetCask()
6862
{
69-
$csv = new Csv('testId', self::$root->getChild('users.csv')->url());
63+
$file = new \SplFileObject(self::$root->getChild('users.csv')->url());
64+
$file->setFlags(\SplFileObject::READ_CSV | \SplFileObject::READ_AHEAD | \SplFileObject::SKIP_EMPTY);
65+
$csv = new Csv('testId', $file);
7066

7167
$cask = $csv->getCask();
7268
$actual = [];
@@ -84,7 +80,9 @@ public function testGetCask()
8480

8581
public function testInvalidHeader()
8682
{
87-
$csv = new Csv('testId', self::$root->getChild('users.csv')->url(), true, [
83+
$file = new \SplFileObject(self::$root->getChild('users.csv')->url());
84+
$file->setFlags(\SplFileObject::READ_CSV | \SplFileObject::READ_AHEAD | \SplFileObject::SKIP_EMPTY);
85+
$csv = new Csv('testId', $file, true, [
8886
'firstname',
8987
'lastname',
9088
'age'
@@ -98,7 +96,9 @@ public function testInvalidHeader()
9896

9997
public function testGetCaskWithOverridenHeader()
10098
{
101-
$csv = new Csv('testId', self::$root->getChild('users.csv')->url(), true, [
99+
$file = new \SplFileObject(self::$root->getChild('users.csv')->url());
100+
$file->setFlags(\SplFileObject::READ_CSV | \SplFileObject::READ_AHEAD | \SplFileObject::SKIP_EMPTY);
101+
$csv = new Csv('testId', $file, true, [
102102
'first',
103103
'last',
104104
]);
@@ -119,7 +119,9 @@ public function testGetCaskWithOverridenHeader()
119119

120120
public function testGetEstimatedSize()
121121
{
122-
$csv = new Csv('testId', self::$root->getChild('users.csv')->url());
122+
$file = new \SplFileObject(self::$root->getChild('users.csv')->url());
123+
$file->setFlags(\SplFileObject::READ_CSV | \SplFileObject::READ_AHEAD | \SplFileObject::SKIP_EMPTY);
124+
$csv = new Csv('testId', $file);
123125

124126
$this->assertSame(1, $csv->getEstimatedSize());
125127
}

0 commit comments

Comments
 (0)