diff options
-rw-r--r-- | src/Bakame/Csv/Reader.php | 13 | ||||
-rw-r--r-- | test/Bakame/Csv/ReaderTest.php | 8 |
2 files changed, 18 insertions, 3 deletions
diff --git a/src/Bakame/Csv/Reader.php b/src/Bakame/Csv/Reader.php index 7bae899..8af5faa 100644 --- a/src/Bakame/Csv/Reader.php +++ b/src/Bakame/Csv/Reader.php @@ -98,13 +98,20 @@ class Reader extends AbstractIteratorFilter implements * @param integer $flags Optional \SplFileObject constant flags * * @return self + * + * @throws \InvalidArgumentException If the data provided is invalid */ public static function createFromString($str, $delimiter = ',', $enclosure = '"', $escape = "\\", $flags = 0) { - $csv = new SplTempFileObject; - $csv->fwrite($str); + if (is_string($str) || (is_object($str) && method_exists($str, '__toString'))) { + $csv = new SplTempFileObject; + $csv->fwrite((string) $str); - return new static($csv, $delimiter, $enclosure, $escape, $flags); + return new static($csv, $delimiter, $enclosure, $escape, $flags); + } + throw new InvalidArgumentException( + 'the submitted data must be a string or an object implementing the `__toString` method' + ); } /** diff --git a/test/Bakame/Csv/ReaderTest.php b/test/Bakame/Csv/ReaderTest.php index 1c8c33e..f4517dd 100644 --- a/test/Bakame/Csv/ReaderTest.php +++ b/test/Bakame/Csv/ReaderTest.php @@ -115,6 +115,14 @@ class ReaderTest extends PHPUnit_Framework_TestCase $this->assertNull($res[0][2]); } + /** + * @expectedException InvalidArgumentException + */ + public function testFailCreateFromString() + { + Reader::createFromString(new \DateTime); + } + public function testFetchColCallback() { $func = function ($value) { |