Passed
Branch php74 (0b5728)
by Ayan
09:34
created

Mime::processMime()   A

Complexity

Conditions 5
Paths 5

Size

Total Lines 28
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 17
CRAP Score 5.0042

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 21
c 3
b 0
f 0
dl 0
loc 28
ccs 17
cts 18
cp 0.9444
rs 9.2728
cc 5
nc 5
nop 1
crap 5.0042
1
<?php
2
3
namespace Phprest\Util;
4
5
use League\Container\Container;
6
use Phprest\Application;
7
use Phprest\Util\DataStructure\MimeProcessResult;
8
9
trait Mime
10
{
11
12 17
    protected function processMime(string $mime): MimeProcessResult
13
    {
14 17
        $vendor             = (string) $this->getContainer()->get(Application::CONTAINER_ID_VENDOR);
15 17
        $apiVersion         = (string) $this->getContainer()->get(Application::CONTAINER_ID_API_VERSION);
16 17
        $apiVersionRegExp   = Application::API_VERSION_REG_EXP;
17 17
        $format             = null;
18
19 17
        if (preg_match(
20 17
            '#application/vnd\.' . $vendor . '-v' . $apiVersionRegExp . '\+(xml|json)#',
21
            $mime,
22
            $matches
23
        )) {
24 1
            [$mime, $apiVersion, $format] = $matches;
25
        } elseif (preg_match(
26 16
            '#application/vnd\.' . $vendor . '\+(xml|json).*?version=' . $apiVersionRegExp . '#',
27
            $mime,
28
            $matches
29
        )) {
30 1
            [$mime, $format, $apiVersion] = $matches;
31 15
        } elseif ('application/json' === $mime) {
32 3
            $format = 'json';
33 3
            $mime   = 'application/vnd.' . $vendor . '-v' . $apiVersion . '+json';
34 12
        } elseif ('application/xml' === $mime) {
35 2
            $format = 'xml';
36 2
            $mime   = 'application/vnd.' . $vendor . '-v' . $apiVersion . '+xml';
37
        }
38
39 17
        return new MimeProcessResult($mime, $vendor, $apiVersion, $format);
40
    }
41
42
    /**
43
     * Returns the DI container.
44
     *
45
     * @return Container
46
     */
47
    abstract protected function getContainer();
48
}
49