Passed
Push — master ( 97dfd7...a7f6db )
by Ivan
02:32 queued 12s
created

Canonicalizer::uri()   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 Boomdraw\Canonicalizer\Repositories;
4
5
use Boomdraw\Canonicalizer\Contracts\Canonicalizer as CanonicalizerContract;
6
use Illuminate\Support\Str;
7
use Illuminate\Support\Traits\Macroable;
8
9
class Canonicalizer implements CanonicalizerContract
10
{
11
    use Macroable;
0 ignored issues
show
Bug introduced by
The trait Illuminate\Support\Traits\Macroable requires the property $name which is not provided by Boomdraw\Canonicalizer\Repositories\Canonicalizer.
Loading history...
12
13
    /**
14
     * Canonicalize string.
15
     *
16
     * @param string $string
17
     * @param bool $nullEmpty
18
     * @return string|null
19
     */
20 2
    public static function canonicalize(string $string, bool $nullEmpty = true): ?string
21
    {
22 2
        if ('' === $string) {
23 1
            return $nullEmpty ? null : '';
24
        }
25
26 2
        $encoding = mb_detect_encoding($string);
27
28 2
        $result = $encoding
29 2
            ? mb_convert_case($string, MB_CASE_LOWER, $encoding)
30 2
            : mb_convert_case($string, MB_CASE_LOWER);
31
32 2
        return $result;
33
    }
34
35
    /**
36
     * Canonicalize email.
37
     *
38
     * @param string $email
39
     * @return string|null
40
     */
41 1
    public static function email(string $email): ?string
42
    {
43 1
        if (false === strpos($email, '@')) {
44 1
            return null;
45
        }
46
47 1
        $email = self::canonicalize($email);
48 1
        $emailExploded = explode('@', $email);
49 1
        $email = str_replace('.', '', $emailExploded[0]);
50 1
        $email .= '@'.$emailExploded[1];
51
52 1
        return $email;
53
    }
54
55
    /**
56
     * Canonicalize slug.
57
     *
58
     * @param string $title
59
     * @param string $separator
60
     * @param string|null $language
61
     * @return string
62
     */
63 1
    public static function slug(string $title, string $separator = '-', ?string $language = 'en'): string
64
    {
65 1
        return Str::slug($title, $separator, $language);
66
    }
67
68
    /**
69
     * Canonicalize url.
70
     *
71
     * @param string $url
72
     * @param string $separator
73
     * @return string
74
     */
75 2
    public static function url(string $url, string $separator = '-'): string
76
    {
77 2
        $url = trim($url, " \t\n\r\0\x0B/\\");
78 2
        $url = explode('/', $url);
79
        array_walk($url, function (&$item) use ($separator) {
80 2
            $item = Str::slug($item, $separator);
81 2
        });
82
83 2
        return implode('/', $url);
84
    }
85
86
    /**
87
     * Canonicalize uri.
88
     *
89
     * @param string $uri
90
     * @param string $separator
91
     * @return string
92
     */
93 1
    public static function uri(string $uri, string $separator = '-'): string
94
    {
95 1
        return self::url($uri, $separator);
96
    }
97
}
98