Passed
Push — master ( 6b35fa...ccb079 )
by Paul
10:24 queued 05:13
created

Str::startsWith()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

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