first commit.
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
namespace Toolbox;
|
||||
|
||||
/**
|
||||
* Modelo de compatibilidad estilo WordPress: un rango mínimo requerido y uno
|
||||
* máximo probado contra el core, más el requisito de PHP. Sólo produce avisos.
|
||||
*/
|
||||
final class Compatibility
|
||||
{
|
||||
public const OK = 'ok';
|
||||
public const UNTESTED = 'untested';
|
||||
public const INSUFFICIENT = 'insufficient';
|
||||
public const UNKNOWN = 'unknown';
|
||||
|
||||
/**
|
||||
* @return array{status:string, message:string}
|
||||
*/
|
||||
public static function evaluateCore(
|
||||
?string $coreVersion,
|
||||
?string $requires,
|
||||
?string $tested
|
||||
): array {
|
||||
if ($coreVersion === null) {
|
||||
return ['status' => self::UNKNOWN, 'message' => 'versión del core desconocida (sin tags)'];
|
||||
}
|
||||
|
||||
if ($requires === null && $tested === null) {
|
||||
return ['status' => self::UNKNOWN, 'message' => 'sin datos de compatibilidad'];
|
||||
}
|
||||
|
||||
if ($requires !== null && !Semver::satisfies($coreVersion, $requires)) {
|
||||
return [
|
||||
'status' => self::INSUFFICIENT,
|
||||
'message' => "requiere core {$requires} (tienes {$coreVersion})",
|
||||
];
|
||||
}
|
||||
|
||||
if ($tested !== null && Semver::compare($coreVersion, $tested) > 0) {
|
||||
return [
|
||||
'status' => self::UNTESTED,
|
||||
'message' => "probado hasta {$tested} (tienes {$coreVersion})",
|
||||
];
|
||||
}
|
||||
|
||||
return ['status' => self::OK, 'message' => 'compatible'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array{status:string, message:string}
|
||||
*/
|
||||
public static function evaluatePhp(?string $requires, string $phpVersion): array
|
||||
{
|
||||
if ($requires === null) {
|
||||
return ['status' => self::UNKNOWN, 'message' => 'sin datos de PHP'];
|
||||
}
|
||||
|
||||
if (!Semver::satisfies($phpVersion, $requires)) {
|
||||
return [
|
||||
'status' => self::INSUFFICIENT,
|
||||
'message' => "requiere PHP {$requires} (tienes {$phpVersion})",
|
||||
];
|
||||
}
|
||||
|
||||
return ['status' => self::OK, 'message' => 'compatible'];
|
||||
}
|
||||
|
||||
public static function label(string $status): string
|
||||
{
|
||||
return match ($status) {
|
||||
self::OK => 'OK',
|
||||
self::UNTESTED => 'NO PROBADO',
|
||||
self::INSUFFICIENT => 'INSUFICIENTE',
|
||||
default => 'SIN DATOS',
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user