Completed
Branch full-rewrite (3b3ffb)
by Thibaud
03:12
created

LegacyGuzzleReaderFactory::createReaderFor()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
3
namespace Alchemy\Zippy\Adapter\Guzzle;
4
5
use Alchemy\Zippy\Resource\ResourceReader;
6
use Alchemy\Zippy\Resource\ResourceReaderFactory;
7
use Alchemy\Zippy\Resource\ResourceUri;
8
use Guzzle\Http\Client;
9
use Guzzle\Http\ClientInterface;
10
use Guzzle\Plugin\Backoff\BackoffPlugin;
11
use Symfony\Component\EventDispatcher\Event;
12
13
class LegacyGuzzleReaderFactory implements ResourceReaderFactory
14
{
15
    /**
16
     * @var ClientInterface|null
17
     */
18
    private $client = null;
19
20
    public function __construct(ClientInterface $client = null)
21
    {
22
        $this->client = $client;
23
24
        if (!$this->client) {
25
            $this->client = new Client();
26
27
            $this->client->getEventDispatcher()->addListener('request.error', function(Event $event) {
28
                // override guzzle default behavior of throwing exceptions
29
                // when 4xx & 5xx responses are encountered
30
                $event->stopPropagation();
31
            }, -254);
32
33
            $this->client->addSubscriber(BackoffPlugin::getExponentialBackoff(5, array(500, 502, 503, 408)));
34
        }
35
    }
36
37
    /**
38
     * @param ResourceUri $resource
39
     * @return ResourceReader
40
     */
41
    public function createReaderFor(ResourceUri $resource)
42
    {
43
        return new LegacyGuzzleReader($resource, $this->client);
44
    }
45
}
46