Completed
Push — master ( e7209f...cebe6c )
by Vítor
17:17
created

RouteCollectionBuilder   A

Complexity

Total Complexity 16

Size/Duplication

Total Lines 86
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 4
Bugs 2 Features 2
Metric Value
wmc 16
c 4
b 2
f 2
lcom 1
cbo 2
dl 0
loc 86
ccs 41
cts 41
cp 1
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A build() 0 4 1
C processRoutes() 0 22 7
C processRoute() 0 24 7
1
<?php
2
/**
3
 * ZfDebugModule. Console commands and other utilities for debugging ZF2 apps.
4
 *
5
 * @license http://www.opensource.org/licenses/mit-license.html MIT License
6
 * @copyright 2016 Vítor Brandão <[email protected]>
7
 */
8
9
namespace Noiselabs\ZfDebugModule\Util\Routing;
10
11
/**
12
 * RouteCollectionBuilder is only able to build FlatRouteCollection(s).
13
 */
14
class RouteCollectionBuilder
15
{
16
    /**
17
     * @var array
18
     */
19
    private $routes;
20
21
    /**
22
     * RoutesInspector constructor.
23
     *
24
     * @param array $routes
25
     */
26 6
    public function __construct(array $routes)
27
    {
28 6
        $this->routes = $routes;
29 6
    }
30
31
    /**
32
     * @return FlatRouteCollection
33
     */
34 6
    public function build()
35
    {
36 6
        return $this->processRoutes(new FlatRouteCollection(), $this->routes);
37
    }
38
39
    /**
40
     * @param FlatRouteCollection $routeCollection
41
     * @param array               $routesConfig
42
     * @param Route               $parentRoute
43
     *
44
     * @return FlatRouteCollection
45
     */
46 6
    private function processRoutes(FlatRouteCollection $routeCollection, array $routesConfig, Route $parentRoute = null)
47
    {
48 6
        foreach (array_keys($routesConfig) as $k) {
49 5
            $childRoutes = null;
50 5
            if (isset($routesConfig[$k]['child_routes']) && !empty($routesConfig[$k]['child_routes'])) {
51 5
                $childRoutes = $routesConfig[$k]['child_routes'];
52 5
                unset($routesConfig[$k]['child_routes']);
53 5
            }
54
55 5
            $routesConfig[$k]['name'] = $k;
56 5
            $route = $this->processRoute($routesConfig[$k], $parentRoute);
57 5
            if (!isset($routesConfig[$k]['may_terminate']) || false !== $routesConfig[$k]['may_terminate']) {
58 5
                $routeCollection->addRoute($route);
59 5
            }
60
61 5
            if (null !== $childRoutes) {
62 5
                $this->processRoutes($routeCollection, $childRoutes, $route);
63 5
            }
64 6
        }
65
66 6
        return $routeCollection;
67
    }
68
69
    /**
70
     * @param array      $routeConfig
71
     * @param Route|null $parentRoute
72
     *
73
     * @return Route
74
     */
75 5
    private function processRoute(array $routeConfig, Route $parentRoute = null)
76
    {
77 5
        $name = $routeConfig['name'];
78 5
        $url = isset($routeConfig['options']['route']) ? $routeConfig['options']['route'] : '';
79 5
        $controller = isset($routeConfig['options']['defaults']['controller'])
80 5
            ? $routeConfig['options']['defaults']['controller'] : null;
81 5
        $action = isset($routeConfig['options']['defaults']['action'])
82 5
            ? $routeConfig['options']['defaults']['action'] : null;
83
84 5
        if (null !== $parentRoute) {
85 5
            $name = $parentRoute->getName() . '/' . $name;
86 5
            $url = $parentRoute->getUrl() . $url;
87 5
            if (null === $controller) {
88 1
                $controller = $parentRoute->getController();
89 1
            }
90 5
        }
91
92 5
        if (null === $action) {
93 1
            $action = 'index';
94 1
        }
95 5
        $action .= 'Action';
96
97 5
        return new Route($name, $url, $controller, $action);
98
    }
99
}
100