Completed
Pull Request — master (#500)
by
unknown
01:44
created

Utils   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 36
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2

Importance

Changes 0
Metric Value
wmc 4
lcom 0
cbo 2
dl 0
loc 36
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getFullUrl() 0 5 1
A replaceUrlParameterBindings() 0 18 3
1
<?php
2
3
4
namespace Mpociot\ApiDoc\Tools;
5
6
7
use Illuminate\Routing\Route;
8
use Illuminate\Support\Str;
9
10
class Utils
11
{
12
    public static function getFullUrl(Route $route, array $bindings = []): string
13
    {
14
        $uri = $route->uri();
15
        return self::replaceUrlParameterBindings($uri, $bindings);
16
    }
17
18
    /**
19
     * Transform parameters in URLs into real values (/users/{user} -> /users/2).
20
     * Uses bindings specified by caller, otherwise just uses '1'.
21
     *
22
     * @param string $uri
23
     * @param array $bindings
24
     *
25
     * @return mixed
26
     */
27
    protected static function replaceUrlParameterBindings(string $uri, array $bindings)
28
    {
29
        foreach ($bindings as $path => $binding) {
30
            // So we can support partial bindings like
31
            // 'bindings' => [
32
            //  'foo/{type}' => 4,
33
            //  'bar/{type}' => 2
34
            //],
35
            if (Str::is("*$path*", $uri)) {
36
                preg_match('/({.+?})/', $path, $parameter);
37
                $uri = str_replace("{$parameter['1']}", $binding, $uri);
38
            }
39
        }
40
        // Replace any unbound parameters with '1'
41
        $uri = preg_replace('/{(.+?)}/', 1, $uri);
42
43
        return $uri;
44
    }
45
}
46