ImageManager::getImageUrl()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 4
Bugs 0 Features 1
Metric Value
c 4
b 0
f 1
dl 0
loc 8
rs 9.4285
cc 1
eloc 4
nc 1
nop 2
1
<?php namespace Nord\Lumen\ImageManager;
2
3
use Nord\Lumen\FileManager\Contracts\File;
4
use Nord\Lumen\FileManager\Contracts\FileManager;
5
use Nord\Lumen\ImageManager\Contracts\ManipulatorAdapter;
6
use Nord\Lumen\ImageManager\Contracts\ImageManager as ImageManagerContract;
7
use Nord\Lumen\ImageManager\Exceptions\AdapterException;
8
9
class ImageManager implements ImageManagerContract
10
{
11
    const MANIPULATOR_CLOUDINARY = 'cloudinary';
12
    const DEFAULT_MANIPULATOR    = self::MANIPULATOR_CLOUDINARY;
13
14
    /**
15
     * @var FileManager
16
     */
17
    private $fileManager;
18
19
    /**
20
     * @var ManipulatorAdapter[]
21
     */
22
    private $adapters = [];
23
24
25
    /**
26
     * ImageManager constructor.
27
     *
28
     * @param FileManager $fileManager
29
     */
30
    public function __construct(FileManager $fileManager)
31
    {
32
        $this->fileManager = $fileManager;
33
    }
34
35
36
    /**
37
     * @inheritdoc
38
     */
39
    public function getImageUrl(File $file, array $options = [])
40
    {
41
        $path = $this->fileManager->getFilePath($file, $options);
42
43
        $manipulator = array_pull($options, 'manipulator', self::DEFAULT_MANIPULATOR);
44
45
        return $this->getManipulator($manipulator)->getImageUrl($path, $options);
46
    }
47
48
49
    /**
50
     * @param ManipulatorAdapter $manipulator
51
     */
52
    public function addAdapter(ManipulatorAdapter $manipulator)
53
    {
54
        $this->adapters[$manipulator->getName()] = $manipulator;
55
    }
56
57
58
    /**
59
     * @param string $name
60
     *
61
     * @return ManipulatorAdapter
62
     * @throws AdapterException
63
     */
64
    protected function getManipulator($name)
65
    {
66
        if (!isset($this->adapters[$name])) {
67
            throw new AdapterException("Adapter for manipulator '$name' not found.");
68
        }
69
70
        return $this->adapters[$name];
71
    }
72
}
73