Passed
Push — master ( ece31d...41b8a6 )
by Paul
10:20 queued 04:17
created

Str::removePrefix()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 3
c 1
b 0
f 0
nc 2
nop 2
dl 0
loc 5
ccs 4
cts 4
cp 1
crap 2
rs 10
1
<?php
2
3
namespace GeminiLabs\SiteReviews\HelperTraits;
4
5
trait Str
6
{
7
    /**
8
     * @param string $string
9
     * @return string
10
     */
11 4
    public function camelCase($string)
12
    {
13 4
        $string = ucwords(str_replace(['-', '_'], ' ', trim($string)));
14 4
        return str_replace(' ', '', $string);
15
    }
16
17
    /**
18
     * @param string $name
19
     * @param string $nameType first|first_initial|initials|last|last_initial
20
     * @param string $initialType period|period_space|space
21
     * @return string
22
     */
23
    public function convertName($name, $nameType = '', $initialType = '')
24
    {
25
        $names = preg_split('/\W/', $name, 0, PREG_SPLIT_NO_EMPTY);
26
        $firstName = array_shift($names);
27
        $lastName = array_pop($names);
28
        $initialTypes = [
29
            'period' => '.',
30
            'period_space' => '. ',
31
            'space' => ' ',
32
        ];
33
        $initialPunctuation = glsr_get($initialTypes, $initialType, ' ');
34
        if ('initials' == $nameType) {
35
            return $this->convertToInitials($name, $initialPunctuation);
36
        }
37
        $nameTypes = [
38
            'first' => $firstName,
39
            'first_initial' => substr($firstName, 0, 1).$initialPunctuation.$lastName,
40
            'last' => $lastName,
41
            'last_initial' => $firstName.' '.substr($lastName, 0, 1).$initialPunctuation,
42
        ];
43
        return trim(glsr_get($nameTypes, $nameType, $name));
44
    }
45
46
    /**
47
     * @param string $path
48
     * @param string $prefix
49
     * @return string
50
     */
51 1
    public function convertPathToId($path, $prefix = '')
52
    {
53 1
        return str_replace(['[', ']'], ['-', ''], $this->convertPathToName($path, $prefix));
54
    }
55
56
    /**
57
     * @param string $path
58
     * @param string $prefix
59
     * @return string
60
     */
61 2
    public function convertPathToName($path, $prefix = '')
62
    {
63 2
        $levels = explode('.', $path);
64 2
        return array_reduce($levels, function ($result, $value) {
65 2
            return $result .= '['.$value.']';
66 2
        }, $prefix);
67
    }
68
69
    /**
70
     * @param string $name
71
     * @param string $initialPunctuation
72
     * @return string
73
     */
74
    public function convertToInitials($name, $initialPunctuation = '')
75
    {
76
        preg_match_all('/(?<=\s|\b)\pL/u', $name, $matches);
77
        return array_reduce($matches[0], function ($carry, $word) use ($initialPunctuation) {
78
            return $carry.strtoupper(substr($word, 0, 1)).$initialPunctuation;
79
        });
80
    }
81
82
    /**
83
     * @param string $string
84
     * @return string
85
     */
86 8
    public function dashCase($string)
87
    {
88 8
        return str_replace('_', '-', $this->snakeCase($string));
89
    }
90
91
    /**
92
     * @param string $needle
93
     * @param string $haystack
94
     * @return bool
95
     */
96 1
    public function endsWith($needle, $haystack)
97
    {
98 1
        $length = strlen($needle);
99 1
        return 0 != $length
100 1
            ? substr($haystack, -$length) === $needle
101 1
            : true;
102
    }
103
104
    /**
105
     * @param string $prefix
106
     * @param string $string
107
     * @param string|null $trim
108
     * @return string
109
     */
110 2
    public function prefix($prefix, $string, $trim = null)
111
    {
112 2
        if (null === $trim) {
113 2
            $trim = $prefix;
114
        }
115 2
        return $prefix.trim($this->removePrefix($trim, $string));
116
    }
117
118
    /**
119
     * @param string $prefix
120
     * @param string $string
121
     * @return string
122
     */
123 8
    public function removePrefix($prefix, $string)
124
    {
125 8
        return $this->startsWith($prefix, $string)
126 7
            ? substr($string, strlen($prefix))
127 8
            : $string;
128
    }
129
130
    /**
131
     * @param string $string
132
     * @return string
133
     */
134 9
    public function snakeCase($string)
135
    {
136 9
        if (!ctype_lower($string)) {
137 9
            $string = preg_replace('/\s+/u', '', $string);
138 9
            $string = preg_replace('/(.)(?=[A-Z])/u', '$1_', $string);
139 9
            $string = function_exists('mb_strtolower')
140 9
                ? mb_strtolower($string, 'UTF-8')
141 9
                : strtolower($string);
142
        }
143 9
        return str_replace('-', '_', $string);
144
    }
145
146
    /**
147
     * @param string $needle
148
     * @param string $haystack
149
     * @return bool
150
     */
151 9
    public function startsWith($needle, $haystack)
152
    {
153 9
        return substr($haystack, 0, strlen($needle)) === $needle;
154
    }
155
156
    /**
157
     * @param string $string
158
     * @param int $length
159
     * @return string
160
     */
161
    public function truncate($string, $length)
162
    {
163
        return strlen($string) > $length
164
            ? substr($string, 0, $length)
165
            : $string;
166
    }
167
}
168