Skip to content

Commit eb204ea

Browse files
committed
Merge branch 'release/0.2.4'
2 parents 892e2f9 + e30703a commit eb204ea

File tree

3 files changed

+104
-75
lines changed

3 files changed

+104
-75
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "nonamephp/php7-common",
33
"description": "A collection of common PHP 7 libraries",
4-
"version": "0.2.3",
4+
"version": "0.2.4",
55
"license": "MIT",
66
"authors": [
77
{

src/Validator.php

Lines changed: 83 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -7,34 +7,34 @@
77
* @package Noname\Common
88
* @since 0.2.0
99
*
10-
* @method static bool is(string $type, mixed $value) Checks if value passes as type
11-
* @method static bool isNull(mixed $value) Checks if value is null
12-
* @method static bool isBool(mixed $value) Checks if value is boolean
13-
* @method static bool isBoolean(mixed $value) Checks if value is boolean
14-
* @method static bool isScalar(mixed $value) Checks if value is scalar
15-
* @method static bool isStr(mixed $value) Checks if value is string
16-
* @method static bool isString(mixed $value) Checks if value is string
17-
* @method static bool isInt(mixed $value) Checks if value is integer
18-
* @method static bool isInteger(mixed $value) Checks if value is integer
19-
* @method static bool isNum(mixed $value) Checks if value is numeric
20-
* @method static bool isNumeric(mixed $value) Checks if value is numeric
21-
* @method static bool isFloat(mixed $value) Checks if value is float
22-
* @method static bool isDouble(mixed $value) Checks if value is double
23-
* @method static bool isAlNum(mixed $value) Checks if value contains only alpha-numeric characters
24-
* @method static bool isAlphaNumeric(mixed $value) Checks if value contains only alpha-numeric characters
25-
* @method static bool isAlpha(mixed $value) Checks if value contains only alpha characters
26-
* @method static bool isArr(mixed $value) Checks if value is an array
27-
* @method static bool isArray(mixed $value) Checks if value is an array
28-
* @method static bool isObj(mixed $value) Checks if value is an object
29-
* @method static bool isObject(mixed $value) Checks if value is an object
30-
* @method static bool isClosure(mixed $value) Checks if value is instance of \Closure
31-
* @method static bool isCallable(mixed $value) Checks if value is callable
32-
* @method static bool isEmail(mixed $value) Checks if value is valid email address
33-
* @method static bool isIP(mixed $value) Checks if value is valid IPv4 or IPv6
34-
* @method static bool isIPv4(mixed $value) Checks if value is valid IPv4
35-
* @method static bool isIPv6(mixed $value) Checks if value is valid IPv6
36-
* @method static bool isDate(mixed $value) Checks if value is date/datetime
37-
* @method static bool isDateTime(mixed $value) Checks if value is date/datetime
10+
* @method static bool is(string $type, mixed $value, array $rule = []) Checks if value passes as type
11+
* @method static bool isNull(mixed $value, array $rule = []) Checks if value is null
12+
* @method static bool isBool(mixed $value, array $rule = []) Checks if value is boolean
13+
* @method static bool isBoolean(mixed $value, array $rule = []) Checks if value is boolean
14+
* @method static bool isScalar(mixed $value, array $rule = []) Checks if value is scalar
15+
* @method static bool isStr(mixed $value, array $rule = []) Checks if value is string
16+
* @method static bool isString(mixed $value, array $rule = []) Checks if value is string
17+
* @method static bool isInt(mixed $value, array $rule = []) Checks if value is integer
18+
* @method static bool isInteger(mixed $value, array $rule = []) Checks if value is integer
19+
* @method static bool isNum(mixed $value, array $rule = []) Checks if value is numeric
20+
* @method static bool isNumeric(mixed $value, array $rule = []) Checks if value is numeric
21+
* @method static bool isFloat(mixed $value, array $rule = []) Checks if value is float
22+
* @method static bool isDouble(mixed $value, array $rule = []) Checks if value is double
23+
* @method static bool isAlNum(mixed $value, array $rule = []) Checks if value contains only alpha-numeric characters
24+
* @method static bool isAlphaNumeric(mixed $value, array $rule = []) Checks if value contains only alpha-numeric characters
25+
* @method static bool isAlpha(mixed $value, array $rule = []) Checks if value contains only alpha characters
26+
* @method static bool isArr(mixed $value, array $rule = []) Checks if value is an array
27+
* @method static bool isArray(mixed $value, array $rule = []) Checks if value is an array
28+
* @method static bool isObj(mixed $value, array $rule = []) Checks if value is an object
29+
* @method static bool isObject(mixed $value, array $rule = []) Checks if value is an object
30+
* @method static bool isClosure(mixed $value, array $rule = []) Checks if value is instance of \Closure
31+
* @method static bool isCallable(mixed $value, array $rule = []) Checks if value is callable
32+
* @method static bool isEmail(mixed $value, array $rule = []) Checks if value is valid email address
33+
* @method static bool isIP(mixed $value, array $rule = []) Checks if value is valid IPv4 or IPv6
34+
* @method static bool isIPv4(mixed $value, array $rule = []) Checks if value is valid IPv4
35+
* @method static bool isIPv6(mixed $value, array $rule = []) Checks if value is valid IPv6
36+
* @method static bool isDate(mixed $value, array $rule = []) Checks if value is date/datetime
37+
* @method static bool isDateTime(mixed $value, array $rule = []) Checks if value is date/datetime
3838
*/
3939
class Validator
4040
{
@@ -118,18 +118,28 @@ public static function __callStatic($method, $arguments)
118118
$func = array_shift($parts);
119119
$numArgs = count($arguments);
120120

121-
if($func == 'is'){
122-
if(empty($parts)){
123-
// Handle call to Validator::is($type, $value)
124-
if($numArgs == 2){
125-
list($type, $value) = $arguments;
126-
return (new self())->validateType($type, $value);
121+
if ($func == 'is') {
122+
if (empty($parts)) {
123+
// Handle call to Validator::is($type, $value [, $rule])
124+
if (in_array($numArgs, [2, 3])) {
125+
if ($numArgs == 3) {
126+
list($type, $value, $rule) = $arguments;
127+
if (!is_array($rule)) {
128+
$rule = [];
129+
}
130+
} else {
131+
$rule = [];
132+
list($type, $value) = $arguments;
133+
}
134+
return (new self())->validateType($type, $value, $rule);
127135
}
128-
throw new \InvalidArgumentException("Validator::is() expects exactly 2 parameters, $numArgs parameters were given.");
129-
}else{
130-
// Handle call to Validator::is{Type}($value)
136+
throw new \InvalidArgumentException("Validator::is() expects 2 or 3 parameters, $numArgs parameters were given.");
137+
} else {
138+
// Handle call to Validator::is{Type}($value [, $rule])
131139
$type = implode('', $parts);
132-
return (new self())->validateType($type, $arguments[0]);
140+
$value = $arguments[0];
141+
$rule = isset($arguments[1]) && is_array($arguments[1]) ? $arguments[1] : [];
142+
return (new self())->validateType($type, $value, $rule);
133143
}
134144
}
135145

@@ -144,24 +154,24 @@ public static function __callStatic($method, $arguments)
144154
*/
145155
public function validate() : bool
146156
{
147-
if(!empty($this->rules)){
148-
foreach($this->rules as $name => $rule){
149-
if(array_key_exists($name, $this->values->toArray())){
150-
if(is_string($rule)){
157+
if (!empty($this->rules)) {
158+
foreach ($this->rules as $name => $rule) {
159+
if (array_key_exists($name, $this->values->toArray())) {
160+
if (is_string($rule)) {
151161
// Rebuild $rule into proper format
152162
// e.g. 'email' -> ['type' => 'email']
153163
$rule = ['type' => $rule];
154164
}
155-
if(isset($rule['type'])){
156-
if(!$this->validateType($rule['type'], $this->values[$name], $rule)){
165+
if (isset($rule['type'])) {
166+
if (!$this->validateType($rule['type'], $this->values[$name], $rule)) {
157167
// Error: Value for '%s' is invalid
158168
$this->setError($name, "Value for '$name' is invalid. Expected {$rule['type']}.");
159169
}
160-
}else{
170+
} else {
161171
throw new \InvalidArgumentException("Invalid rule for '$name'");
162172
}
163-
}else{
164-
if(isset($rule['required']) && $rule['required']){
173+
} else {
174+
if (isset($rule['required']) && $rule['required']) {
165175
// Error: Value for '%s' is required
166176
$this->setError($name, "Value for '$name' is required");
167177
}
@@ -180,9 +190,9 @@ public function validate() : bool
180190
*/
181191
public function setError($name, $error)
182192
{
183-
if($this->errors->has($name)){
193+
if ($this->errors->has($name)) {
184194
$errors = $this->errors->get($name);
185-
}else{
195+
} else {
186196
$errors = [];
187197
}
188198
$errors[] = $error;
@@ -223,9 +233,9 @@ public function hasErrors() : bool
223233
public function validateType($type, $value, array $rule = []) : bool
224234
{
225235
$type = strtolower($type);
226-
if(isset($this->validateTypeMethodMap[$type])){
236+
if (isset($this->validateTypeMethodMap[$type])) {
227237
return $this->{$this->validateTypeMethodMap[$type]}($value, $rule);
228-
}else{
238+
} else {
229239
throw new \InvalidArgumentException("Type '$type' is not a valid rule type");
230240
}
231241
}
@@ -237,7 +247,7 @@ public function validateType($type, $value, array $rule = []) : bool
237247
* @param array $rule
238248
* @return bool
239249
*/
240-
private function validateNull($value, array $rule) : bool
250+
private function validateNull($value, array $rule = []) : bool
241251
{
242252
return is_null($value);
243253
}
@@ -249,7 +259,7 @@ private function validateNull($value, array $rule) : bool
249259
* @param array $rule
250260
* @return bool
251261
*/
252-
private function validateBoolean($value, array $rule) : bool
262+
private function validateBoolean($value, array $rule = []) : bool
253263
{
254264
return is_bool($value);
255265
}
@@ -261,7 +271,7 @@ private function validateBoolean($value, array $rule) : bool
261271
* @param array $rule
262272
* @return bool
263273
*/
264-
private function validateScalar($value, array $rule) : bool
274+
private function validateScalar($value, array $rule = []) : bool
265275
{
266276
return is_scalar($value);
267277
}
@@ -273,7 +283,7 @@ private function validateScalar($value, array $rule) : bool
273283
* @param array $rule
274284
* @return bool
275285
*/
276-
private function validateArray($value, array $rule) : bool
286+
private function validateArray($value, array $rule = []) : bool
277287
{
278288
return is_array($value);
279289
}
@@ -285,7 +295,7 @@ private function validateArray($value, array $rule) : bool
285295
* @param array $rule
286296
* @return bool
287297
*/
288-
private function validateObject($value, array $rule) : bool
298+
private function validateObject($value, array $rule = []) : bool
289299
{
290300
return is_object($value);
291301
}
@@ -297,7 +307,7 @@ private function validateObject($value, array $rule) : bool
297307
* @param array $rule
298308
* @return bool
299309
*/
300-
private function validateString($value, array $rule) : bool
310+
private function validateString($value, array $rule = []) : bool
301311
{
302312
return is_string($value);
303313
}
@@ -309,7 +319,7 @@ private function validateString($value, array $rule) : bool
309319
* @param array $rule
310320
* @return bool
311321
*/
312-
private function validateInteger($value, array $rule) : bool
322+
private function validateInteger($value, array $rule = []) : bool
313323
{
314324
return is_int($value);
315325
}
@@ -321,7 +331,7 @@ private function validateInteger($value, array $rule) : bool
321331
* @param array $rule
322332
* @return bool
323333
*/
324-
private function validateNumeric($value, array $rule) : bool
334+
private function validateNumeric($value, array $rule = []) : bool
325335
{
326336
return is_numeric($value);
327337
}
@@ -333,7 +343,7 @@ private function validateNumeric($value, array $rule) : bool
333343
* @param array $rule
334344
* @return bool
335345
*/
336-
private function validateFloat($value, array $rule) : bool
346+
private function validateFloat($value, array $rule = []) : bool
337347
{
338348
return is_float($value);
339349
}
@@ -345,7 +355,7 @@ private function validateFloat($value, array $rule) : bool
345355
* @param array $rule
346356
* @return bool
347357
*/
348-
private function validateAlphaNumeric($value, array $rule) : bool
358+
private function validateAlphaNumeric($value, array $rule = []) : bool
349359
{
350360
return is_string($value) && ctype_alnum($value);
351361
}
@@ -357,7 +367,7 @@ private function validateAlphaNumeric($value, array $rule) : bool
357367
* @param array $rule
358368
* @return bool
359369
*/
360-
private function validateAlpha($value, array $rule) : bool
370+
private function validateAlpha($value, array $rule = []) : bool
361371
{
362372
return is_string($value) && ctype_alpha($value);
363373
}
@@ -369,7 +379,7 @@ private function validateAlpha($value, array $rule) : bool
369379
* @param array $rule
370380
* @return bool
371381
*/
372-
private function validateEmail($value, array $rule) : bool
382+
private function validateEmail($value, array $rule = []) : bool
373383
{
374384
return (bool) filter_var($value, FILTER_VALIDATE_EMAIL);
375385
}
@@ -381,7 +391,7 @@ private function validateEmail($value, array $rule) : bool
381391
* @param array $rule
382392
* @return bool
383393
*/
384-
private function validateIP($value, array $rule) : bool
394+
private function validateIP($value, array $rule = []) : bool
385395
{
386396
return $this->validateIPv4($value, $rule) || $this->validateIPv6($value, $rule);
387397
}
@@ -393,7 +403,7 @@ private function validateIP($value, array $rule) : bool
393403
* @param array $rule
394404
* @return bool
395405
*/
396-
private function validateIPv4($value, array $rule) : bool
406+
private function validateIPv4($value, array $rule = []) : bool
397407
{
398408
return (bool) filter_var($value, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4);
399409
}
@@ -405,7 +415,7 @@ private function validateIPv4($value, array $rule) : bool
405415
* @param array $rule
406416
* @return bool
407417
*/
408-
private function validateIPv6($value, array $rule) : bool
418+
private function validateIPv6($value, array $rule = []) : bool
409419
{
410420
return (bool) filter_var($value, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6);
411421
}
@@ -417,7 +427,7 @@ private function validateIPv6($value, array $rule) : bool
417427
* @param array $rule
418428
* @return bool
419429
*/
420-
private function validateClosure($value, array $rule) : bool
430+
private function validateClosure($value, array $rule = []) : bool
421431
{
422432
return ($value instanceof \Closure);
423433
}
@@ -429,7 +439,7 @@ private function validateClosure($value, array $rule) : bool
429439
* @param array $rule
430440
* @return bool
431441
*/
432-
private function validateCallable($value, array $rule) : bool
442+
private function validateCallable($value, array $rule = []) : bool
433443
{
434444
return is_callable($value);
435445
}
@@ -441,25 +451,25 @@ private function validateCallable($value, array $rule) : bool
441451
* @param array $rule
442452
* @return bool
443453
*/
444-
private function validateDateTime($value, array $rule) : bool
454+
private function validateDateTime($value, array $rule = []) : bool
445455
{
446-
if(!is_string($value) && !is_int($value)){
456+
if (!is_string($value) && !is_int($value)) {
447457
return false;
448458
}
449459

450460
$value = (string) $value;
451461

452462
// Returns a timestamp on success, FALSE otherwise
453-
if(($time = strtotime($value)) === false){
463+
if (($time = strtotime($value)) === false) {
454464
return false;
455465
}
456466

457467
// Returns new \DateTime instance of success, FALSE otherwise
458-
if(($date = date_create($value)) === false){
468+
if (($date = date_create($value)) === false) {
459469
return false;
460470
}
461471

462-
if(isset($rule['format'])){
472+
if (isset($rule['format'])) {
463473
return $date->format($rule['format']) == $value;
464474
}
465475

0 commit comments

Comments
 (0)