forked from dlundgren/phagrancy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ValidatesVersion.php
43 lines (38 loc) · 931 Bytes
/
ValidatesVersion.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
<?php
/**
* @file
* Contains Phagrancy\Model\Input\ValidatesVersion
*/
namespace Phagrancy\Model\Input;
/**
* Version Validator
*
* This validator attempts to align itself with vagrant-clouds SemVer style.
*
* @package Phagrancy\Model\Input
*/
trait ValidatesVersion
{
/**
* @var array List of rules for the scope
*/
private static $VERSION_RULE = ['required', 'trim', 'version'];
/**
* Validates that the version is in SemVer like format.
*/
public function validateVersion()
{
$error = "Version must be of the format x.y.z where x, y, and z are all integers, or follow SemVer 2.0.0";;
return function ($value) use ($error) {
if (!preg_match('/^v?(0|[1-9]\d*)(?:\.(0|[1-9]\d*)){0,2}(?:(\.|-)[\da-z+_-]+)*$/i', $value)) {
return $error;
}
$pips = explode('.', $value);
foreach ($pips as $pip) {
if (is_numeric($pip) && !((int)$pip >= 0)) {
return $error;
}
}
};
}
}