Passed
Push — master ( a406f9...3ba855 )
by Paul
08:12 queued 04:00
created

Str::endsWith()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2

Importance

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