Completed
Push — master ( c6b316...f71d6f )
by BENOIT
01:20
created

NativeRenderer::withSeparator()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
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
     * @return NativeRenderer
30
     */
31
    public static function rfc1738(): self
32
    {
33
        return new self(PHP_QUERY_RFC1738);
34
    }
35
36
    /**
37
     * @return NativeRenderer
38
     */
39
    public static function rfc3986(): self
40
    {
41
        return new self(PHP_QUERY_RFC3986);
42
    }
43
44
    /**
45
     * @return int
46
     */
47
    public function getEncoding(): int
48
    {
49
        return $this->encoding;
50
    }
51
52
    /**
53
     * @param int $encoding
54
     * @return NativeRenderer
55
     */
56
    public function withEncoding(int $encoding): QueryStringRendererInterface
57
    {
58
        if (!in_array($encoding, [PHP_QUERY_RFC1738, PHP_QUERY_RFC3986])) {
59
            throw new \InvalidArgumentException("Invalid encoding.");
60
        }
61
62
        return new self($encoding);
63
    }
64
65
    /**
66
     * @return null|string
67
     */
68
    public function getSeparator(): ?string
69
    {
70
        return $this->separator;
71
    }
72
73
    /**
74
     * @param null|string $separator
75
     * @return QueryString
76
     */
77
    public function withSeparator(?string $separator): QueryStringRendererInterface
78
    {
79
        $clone = clone $this;
80
        $clone->separator = $separator;
81
        return $clone;
82
    }
83
84
    /**
85
     * @inheritDoc
86
     */
87
    public function render(QueryString $queryString): string
88
    {
89
        return http_build_query(
90
            $queryString->getParams(),
91
            null,
92
            $this->separator ?? ini_get('arg_separator.output'),
93
            $this->encoding
94
        );
95
    }
96
}
97