7
7
use Peak \ArrayValidation \Exception \InvalidStructureException ;
8
8
use Peak \ArrayValidation \Exception \InvalidTypeException ;
9
9
10
- class StrictArrayValidator
10
+ class StrictValidation implements ValidationInterface
11
11
{
12
12
/**
13
- * @var ArrayValidation
13
+ * @var Validator
14
14
*/
15
- private $ arrayValidation ;
15
+ private $ validator ;
16
16
17
17
/**
18
18
* @var array
@@ -28,40 +28,41 @@ class StrictArrayValidator
28
28
* @var array
29
29
*/
30
30
private $ messages = [
31
+ 'expectedN ' => '{dataName}invalid data, expected {nExpected} element(s), received {nReceived} element(s) ' ,
31
32
'expected ' => '{dataName}invalid data, expected {expectedType} [{keysExpected}], received [{keysReceived}] ' ,
32
33
'type ' => '{dataName}invalid type for key [{key}], type {expectedType} is expected ' ,
33
34
];
34
35
35
36
/**
36
- * StrictArrayValidator constructor.
37
+ * StrictValidation constructor.
37
38
* @param array $data
38
39
* @param string|null $dataName
39
- * @param ArrayValidation |null $arrayValidation
40
+ * @param Validator |null $validator
40
41
*/
41
- public function __construct (array $ data , string $ dataName = null , ArrayValidation $ arrayValidation = null )
42
+ public function __construct (array $ data , string $ dataName = null , Validator $ validator = null )
42
43
{
43
44
$ this ->data = $ data ;
44
45
$ this ->dataName = $ dataName ;
45
- if (!isset ($ arrayValidation )) {
46
- $ arrayValidation = new ArrayValidation ();
46
+ if (!isset ($ validator )) {
47
+ $ validator = new Validator ();
47
48
}
48
- $ this ->arrayValidation = $ arrayValidation ;
49
+ $ this ->validator = $ validator ;
49
50
}
50
51
51
52
/**
52
- * @param array $keysName
53
+ * @param array $keys
53
54
* @return $this
54
55
* @throws InvalidStructureException
55
56
*/
56
- public function expectExactlyKeys (array $ keysName )
57
+ public function expectExactlyKeys (array $ keys )
57
58
{
58
- if ($ this ->arrayValidation ->expectExactlyKeys ($ this ->data , $ keysName ) === false ) {
59
+ if ($ this ->validator ->expectExactlyKeys ($ this ->data , $ keys ) === false ) {
59
60
$ keysReceived = array_keys ($ this ->data );
60
- natsort ($ keysName );
61
+ natsort ($ keys );
61
62
natsort ($ keysReceived );
62
63
$ message = $ this ->getErrorMessage ('expected ' , [
63
64
'expectedType ' => 'exactly keys ' ,
64
- 'keysExpected ' => implode (', ' , $ keysName ),
65
+ 'keysExpected ' => implode (', ' , $ keys ),
65
66
'keysReceived ' => implode (', ' , $ keysReceived )
66
67
]);
67
68
throw new InvalidStructureException ($ message );
@@ -70,19 +71,19 @@ public function expectExactlyKeys(array $keysName)
70
71
}
71
72
72
73
/**
73
- * @param array $keysName
74
+ * @param array $keys
74
75
* @return $this
75
76
* @throws InvalidStructureException
76
77
*/
77
- public function expectAtLeastKeys (array $ keysName )
78
+ public function expectAtLeastKeys (array $ keys )
78
79
{
79
- if ($ this ->arrayValidation ->expectAtLeastKeys ($ this ->data , $ keysName ) === false ) {
80
+ if ($ this ->validator ->expectAtLeastKeys ($ this ->data , $ keys ) === false ) {
80
81
$ keysReceived = array_keys ($ this ->data );
81
- natsort ($ keysName );
82
+ natsort ($ keys );
82
83
natsort ($ keysReceived );
83
84
$ message = $ this ->getErrorMessage ('expected ' , [
84
85
'expectedType ' => 'at least keys ' ,
85
- 'keysExpected ' => implode (', ' , $ keysName ),
86
+ 'keysExpected ' => implode (', ' , $ keys ),
86
87
'keysReceived ' => implode (', ' , $ keysReceived )
87
88
]);
88
89
throw new InvalidStructureException ($ message );
@@ -91,26 +92,67 @@ public function expectAtLeastKeys(array $keysName)
91
92
}
92
93
93
94
/**
94
- * @param array $keysName
95
+ * @param array $keys
95
96
* @return $this
96
97
* @throws InvalidStructureException
97
98
*/
98
- public function expectOnlyKeys (array $ keysName )
99
+ public function expectOnlyKeys (array $ keys )
99
100
{
100
- if ($ this ->arrayValidation ->expectOnlyKeys ($ this ->data , $ keysName ) === false ) {
101
+ if ($ this ->validator ->expectOnlyKeys ($ this ->data , $ keys ) === false ) {
101
102
$ keysReceived = array_keys ($ this ->data );
102
- natsort ($ keysName );
103
+ natsort ($ keys );
103
104
natsort ($ keysReceived );
104
105
$ message = $ this ->getErrorMessage ('expected ' , [
105
106
'expectedType ' => 'only keys ' ,
106
- 'keysExpected ' => implode (', ' , $ keysName ),
107
+ 'keysExpected ' => implode (', ' , $ keys ),
108
+ 'keysReceived ' => implode (', ' , $ keysReceived )
109
+ ]);
110
+ throw new InvalidStructureException ($ message );
111
+ }
112
+ return $ this ;
113
+ }
114
+
115
+ /**
116
+ * @param array $keys
117
+ * @return $this
118
+ * @throws InvalidStructureException
119
+ */
120
+ public function expectOnlyOneFromKeys (array $ keys )
121
+ {
122
+ if ($ this ->validator ->expectOnlyOneFromKeys ($ this ->data , $ keys ) === false ) {
123
+ $ keysReceived = array_keys ($ this ->data );
124
+ natsort ($ keys );
125
+ natsort ($ keysReceived );
126
+ $ message = $ this ->getErrorMessage ('expected ' , [
127
+ 'expectedType ' => 'only one of keys ' ,
128
+ 'keysExpected ' => implode (', ' , $ keys ),
107
129
'keysReceived ' => implode (', ' , $ keysReceived )
108
130
]);
109
131
throw new InvalidStructureException ($ message );
110
132
}
111
133
return $ this ;
112
134
}
113
135
136
+ /**
137
+ * @param int $n
138
+ * @return $this
139
+ * @throws InvalidStructureException
140
+ */
141
+ public function expectNKeys (int $ n )
142
+ {
143
+ if ($ this ->validator ->expectNKeys ($ this ->data , $ n ) === false ) {
144
+ $ keysReceived = array_keys ($ this ->data );
145
+ natsort ($ keysReceived );
146
+ $ message = $ this ->getErrorMessage ('expectedN ' , [
147
+ 'expectedType ' => 'only N keys ' ,
148
+ 'nExpected ' => $ n ,
149
+ 'nReceived ' => count ($ keysReceived )
150
+ ]);
151
+ throw new InvalidStructureException ($ message );
152
+ }
153
+ return $ this ;
154
+ }
155
+
114
156
/**
115
157
* @param string $key
116
158
* @param bool $acceptNull
@@ -119,7 +161,7 @@ public function expectOnlyKeys(array $keysName)
119
161
*/
120
162
public function expectKeyToBeArray (string $ key , bool $ acceptNull = false )
121
163
{
122
- if (array_key_exists ($ key , $ this ->data ) && $ this ->arrayValidation ->expectKeyToBeArray ($ this ->data , $ key , $ acceptNull ) === false ) {
164
+ if (array_key_exists ($ key , $ this ->data ) && $ this ->validator ->expectKeyToBeArray ($ this ->data , $ key , $ acceptNull ) === false ) {
123
165
$ message = $ this ->getErrorMessage ('type ' , [
124
166
'key ' => $ key ,
125
167
'expectedType ' => 'array ' ,
@@ -137,7 +179,7 @@ public function expectKeyToBeArray(string $key, bool $acceptNull = false)
137
179
*/
138
180
public function expectKeyToBeInteger (string $ key , bool $ acceptNull = false )
139
181
{
140
- if (array_key_exists ($ key , $ this ->data ) && $ this ->arrayValidation ->expectKeyToBeInteger ($ this ->data , $ key , $ acceptNull ) === false ) {
182
+ if (array_key_exists ($ key , $ this ->data ) && $ this ->validator ->expectKeyToBeInteger ($ this ->data , $ key , $ acceptNull ) === false ) {
141
183
$ message = $ this ->getErrorMessage ('type ' , [
142
184
'key ' => $ key ,
143
185
'expectedType ' => 'integer ' ,
@@ -155,7 +197,7 @@ public function expectKeyToBeInteger(string $key, bool $acceptNull = false)
155
197
*/
156
198
public function expectKeyToBeFloat (string $ key , bool $ acceptNull = false )
157
199
{
158
- if (array_key_exists ($ key , $ this ->data ) && $ this ->arrayValidation ->expectKeyToBeFloat ($ this ->data , $ key , $ acceptNull ) === false ) {
200
+ if (array_key_exists ($ key , $ this ->data ) && $ this ->validator ->expectKeyToBeFloat ($ this ->data , $ key , $ acceptNull ) === false ) {
159
201
$ message = $ this ->getErrorMessage ('type ' , [
160
202
'key ' => $ key ,
161
203
'expectedType ' => 'float ' ,
@@ -173,7 +215,7 @@ public function expectKeyToBeFloat(string $key, bool $acceptNull = false)
173
215
*/
174
216
public function expectKeyToBeString (string $ key , bool $ acceptNull = false )
175
217
{
176
- if (array_key_exists ($ key , $ this ->data ) && $ this ->arrayValidation ->expectKeyToBeString ($ this ->data , $ key , $ acceptNull ) === false ) {
218
+ if (array_key_exists ($ key , $ this ->data ) && $ this ->validator ->expectKeyToBeString ($ this ->data , $ key , $ acceptNull ) === false ) {
177
219
$ message = $ this ->getErrorMessage ('type ' , [
178
220
'key ' => $ key ,
179
221
'expectedType ' => 'string ' ,
@@ -191,7 +233,7 @@ public function expectKeyToBeString(string $key, bool $acceptNull = false)
191
233
*/
192
234
public function expectKeyToBeBoolean (string $ key , bool $ acceptNull = false )
193
235
{
194
- if (array_key_exists ($ key , $ this ->data ) && $ this ->arrayValidation ->expectKeyToBeBoolean ($ this ->data , $ key , $ acceptNull ) === false ) {
236
+ if (array_key_exists ($ key , $ this ->data ) && $ this ->validator ->expectKeyToBeBoolean ($ this ->data , $ key , $ acceptNull ) === false ) {
195
237
$ message = $ this ->getErrorMessage ('type ' , [
196
238
'key ' => $ key ,
197
239
'expectedType ' => 'boolean ' ,
0 commit comments