summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Bakame/Csv/Reader.php13
-rw-r--r--test/Bakame/Csv/ReaderTest.php8
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) {