summaryrefslogtreecommitdiff
path: root/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorApplyBatched.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorApplyBatched.php')
-rw-r--r--vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorApplyBatched.php111
1 files changed, 111 insertions, 0 deletions
diff --git a/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorApplyBatched.php b/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorApplyBatched.php
new file mode 100644
index 0000000..6aa3615
--- /dev/null
+++ b/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorApplyBatched.php
@@ -0,0 +1,111 @@
+<?php
+
+namespace Guzzle\Service\Resource;
+
+use Guzzle\Common\AbstractHasDispatcher;
+use Guzzle\Batch\BatchBuilder;
+use Guzzle\Batch\BatchSizeDivisor;
+use Guzzle\Batch\BatchClosureTransfer;
+use Guzzle\Common\Version;
+
+/**
+ * Apply a callback to the contents of a {@see ResourceIteratorInterface}
+ * @deprecated Will be removed in a future version and is no longer maintained. Use the Batch\ abstractions instead.
+ * @codeCoverageIgnore
+ */
+class ResourceIteratorApplyBatched extends AbstractHasDispatcher
+{
+ /** @var callable|array */
+ protected $callback;
+
+ /** @var ResourceIteratorInterface */
+ protected $iterator;
+
+ /** @var integer Total number of sent batches */
+ protected $batches = 0;
+
+ /** @var int Total number of iterated resources */
+ protected $iterated = 0;
+
+ public static function getAllEvents()
+ {
+ return array(
+ // About to send a batch of requests to the callback
+ 'iterator_batch.before_batch',
+ // Finished sending a batch of requests to the callback
+ 'iterator_batch.after_batch',
+ // Created the batch object
+ 'iterator_batch.created_batch'
+ );
+ }
+
+ /**
+ * @param ResourceIteratorInterface $iterator Resource iterator to apply a callback to
+ * @param array|callable $callback Callback method accepting the resource iterator
+ * and an array of the iterator's current resources
+ */
+ public function __construct(ResourceIteratorInterface $iterator, $callback)
+ {
+ $this->iterator = $iterator;
+ $this->callback = $callback;
+ Version::warn(__CLASS__ . ' is deprecated');
+ }
+
+ /**
+ * Apply the callback to the contents of the resource iterator
+ *
+ * @param int $perBatch The number of records to group per batch transfer
+ *
+ * @return int Returns the number of iterated resources
+ */
+ public function apply($perBatch = 50)
+ {
+ $this->iterated = $this->batches = $batches = 0;
+ $that = $this;
+ $it = $this->iterator;
+ $callback = $this->callback;
+
+ $batch = BatchBuilder::factory()
+ ->createBatchesWith(new BatchSizeDivisor($perBatch))
+ ->transferWith(new BatchClosureTransfer(function (array $batch) use ($that, $callback, &$batches, $it) {
+ $batches++;
+ $that->dispatch('iterator_batch.before_batch', array('iterator' => $it, 'batch' => $batch));
+ call_user_func_array($callback, array($it, $batch));
+ $that->dispatch('iterator_batch.after_batch', array('iterator' => $it, 'batch' => $batch));
+ }))
+ ->autoFlushAt($perBatch)
+ ->build();
+
+ $this->dispatch('iterator_batch.created_batch', array('batch' => $batch));
+
+ foreach ($this->iterator as $resource) {
+ $this->iterated++;
+ $batch->add($resource);
+ }
+
+ $batch->flush();
+ $this->batches = $batches;
+
+ return $this->iterated;
+ }
+
+ /**
+ * Get the total number of batches sent
+ *
+ * @return int
+ */
+ public function getBatchCount()
+ {
+ return $this->batches;
+ }
+
+ /**
+ * Get the total number of iterated resources
+ *
+ * @return int
+ */
+ public function getIteratedCount()
+ {
+ return $this->iterated;
+ }
+}