/** * {@inheritdoc} */ public function read() { if (count($this->remainingItems) > 0) { $item = array_shift($this->remainingItems); return $item; } $items = $this->reader->read(); if (null !== $items) { $this->remainingItems = $this->converter->convert($items); return $this->read(); } return null; }
/** * {@inheritdoc} */ public function doExecute(StepExecution $stepExecution) { $itemsToWrite = array(); $writeCount = 0; $this->initializeStepElements($stepExecution); $stopExecution = false; while (!$stopExecution) { try { $readItem = $this->reader->read(); if (null === $readItem) { $stopExecution = true; continue; } } catch (InvalidItemException $e) { $this->handleStepExecutionWarning($this->stepExecution, $this->reader, $e); continue; } $processedItem = $this->process($readItem); if (null !== $processedItem) { $itemsToWrite[] = $processedItem; $writeCount++; if (0 === $writeCount % $this->batchSize) { $this->write($itemsToWrite); $itemsToWrite = array(); $this->getJobRepository()->updateStepExecution($stepExecution); } } } if (count($itemsToWrite) > 0) { $this->write($itemsToWrite); } $this->flushStepElements(); }
/** * {@inheritdoc} */ public function analyze(ItemReaderInterface $reader) { $stats = ["columns_count" => 0, "products" => ["count" => 0, "values_count" => 0, "values_per_product" => []]]; $lineNumber = 1; while ($valuesData = $reader->read()) { if (0 === $stats['columns_count']) { $stats['columns_count'] = count($valuesData); } $valuesCount = $this->countValues($valuesData); $stats['products']['count']++; $stats['products']['values_count'] += $valuesCount; $stats['products']['values_per_product'] = $this->computeValuesStats($valuesCount, $stats['products']['values_per_product'], $lineNumber); $lineNumber++; } if ($stats['products']['count'] > 0) { $stats['products']['values_per_product']['average'] = round($stats['products']['values_count'] / $stats['products']['count']); } return $stats; }
function it_analyzes_empty_product_data(ItemReaderInterface $reader) { $reader->read()->willReturn(null); $this->analyze($reader)->shouldBeLike(["columns_count" => 0, "products" => ["count" => 0, "values_count" => 0, "values_per_product" => []]]); }