Version 1
[yaffs-website] / vendor / alchemy / zippy / src / Resource / Reader / Guzzle / LegacyGuzzleReaderFactory.php
diff --git a/vendor/alchemy/zippy/src/Resource/Reader/Guzzle/LegacyGuzzleReaderFactory.php b/vendor/alchemy/zippy/src/Resource/Reader/Guzzle/LegacyGuzzleReaderFactory.php
new file mode 100644 (file)
index 0000000..500f59a
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+namespace Alchemy\Zippy\Resource\Reader\Guzzle;
+
+use Alchemy\Zippy\Resource\Resource as ZippyResource;
+use Alchemy\Zippy\Resource\ResourceReader;
+use Alchemy\Zippy\Resource\ResourceReaderFactory;
+use Guzzle\Http\Client;
+use Guzzle\Http\ClientInterface;
+use Guzzle\Plugin\Backoff\BackoffPlugin;
+use Symfony\Component\EventDispatcher\Event;
+
+class LegacyGuzzleReaderFactory implements ResourceReaderFactory
+{
+    /**
+     * @var ClientInterface|null
+     */
+    private $client = null;
+
+    public function __construct(ClientInterface $client = null)
+    {
+        $this->client = $client;
+
+        if (!$this->client) {
+            $this->client = new Client();
+
+            $this->client->getEventDispatcher()->addListener('request.error', function(Event $event) {
+                // override guzzle default behavior of throwing exceptions
+                // when 4xx & 5xx responses are encountered
+                $event->stopPropagation();
+            }, -254);
+
+            $this->client->addSubscriber(BackoffPlugin::getExponentialBackoff(5, array(500, 502, 503, 408)));
+        }
+    }
+
+    /**
+     * @param ZippyResource $resource
+     * @param string        $context
+     *
+     * @return ResourceReader
+     */
+    public function getReader(ZippyResource $resource, $context)
+    {
+        return new LegacyGuzzleReader($resource, $this->client);
+    }
+}