Completed
Pull Request — master (#38)
by Pádraic
02:50
created

ExtensionFactory   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 34
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Importance

Changes 0
Metric Value
wmc 3
lcom 0
cbo 0
dl 0
loc 34
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A create() 0 9 2
A pascalCase() 0 10 1
1
<?php
2
3
namespace PHPMND;
4
5
use PHPMND\Extension\Extension;
6
7
/**
8
 * Class ExtensionFactory
9
 *
10
 * @package PHPMND
11
 */
12
class ExtensionFactory
13
{
14
    /**
15
     * @param string $extensionName
16
     *
17
     * @return Extension
18
     * @throws \Exception
19
     */
20
    public static function create($extensionName)
21
    {
22
        $extensionClassName = 'PHPMND\Extension\\' . self::pascalCase($extensionName) . 'Extension';
23
        if (false === class_exists($extensionClassName)) {
24
            throw new \Exception(sprintf('Extension "%s" does not exist', $extensionName));
25
        }
26
27
        return new $extensionClassName;
28
    }
29
30
    /**
31
     * @param string $string
32
     *
33
     * @return string
34
     */
35
    private static function pascalCase($string)
36
    {
37
        return preg_replace_callback(
38
            '/(?:^|_)([a-z])/',
39
            function($match) {
40
                return strtoupper($match[1]);
41
            },
42
            $string
43
        );
44
    }
45
}
46