Completed
Push — master ( b7581d...0513b2 )
by
unknown
02:25 queued 42s
created

Utils   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 59
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2

Importance

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

3 Methods

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