Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 9 |
CRAP | |
0.00% |
0 / 27 |
| Dipsor\CsvFaker\Lib\CsvBuilder | |
0.00% |
0 / 1 |
|
0.00% |
0 / 9 |
156.00 | |
0.00% |
0 / 27 |
| __construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
| buildFromArray | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 4 |
|||
| addHeader | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 5 |
|||
| parseHeader | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
| addBody | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 3 |
|||
| getCsvRow | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 4 |
|||
| fakeColumn | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
| getPropForFaker | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
| buildCsv | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 3 |
|||
| <?php | |
| namespace Dipsor\CsvFaker\Lib; | |
| use Faker\Generator as Faker; | |
| use League\Csv\Writer; | |
| class CsvBuilder { | |
| private $faker; | |
| public function __construct(Faker $faker) | |
| { | |
| $this->faker = $faker; | |
| } | |
| /** | |
| * @param array $columns | |
| * @param $rows | |
| * @return Writer | |
| */ | |
| public function buildFromArray(array $columns, $rows) | |
| { | |
| $csvRows = []; | |
| $this->addHeader($csvRows, $columns); | |
| $this->addBody($csvRows, $columns, (int)$rows); | |
| return $this->buildCsv($csvRows); | |
| } | |
| /** | |
| * @param array $dataRows | |
| * @param array $columns | |
| */ | |
| private function addHeader(array &$csvRows, array $columns) | |
| { | |
| $header = []; | |
| foreach ($columns as $column) { | |
| $header[] = $this->parseHeader($column); | |
| } | |
| $csvRows[0] = $header; | |
| } | |
| /** | |
| * @param string $column | |
| * @return string | |
| */ | |
| private function parseHeader(string $column): string | |
| { | |
| $exploded = explode(':', $column); | |
| return $exploded[0]; | |
| } | |
| /** | |
| * @param array $dataRows | |
| * @param array $columns | |
| * @param int $rows | |
| */ | |
| private function addBody(array &$csvRows, array $columns, int $rows) | |
| { | |
| for ($i = 0; $i < $rows; $i++) { | |
| $csvRows[] = $this->getCsvRow($columns); | |
| } | |
| } | |
| private function getCsvRow(array $columns): array | |
| { | |
| $row = []; | |
| foreach ($columns as $column) { | |
| $row[] = $this->fakeColumn($column); | |
| } | |
| return $row; | |
| } | |
| /** | |
| * @param $column | |
| * @return mixed | |
| */ | |
| private function fakeColumn(string $column) | |
| { | |
| $property = $this->getPropForFaker($column); | |
| return $this->faker->$property ?? ''; | |
| } | |
| /** | |
| * @param string $column | |
| * @return mixed | |
| */ | |
| private function getPropForFaker(string $column) | |
| { | |
| $exploded = explode(':', $column); | |
| return $exploded[1]; | |
| } | |
| /** | |
| * @param array $rows | |
| * @param string $fileName | |
| * @return Writer | |
| */ | |
| private function buildCsv(array $rows): Writer | |
| { | |
| $writer = Writer::createFromFileObject(new \SplTempFileObject()); | |
| $writer->insertAll($rows); | |
| return $writer; | |
| } | |
| } |