Total Complexity | 3 |
Total Lines | 53 |
Duplicated Lines | 0 % |
Changes | 0 |
1 | <?php |
||
8 | class UrlCompiler implements Compiler |
||
9 | { |
||
10 | /** |
||
11 | * The parser instance. |
||
12 | * |
||
13 | * @var \Lincable\Parsers\Parser |
||
14 | */ |
||
15 | protected $parser; |
||
16 | |||
17 | /** |
||
18 | * Create a new class instance. |
||
19 | * |
||
20 | * @param \Lincable\Parsers\Parser $parser |
||
21 | * @return void |
||
22 | */ |
||
23 | public function __construct(Parser $parser) |
||
24 | { |
||
25 | $this->parser = $parser; |
||
26 | } |
||
27 | |||
28 | /** |
||
29 | * Get all dynamic parameters on url. |
||
30 | * |
||
31 | * @param string $url |
||
32 | * @return array |
||
33 | */ |
||
34 | public function compile(string $url): array |
||
35 | { |
||
36 | $parameters = $this->parseUrlFragments($url); |
||
37 | |||
38 | $dynamicParameters = array_filter($parameters, function ($parameter) { |
||
39 | |||
40 | // Determine wheter the parameter is dynamic on parser |
||
41 | // and should be kept. |
||
42 | return $this->parser->isParameterDynamic($parameter); |
||
43 | }); |
||
44 | |||
45 | return array_flatten(array_map(function ($parameter) { |
||
46 | |||
47 | // Return the matches for the dynamic parameter. |
||
48 | return $this->parser->getMatches($parameter); |
||
49 | }, $dynamicParameters)); |
||
50 | } |
||
51 | |||
52 | /** |
||
53 | * Return all url fragments. |
||
54 | * |
||
55 | * @param string $url |
||
56 | * @return array |
||
57 | */ |
||
58 | public function parseUrlFragments(string $url): array |
||
61 | } |
||
62 | } |
||
63 |