Passed
Push — master ( ccb079...7906b4 )
by Paul
04:39
created

Str::convertToInitials()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 3
c 0
b 0
f 0
nc 1
nop 2
dl 0
loc 5
ccs 0
cts 3
cp 0
crap 2
rs 10
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Helpers;
4
5
class Str
6
{
7
    /**
8
     * @param string $subject
9
     * @param string $search
10
     * @return string
11
     */
12
    public static function afterLast($subject, $search)
13
    {
14
        return '' === $search
15
            ? $subject
16
            : array_reverse(explode($search, $subject))[0];
17
    }
18
19
    /**
20
     * @param string $subject
21
     * @param string $search
22
     * @return string
23
     */
24
    public static function before($subject, $search)
25
    {
26
        return $search === '' ? $subject : explode($search, $subject)[0];
27
    }
28
29
    /**
30
     * @param string $string
31
     * @return string
32
     */
33 10
    public static function camelCase($string)
34
    {
35 10
        $string = ucwords(str_replace(['-', '_'], ' ', trim($string)));
36 10
        return str_replace(' ', '', $string);
37
    }
38
39
    /**
40
     * @param string $haystack
41
     * @param string $needle
42
     * @return bool
43
     */
44 7
    public static function contains($haystack, $needle)
45
    {
46 7
        return false !== strpos($haystack, $needle);
47
    }
48
49
    /**
50
     * @param string $name
51
     * @param string $nameType first|first_initial|initials|last|last_initial
52
     * @param string $initialType period|period_space|space
53
     * @return string
54
     */
55
    public static function convertName($name, $nameType = '', $initialType = '')
56
    {
57
        $names = preg_split('/\W/', $name, 0, PREG_SPLIT_NO_EMPTY);
58
        $firstName = array_shift($names);
59
        $lastName = array_pop($names);
60
        $initialTypes = [
61
            'period' => '.',
62
            'period_space' => '. ',
63
            'space' => ' ',
64
        ];
65
        $initialPunctuation = (string) Arr::get($initialTypes, $initialType, ' ');
66
        if ('initials' == $nameType) {
67
            return static::convertToInitials($name, $initialPunctuation);
68
        }
69
        $nameTypes = [
70
            'first' => $firstName,
71
            'first_initial' => substr($firstName, 0, 1).$initialPunctuation.$lastName,
72
            'last' => $lastName,
73
            'last_initial' => $firstName.' '.substr($lastName, 0, 1).$initialPunctuation,
74
        ];
75
        return trim((string) Arr::get($nameTypes, $nameType, $name));
76
    }
77
78
    /**
79
     * @param string $path
80
     * @param string $prefix
81
     * @return string
82
     */
83 1
    public static function convertPathToId($path, $prefix = '')
84
    {
85 1
        return str_replace(['[', ']'], ['-', ''], static::convertPathToName($path, $prefix));
86
    }
87
88
    /**
89
     * @param string $path
90
     * @param string $prefix
91
     * @return string
92
     */
93 2
    public static function convertPathToName($path, $prefix = '')
94
    {
95 2
        $levels = explode('.', $path);
96
        return array_reduce($levels, function ($result, $value) {
97 2
            return $result .= '['.$value.']';
98 2
        }, $prefix);
99
    }
100
101
    /**
102
     * @param string $name
103
     * @param string $initialPunctuation
104
     * @return string
105
     */
106
    public static function convertToInitials($name, $initialPunctuation = '')
107
    {
108
        preg_match_all('/(?<=\s|\b)\pL/u', $name, $matches);
109
        return array_reduce($matches[0], function ($carry, $word) use ($initialPunctuation) {
110
            return $carry.strtoupper(substr($word, 0, 1)).$initialPunctuation;
111
        });
112
    }
113
114
    /**
115
     * @param string $string
116
     * @return string
117
     */
118 8
    public static function dashCase($string)
119
    {
120 8
        return str_replace('_', '-', static::snakeCase($string));
121
    }
122
123
    /**
124
     * @param string $needle
125
     * @param string $haystack
126
     * @return bool
127
     */
128 1
    public static function endsWith($needle, $haystack)
129
    {
130 1
        $length = strlen($needle);
131 1
        return 0 != $length
132 1
            ? substr($haystack, -$length) === $needle
133 1
            : true;
134
    }
135
136
    /**
137
     * @param string $prefix
138
     * @param string $string
139
     * @param string|null $trim
140
     * @return string
141
     */
142 2
    public static function prefix($prefix, $string, $trim = null)
143
    {
144 2
        if (empty($string)) {
145
            return $string;
146
        }
147 2
        if (null === $trim) {
148 2
            $trim = $prefix;
149
        }
150 2
        return $prefix.trim(static::removePrefix($trim, $string));
151
    }
152
153
    /**
154
     * @param string $prefix
155
     * @param string $string
156
     * @return string
157
     */
158 8
    public static function removePrefix($prefix, $string)
159
    {
160 8
        return static::startsWith($prefix, $string)
161 7
            ? substr($string, strlen($prefix))
162 8
            : $string;
163
    }
164
165
    /**
166
     * @param string $search
167
     * @param string $replace
168
     * @param string $subject
169
     * @return string
170
     */
171
    public static function replaceFirst($search, $replace, $subject)
172
    {
173
        if ($search == '') {
174
            return $subject;
175
        }
176
        $position = strpos($subject, $search);
177
        if ($position !== false) {
178
            return substr_replace($subject, $replace, $position, strlen($search));
179
        }
180
        return $subject;
181
    }
182
183
    /**
184
     * @param string $search
185
     * @param string $replace
186
     * @param string $subject
187
     * @return string
188
     */
189
    public static function replaceLast($search, $replace, $subject)
190
    {
191
        $position = strrpos($subject, $search);
192
        if ($position !== false) {
193
            return substr_replace($subject, $replace, $position, strlen($search));
194
        }
195
        return $subject;
196
    }
197
198
    /**
199
     * @param string $string
200
     * @return string
201
     */
202 9
    public static function snakeCase($string)
203
    {
204 9
        if (!ctype_lower($string)) {
205 9
            $string = preg_replace('/\s+/u', '', $string);
206 9
            $string = preg_replace('/(.)(?=[A-Z])/u', '$1_', $string);
207 9
            $string = function_exists('mb_strtolower')
208 9
                ? mb_strtolower($string, 'UTF-8')
209 9
                : strtolower($string);
210
        }
211 9
        return str_replace('-', '_', $string);
212
    }
213
214
    /**
215
     * @param string $needle
216
     * @param string $haystack
217
     * @return bool
218
     */
219 9
    public static function startsWith($needle, $haystack)
220
    {
221 9
        return substr($haystack, 0, strlen($needle)) === $needle;
222
    }
223
224
    /**
225
     * @param string $string
226
     * @param int $length
227
     * @return string
228
     */
229
    public static function truncate($string, $length)
230
    {
231
        return strlen($string) > $length
232
            ? substr($string, 0, $length)
233
            : $string;
234
    }
235
}
236