Completed
Push — master ( 509d7e...c5b528 )
by
unknown
04:13
created

UqlExtensionContainer::getExtensions()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
namespace Netdudes\DataSourceryBundle\Extension;
4
5
use Netdudes\DataSourceryBundle\Extension\Exception\FunctionNotFoundException;
6
use Netdudes\DataSourceryBundle\Extension\Exception\InvalidExtensionTypeException;
7
use Netdudes\DataSourceryBundle\Extension\Type\UqlFunction;
8
9
class UqlExtensionContainer
10
{
11
    /**
12
     * @var UqlExtensionInterface[]
13
     */
14
    private $extensions = [];
15
16
    /**
17
     * @var UqlFunction[]
18
     */
19
    private $functions = [];
20
21
    /**
22
     * @return UqlExtensionInterface[]
23
     */
24
    public function getExtensions()
25
    {
26
        return $this->extensions;
27
    }
28
29
    /**
30
     * Performs a call to a function defined in any of the extensions managed by the container.
31
     *
32
     * @param $name
33
     * @param $arguments
34
     *
35
     * @return mixed
36
     * @throws Exception\FunctionNotFoundException
37
     */
38
    public function callFunction($name, $arguments)
39
    {
40
        if (!(isset($this->getFunctions()[$name]))) {
41
            throw new FunctionNotFoundException("Could not find UQL function $name");
42
        }
43
44
        return $this->getFunctions()[$name]->call($arguments);
45
    }
46
47
    /**
48
     * @return UqlFunction[]
49
     */
50
    public function getFunctions()
51
    {
52
        return $this->functions;
53
    }
54
55
    /**
56
     * Adds an extension to the container. This function is called during the compiler pass.
57
     *
58
     * @param UqlExtensionInterface $extension
59
     *
60
     * @throws Exception\InvalidExtensionTypeException
61
     */
62
    public function addExtension(UqlExtensionInterface $extension)
63
    {
64
        $this->extensions[] = $extension;
65
66
        foreach ($extension->getFunctions() as $function) {
67
            if (!($function instanceof UqlFunction)) {
68
                throw new InvalidExtensionTypeException("Function extensions must be of type UqlFunction");
69
            }
70
            $this->functions[$function->getName()] = $function;
71
        }
72
    }
73
}
74