RouteCollector   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
dl 0
loc 73
rs 10
c 0
b 0
f 0
ccs 15
cts 15
cp 1
wmc 11
lcom 1
cbo 1

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A addRoute() 0 11 4
A addGroup() 0 13 4
A direct() 0 4 1
A getData() 0 4 1
1
<?php
2
3
namespace Buttress\Concrete\Route;
4
5
use FastRoute\RouteCollector as Collector;
6
7
/**
8
 * A RouteCollector wrapper that adapts the API for CLI commands
9
 */
10
final class RouteCollector
11
{
12
13
    private $collector;
14
15 9
    public function __construct(Collector $collector)
16
    {
17 9
        $this->collector = $collector;
18 9
    }
19
20
    /**
21
     * Adds a route to the collection.
22
     * Routes MUST be registered using "/" as a delimiter.
23
     *
24
     * The syntax used in the $route string depends on the used route parser.
25
     *
26
     * @param string $route
27
     * @param mixed $handler
28
     */
29 3
    public function addRoute($route, $handler)
30
    {
31 3
        $routes = $route;
32 3
        if (!is_array($routes) && !$routes instanceof \Traversable) {
33
            $routes = [$route];
34
        }
35
36
        foreach ($routes as $string) {
37
            $this->collector->addRoute('get', $string, $handler);
38
        }
39
    }
40
41
    /**
42
     * Create a route group with a common prefix.
43
     *
44 3
     * All routes created in the passed callback will have the given group prefix prepended.
45 3
     *
46 3
     * @param string $prefix
47 3
     * @param callable $callback
48
     */
49
    public function addGroup($prefix, callable $callback)
50
    {
51
        $prefixes = $prefix;
52
        if (!is_array($prefixes) && !$prefixes instanceof \Traversable) {
53
            $prefixes = [$prefix];
54 3
        }
55
56 3
        foreach ($prefixes as $string) {
57 3
            $this->collector->addGroup($string . ':', function (Collector $collector) use ($callback) {
58
                return $callback(new RouteCollector($collector));
59
            });
60
        }
61
    }
62
63
    /**
64 3
     * Add routes directly to the contained collector
65
     *
66 3
     * @param callable $callback
67
     */
68
    public function direct(callable $callback)
69
    {
70
        $callback($this->collector);
71
    }
72
73
    /**
74
     * Returns the collected route data, as provided by the data generator.
75
     *
76
     * @return array
77
     */
78
    public function getData()
79
    {
80
        return $this->collector->getData();
81
    }
82
}
83