ImageMerge   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 33
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 1
Metric Value
eloc 15
c 2
b 0
f 1
dl 0
loc 33
rs 10
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A registerImageBuilderStrategy() 0 3 1
A getBuilder() 0 11 3
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