ProxyFactory   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
wmc 9
lcom 1
cbo 3
dl 0
loc 62
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A supports() 0 4 1
A createClassHashMap() 0 7 2
A getFullQualifiedClassName() 0 4 1
A getProxyForName() 0 14 3
A getProxy() 0 4 1
1
<?php
2
3
namespace PHPRealCoverage\Proxy;
4
5
class ProxyFactory
6
{
7
    private $classes;
8
    private $proxies = array();
9
10
    /**
11
     * @param ClassMetadata[] $classes
12
     */
13
    public function __construct(array $classes)
14
    {
15
        $this->createClassHashMap($classes);
16
    }
17
18
    public function supports($classname)
19
    {
20
        return isset($this->classes[$classname]);
21
    }
22
23
    /**
24
     * @param ClassMetadata[] $classes
25
     */
26
    private function createClassHashMap(array $classes)
27
    {
28
        $this->classes = array();
29
        foreach ($classes as $class) {
30
            $this->classes[$this->getFullQualifiedClassName($class)] = $class;
31
        }
32
    }
33
34
    /**
35
     * @param ClassMetadata $class
36
     * @return string
37
     */
38
    private function getFullQualifiedClassName(ClassMetadata $class)
39
    {
40
        return '\\' . $class->getNamespace() . '\\' . $class->getName();
41
    }
42
43
    public function getProxyForName($classname)
44
    {
45
        if (!$this->supports($classname)) {
46
            throw new UnsupportedClassException("Class " . $classname . " not found");
47
        }
48
49
        if (!isset($this->proxies[$classname])) {
50
            $proxy = new ProxyAccessor($this->classes[$classname]);
51
            $proxy->load();
52
            $this->proxies[$classname] = $proxy;
53
        }
54
55
        return $this->proxies[$classname];
56
    }
57
58
    /**
59
     * @param ClassMetadata $class
60
     * @return ProxyAccessor
61
     */
62
    public function getProxy(ClassMetadata $class)
63
    {
64
        return $this->getProxyForName($this->getFullQualifiedClassName($class));
65
    }
66
}
67