Completed
Push — dev ( a62e57...4efd8c )
by Yan
02:03
created

BuildClassnames::removeBackslash()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 1
dl 0
loc 9
rs 9.9666
c 0
b 0
f 0
1
<?php
2
3
namespace Lincable\Concerns;
4
5
use Illuminate\Support\Str;
6
7
trait BuildClassnames
8
{
9
    /**
10
     * Determine wheter the case to use is camel.
11
     *
12
     * @var bool
13
     */
14
    protected $camelCase = true;
15
16
    /**
17
     * Return the basename of class do camel case removing
18
     * unecessary suffixes.
19
     *
20
     * @param  mixed  $class
21
     * @param  string $suffix
22
     * @return mixed
23
     */
24
    protected function nameFromClass($class, string $suffix = null)
25
    {
26
        $name = $this->convertCase($class);
27
            
28
        return Str::endsWith($name, $suffix)
29
            ? substr($name, 0, strlen($suffix) * -1)
30
            : $name;
31
    }
32
33
    /**
34
     * Return the namespace from array of classes.
35
     *
36
     * @param  array $classes
37
     * @return string
38
     */
39
    protected function buildNamespace(array $classes)
40
    {
41
        // Transform all class names.
42
        array_walk($classes, function (&$class, $key) {
43
44
            // Determine wheter class starts with backslash.
45
            $appends = starts_with($class, '\\');
46
47
            // Remove backslash from class and studly case it.
48
            $class = Str::studly($this->removeBackslash($class));
49
50
            if ($key == 0 && $appends) {
51
52
                // Appends a backslash for first class if required.
53
                $class = '\\'.$class;
54
            }
55
        });
56
        
57
        return implode('\\', $classes);
58
    }
59
60
    /**
61
     * Return the class basename to camel case.
62
     *
63
     * @param  mixed $class
64
     * @return string
65
     */
66
    protected function classToCamelCase($class)
67
    {
68
        return Str::camel($class);
69
    }
70
71
    /**
72
     * Return the class basename to snake case.
73
     *
74
     * @param  mixed $class
75
     * @return string
76
     */
77
    protected function classToSnakeCase($class)
78
    {
79
        return Str::snake($class);
80
    }
81
82
    /**
83
     * Remove the backslash on start of class.
84
     *
85
     * @param  string $class
86
     * @return string
87
     */
88
    protected function removeBackslash(string $class)
89
    {
90
        if (starts_with($class, '\\')) {
91
        
92
            // Get the class without backslash.
93
            $class = str_after($class, '\\');
94
        }
95
96
        return $class;
97
    }
98
99
    /**
100
     * Convert the class basenmae.
101
     *
102
     * @param  string $class
103
     * @return string
104
     */
105
    protected function convertCase(string $class)
106
    {
107
        $basename = class_basename($class);
108
109
        if ($this->camelCase) {
110
            return $this->classToCamelCase($basename);
111
        }
112
113
        return $this->classToSnakeCase($basename);
114
    }
115
}
116