ProvidersFactory   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 66
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 8
lcom 1
cbo 5
dl 0
loc 66
ccs 26
cts 26
cp 1
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A extend() 0 4 1
B make() 0 24 5
A resolveExtends() 0 8 2
1
<?php
2
3
namespace Notimatica\Driver;
4
5
use League\Flysystem\Adapter\Local;
6
use League\Flysystem\Filesystem;
7
use Notimatica\Driver\Providers\AbstractProvider;
8
use Notimatica\Driver\Providers\Chrome;
9
use Notimatica\Driver\Providers\Firefox;
10
use Notimatica\Driver\Providers\Safari;
11
12
class ProvidersFactory
13
{
14
    /**
15
     * @var \Closure[]
16
     */
17
    protected static $resolvers;
18
19
    /**
20
     * Extend resolver to support customers providers.
21
     *
22
     * @param string $name
23
     * @param \Closure $resolver
24
     */
25 1
    public static function extend($name, $resolver)
26
    {
27 1
        static::$resolvers[$name] = $resolver;
28 1
    }
29
30
    /**
31
     * Resolve provider from it's name.
32
     *
33
     * @param  string $name
34
     * @param  array $options
35
     * @return AbstractProvider
36
     */
37 18
    public function make($name, array $options = [])
38
    {
39 18
        $provider = $this->resolveExtends($name, $options);
40
41 18
        if (is_null($provider)) {
42
            switch ($name) {
43 17
                case Chrome::NAME:
44 16
                    $provider = new Chrome($options);
45 16
                    break;
46 17
                case Firefox::NAME:
47 16
                    $provider = new Firefox($options);
48 16
                    break;
49 17
                case Safari::NAME:
50 16
                    $storage  = new Filesystem(new Local($options['storage_root']));
51 16
                    $provider = new Safari($options);
52 16
                    $provider->setStorage($storage);
53 16
                    break;
54 1
                default:
55 1
                    throw new \RuntimeException("Unsupported provider '$name'");
56 1
            }
57 16
        }
58
59 17
        return $provider;
60
    }
61
62
    /**
63
     * Try to resolve extra providers.
64
     *
65
     * @param  string $name
66
     * @param  array $options
67
     * @return AbstractProvider|null
68
     */
69 18
    protected function resolveExtends($name, array $options)
70
    {
71 18
        if (empty(static::$resolvers[$name])) {
72 17
            return;
73
        }
74
75 1
        return call_user_func(static::$resolvers[$name], $options);
76
    }
77
}
78