Version 1
[yaffs-website] / vendor / alchemy / zippy / src / Resource / Reader / Guzzle / LegacyGuzzleReader.php
diff --git a/vendor/alchemy/zippy/src/Resource/Reader/Guzzle/LegacyGuzzleReader.php b/vendor/alchemy/zippy/src/Resource/Reader/Guzzle/LegacyGuzzleReader.php
new file mode 100644 (file)
index 0000000..79ef97a
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+
+namespace Alchemy\Zippy\Resource\Reader\Guzzle;
+
+use Alchemy\Zippy\Resource\Resource as ZippyResource;
+use Alchemy\Zippy\Resource\ResourceReader;
+use Guzzle\Http\Client;
+use Guzzle\Http\ClientInterface;
+use Guzzle\Http\EntityBodyInterface;
+
+class LegacyGuzzleReader implements ResourceReader
+{
+    /**
+     * @var ClientInterface
+     */
+    private $client;
+
+    /**
+     * @var \Alchemy\Zippy\Resource\Resource $resource
+     */
+    private $resource;
+
+    /**
+     * This is necessary to prevent the underlying PHP stream from being destroyed
+     * @link https://github.com/guzzle/guzzle/issues/366#issuecomment-20295409
+     * @var EntityBodyInterface|null
+     */
+    private $stream = null;
+
+    /**
+     * @param ZippyResource   $resource
+     * @param ClientInterface $client
+     */
+    public function __construct(ZippyResource $resource, ClientInterface $client = null)
+    {
+        $this->client = $client ?: new Client();
+        $this->resource = $resource;
+    }
+
+    /**
+     * @return string
+     */
+    public function getContents()
+    {
+        return $this->buildRequest()->send()->getBody(true);
+    }
+
+    /**
+     * @return resource
+     */
+    public function getContentsAsStream()
+    {
+        if (!$this->stream) {
+            $this->stream = $this->buildRequest()->send()->getBody(false);
+        }
+
+        return $this->stream->getStream();
+    }
+
+    /**
+     * @return \Guzzle\Http\Message\RequestInterface
+     */
+    private function buildRequest()
+    {
+        return $this->client->get($this->resource->getOriginal());
+    }
+}