Completed
Pull Request — dev (#50)
by Arnaud
02:55
created

Registry::add()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 7
rs 9.4285
cc 2
eloc 4
nc 2
nop 1
1
<?php
2
3
namespace LAG\AdminBundle\Admin\Registry;
4
5
use Exception;
6
use LAG\AdminBundle\Admin\AdminInterface;
7
8
/**
9
 * Admin registry to store Admins along the request.
10
 */
11
class Registry
12
{
13
    /**
14
     * Admins registry.
15
     *
16
     * @var AdminInterface[]
17
     */
18
    protected $admins = [];
19
20
    /**
21
     * Add an Admin to the registry.
22
     *
23
     * @param AdminInterface $admin
24
     * @throws Exception
25
     */
26
    public function add(AdminInterface $admin)
27
    {
28
        if (array_key_exists($admin->getName(), $this->admins)) {
29
            throw new Exception('An Admin with the name "'.$admin->getName().'" has already been registered');
30
        }
31
        $this->admins[$admin->getName()] = $admin;
32
    }
33
34
    /**
35
     * Return an Admin from the registry.
36
     *
37
     * @param string $name
38
     * @return AdminInterface
39
     * @throws Exception
40
     */
41
    public function get($name)
42
    {
43
        if (!array_key_exists($name, $this->admins)) {
44
            throw new Exception('No Admin with the name "'.$name.'" has been found');
45
        }
46
47
        return $this->admins[$name];
48
    }
49
50
    /**
51
     * Return true if an Admin with the name $name has been registered.
52
     *
53
     * @param string $name
54
     * @return bool
55
     */
56
    public function has($name)
57
    {
58
        return array_key_exists($name, $this->admins);
59
    }
60
61
    /**
62
     * Return all the registered Admins.
63
     *
64
     * @return AdminInterface[]
65
     */
66
    public function all()
67
    {
68
        return $this->admins;
69
    }
70
}
71