-
Notifications
You must be signed in to change notification settings - Fork 6
/
QueryBag.php
103 lines (80 loc) · 2.39 KB
/
QueryBag.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<?php
declare(strict_types=1);
namespace Enqueue\Dsn;
class QueryBag
{
/**
* @var array
*/
private $query;
public function __construct(array $query)
{
$this->query = $query;
}
public function toArray(): array
{
return $this->query;
}
public function getString(string $name, string $default = null): ?string
{
return array_key_exists($name, $this->query) ? $this->query[$name] : $default;
}
public function getDecimal(string $name, int $default = null): ?int
{
$value = $this->getString($name);
if (null === $value) {
return $default;
}
if (false == preg_match('/^[\+\-]?[0-9]*$/', $value)) {
throw InvalidQueryParameterTypeException::create($name, 'decimal');
}
return (int) $value;
}
public function getOctal(string $name, int $default = null): ?int
{
$value = $this->getString($name);
if (null === $value) {
return $default;
}
if (false == preg_match('/^0[\+\-]?[0-7]*$/', $value)) {
throw InvalidQueryParameterTypeException::create($name, 'octal');
}
return intval($value, 8);
}
public function getFloat(string $name, float $default = null): ?float
{
$value = $this->getString($name);
if (null === $value) {
return $default;
}
if (false == is_numeric($value)) {
throw InvalidQueryParameterTypeException::create($name, 'float');
}
return (float) $value;
}
public function getBool(string $name, bool $default = null): ?bool
{
$value = $this->getString($name);
if (null === $value) {
return $default;
}
if (in_array($value, ['', '0', 'false'], true)) {
return false;
}
if (in_array($value, ['1', 'true'], true)) {
return true;
}
throw InvalidQueryParameterTypeException::create($name, 'bool');
}
public function getArray(string $name, array $default = []): self
{
if (false == array_key_exists($name, $this->query)) {
return new self($default);
}
$value = $this->query[$name];
if (is_array($value)) {
return new self($value);
}
throw InvalidQueryParameterTypeException::create($name, 'array');
}
}