Builder::perform()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 7
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 13
rs 10
1
<?php
2
namespace Ackintosh\Ganesha;
3
4
use Ackintosh\Ganesha;
5
use InvalidArgumentException;
6
7
class Builder
8
{
9
    /**
10
     * @param  array $params
11
     * @return Ganesha
12
     */
13
    public static function build(array $params): Ganesha
14
    {
15
        $params['strategyClass'] = '\Ackintosh\Ganesha\Strategy\Rate';
16
        return self::perform($params);
17
    }
18
19
    /**
20
     * @param  array $params
21
     * @return Ganesha
22
     */
23
    public static function buildWithCountStrategy(array $params): Ganesha
24
    {
25
        $params['strategyClass'] = '\Ackintosh\Ganesha\Strategy\Count';
26
        return self::perform($params);
27
    }
28
29
    /**
30
     * @param array $params
31
     * @return Ganesha
32
     * @throws InvalidArgumentException
33
     */
34
    private static function perform(array $params): Ganesha
35
    {
36
        call_user_func([$params['strategyClass'], 'validate'], $params);
37
38
        $configuration = new Configuration($params);
39
        $ganesha = new Ganesha(
40
            call_user_func(
41
                [$configuration['strategyClass'], 'create'],
42
                $configuration
43
            )
44
        );
45
46
        return $ganesha;
47
    }
48
}
49