Completed
Push — master ( 93e4a5...7cf6ff )
by BENOIT
01:21
created

NativeRenderer::validateEncoding()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 3
nc 2
nop 1
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace BenTools\QueryString\Renderer;
4
5
use BenTools\QueryString\QueryString;
6
7
final class NativeRenderer implements QueryStringRendererInterface
8
{
9
    /**
10
     * @var int
11
     */
12
    private $encoding;
13
14
    /**
15
     * @var string|null
16
     */
17
    private $separator;
18
19
    /**
20
     * NativeRenderer constructor.
21
     * @param int $encoding
22
     */
23
    protected function __construct(int $encoding)
24
    {
25
        $this->encoding = $encoding;
26
    }
27
28
    /**
29
     * @param int $encoding
30
     * @return NativeRenderer
31
     * @throws \InvalidArgumentException
32
     */
33
    public static function factory(int $encoding = self::DEFAULT_ENCODING): self
34
    {
35
        self::validateEncoding($encoding);
36
37
        return new self($encoding);
38
    }
39
40
    /**
41
     * @return int
42
     */
43
    public function getEncoding(): int
44
    {
45
        return $this->encoding;
46
    }
47
48
    /**
49
     * @param int $encoding
50
     * @return NativeRenderer
51
     */
52
    public function withEncoding(int $encoding): QueryStringRendererInterface
53
    {
54
        self::validateEncoding($encoding);
55
56
        return new self($encoding);
57
    }
58
59
    /**
60
     * @return null|string
61
     */
62
    public function getSeparator(): ?string
63
    {
64
        return $this->separator;
65
    }
66
67
    /**
68
     * @param null|string $separator
69
     * @return QueryString
70
     */
71
    public function withSeparator(?string $separator): QueryStringRendererInterface
72
    {
73
        $clone = clone $this;
74
        $clone->separator = $separator;
75
76
        return $clone;
77
    }
78
79
    /**
80
     * @inheritDoc
81
     */
82
    public function render(QueryString $queryString): string
83
    {
84
        return http_build_query(
85
            $queryString->getParams(),
86
            null,
87
            $this->separator ?? ini_get('arg_separator.output'),
88
            $this->encoding
89
        );
90
    }
91
92
    /**
93
     * @param int $encoding
94
     * @throws \InvalidArgumentException
95
     */
96
    private static function validateEncoding(int $encoding): void
97
    {
98
        if (!in_array($encoding, [PHP_QUERY_RFC1738, PHP_QUERY_RFC3986])) {
99
            throw new \InvalidArgumentException("Invalid encoding.");
100
        }
101
    }
102
}
103