ImageMerge::getBuilder()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 11
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 5
c 0
b 0
f 0
nc 3
nop 1
dl 0
loc 11
rs 10
1
<?php
2
3
namespace Jackal\ImageMerge;
4
5
use Exception;
6
use Jackal\ImageMerge\Builder\ImageBuilder;
7
use Jackal\ImageMerge\Model\File\FileObject;
8
use Jackal\ImageMerge\Model\Image;
9
use Jackal\ImageMerge\Strategy\ImageBuilderContentStrategy;
10
use Jackal\ImageMerge\Strategy\ImageBuilderFileObjectStrategy;
11
use Jackal\ImageMerge\Strategy\ImageBuilderFileStrategy;
12
use Jackal\ImageMerge\Strategy\ImageBuilderImageStrategy;
13
use Jackal\ImageMerge\Strategy\ImageBuilderResourceStrategy;
14
use Jackal\ImageMerge\Strategy\ImageBuilderSplFileObjectStrategy;
15
use Jackal\ImageMerge\Strategy\ImageBuilderStrategyInterface;
16
use Jackal\ImageMerge\Strategy\ImageBuilderURLStrategy;
17
18
class ImageMerge
19
{
20
    private $strategies = [
21
        ImageBuilderContentStrategy::class,
22
        ImageBuilderFileStrategy::class,
23
        ImageBuilderFileObjectStrategy::class,
24
        ImageBuilderImageStrategy::class,
25
        ImageBuilderURLStrategy::class,
26
        ImageBuilderResourceStrategy::class,
27
        ImageBuilderSplFileObjectStrategy::class,
28
    ];
29
30
    /**
31
     * @param Image|FileObject|string $source
32
     * @return ImageBuilder
33
     * @throws Exception
34
     */
35
    public function getBuilder($source)
36
    {
37
        foreach ($this->strategies as $strategyClass) {
38
            /** @var ImageBuilderStrategyInterface $strategy */
39
            $strategy = new $strategyClass;
40
            if ($strategy->support($source)) {
41
                return $strategy->getImageBuilder($source);
42
            }
43
        }
44
45
        throw new Exception('No strategy found, cannot create ImageBuilder');
46
    }
47
48
    public function registerImageBuilderStrategy(ImageBuilderStrategyInterface $strategy)
49
    {
50
        $this->strategies[] = get_class($strategy);
51
    }
52
}
53