modifs.mineures sans commentaires

This commit is contained in:
Jephté Clain 2025-04-19 07:48:20 +04:00
parent 80fab7e636
commit 587df17273
27 changed files with 114 additions and 129 deletions

View File

@ -1,18 +1,13 @@
<?php
namespace nulib;
use nulib\A;
use nulib\app\cli\Application;
use nulib\app\LockFile;
use nulib\app\RunFile;
use nulib\cl;
use nulib\ExitError;
use nulib\os\path;
use nulib\os\sh;
use nulib\php\func;
use nulib\str;
use nulib\ValueException;
use nur\cli\Application as nur_Application;
use nulib\app\cli\Application;
class app {
private static function isa_Application($app): bool {

View File

@ -2,6 +2,7 @@
namespace nulib\app\cli;
use Exception;
use nulib\app;
use nulib\app\RunFile;
use nulib\ExitError;
use nulib\ext\yaml;
@ -13,7 +14,6 @@ use nulib\ValueException;
use nur\cli\ArgsException;
use nur\cli\ArgsParser;
use nur\config;
use nulib\app;
/**
* Class Application: application de base

View File

@ -1,8 +1,6 @@
<?php
namespace nulib\php\access;
use nulib\cl;
/**
* Class GetAccess: accès à une valeur de $_GET
*/

View File

@ -1,8 +1,6 @@
<?php
namespace nulib\php\access;
use ReflectionClass;
/**
* Interface IAccess: abstraction d'un accès complet à une valeur
*/

View File

@ -3,7 +3,6 @@ namespace nulib\php\access;
use ArrayAccess;
use nulib\cl;
use nulib\ref\schema\ref_schema;
/**
* Class KeyAccess: accès

View File

@ -1,8 +1,6 @@
<?php
namespace nulib\php\access;
use nulib\cl;
/**
* Class PostAccess: accès à une valeur de $_POST
*/

View File

@ -5,7 +5,6 @@ use Exception;
use Generator;
use Iterator;
use IteratorAggregate;
use nulib\php\ICloseable;
use nulib\StopException;
use nulib\ValueException;
use Traversable;

View File

@ -1,98 +1,67 @@
<?php
namespace nulib\schema;
use nulib\ref\schema\ref_analyze;
use nulib\ValueException;
class ConsolidatedResult extends Result {
function addMissingMessage(Wrapper $wrapper): void {
$this->resultAvailable = true;
$this->present = false;
$this->available = false;
$this->null = false;
$this->valid = false;
$this->messageKey = "missing";
protected int $highestResult;
function reset(): void {
parent::reset();
$this->highestResult = -1;
}
protected function _addMessage(Wrapper $wrapper, $prefix=null): void {
$result = $wrapper->getResult();
$resultException = $result->exception;
$resultMessage = $result->message;
if ($resultException !== null) {
$tmessage = ValueException::get_message($resultException);
if ($tmessage) {
if ($resultMessage !== null) $resultMessage .= ": ";
$resultMessage .= $tmessage;
}
}
$message = $this->message;
if ($message) $message .= "\n";
$message .= $resultMessage;
if ($prefix !== null) $message .= "$prefix: ";
$message .= $result->message;
$this->message = $message;
}
function addUnavailableMessage(Wrapper $wrapper): void {
$this->resultAvailable = true;
$this->present = true;
$this->available = false;
$this->null = false;
$this->valid = false;
$this->messageKey = "unavailable";
$result = $wrapper->getResult();
$resultException = $result->exception;
$resultMessage = $result->message;
if ($resultException !== null) {
$tmessage = ValueException::get_message($resultException);
if ($tmessage) {
if ($resultMessage !== null) $resultMessage .= ": ";
$resultMessage .= $tmessage;
}
function addMissingMessage(Wrapper $wrapper, $prefix=null): void {
if ($this->highestResult < ref_analyze::MISSING) {
$this->present = false;
$this->available = false;
$this->null = false;
$this->valid = false;
$this->messageKey = "missing";
}
$message = $this->message;
if ($message) $message .= "\n";
$message .= $resultMessage;
$this->message = $message;
$this->_addMessage($wrapper, $prefix);
}
function addNullMessage(Wrapper $wrapper): void {
$this->resultAvailable = true;
$this->present = true;
$this->available = true;
$this->null = true;
$this->valid = false;
$this->messageKey = "null";
$result = $wrapper->getResult();
$resultException = $result->exception;
$resultMessage = $result->message;
if ($resultException !== null) {
$tmessage = ValueException::get_message($resultException);
if ($tmessage) {
if ($resultMessage !== null) $resultMessage .= ": ";
$resultMessage .= $tmessage;
}
function addUnavailableMessage(Wrapper $wrapper, $prefix=null): void {
if ($this->highestResult < ref_analyze::UNAVAILABLE) {
$this->present = true;
$this->available = false;
$this->null = false;
$this->valid = false;
$this->messageKey = "unavailable";
}
$message = $this->message;
if ($message) $message .= "\n";
$message .= $resultMessage;
$this->message = $message;
$this->_addMessage($wrapper, $prefix);
}
function addInvalidMessage(Wrapper $wrapper): void {
$this->resultAvailable = true;
$this->present = true;
$this->available = true;
$this->null = false;
$this->valid = false;
$this->messageKey = "invalid";
$result = $wrapper->getResult();
$resultException = $result->exception;
$resultMessage = $result->message;
if ($resultException !== null) {
$tmessage = ValueException::get_message($resultException);
if ($tmessage) {
if ($resultMessage !== null) $resultMessage .= ": ";
$resultMessage .= $tmessage;
}
function addNullMessage(Wrapper $wrapper, $prefix=null): void {
if ($this->highestResult < ref_analyze::NULL) {
$this->present = true;
$this->available = true;
$this->null = true;
$this->valid = false;
$this->messageKey = "null";
}
$message = $this->message;
if ($message) $message .= "\n";
$message .= $resultMessage;
$this->message = $message;
$this->_addMessage($wrapper, $prefix);
}
function addInvalidMessage(Wrapper $wrapper, $prefix=null): void {
if ($this->highestResult < ref_analyze::INVALID) {
$this->present = true;
$this->available = true;
$this->null = false;
$this->valid = false;
$this->messageKey = "invalid";
}
$this->_addMessage($wrapper, $prefix);
}
}

View File

@ -39,7 +39,7 @@ class Result {
public ?string $messageKey;
public ?string $message;
public ?Throwable $exception;
public ?string $origValue;
public $origValue;
public $normalizedValue;
/** réinitialiser tous les objets résultats accessibles via cet objet */
@ -119,11 +119,9 @@ class Result {
$this->valid = false;
$this->origValue = $value;
$this->messageKey = $messageKey = "invalid";
$message = $this->getMessage($messageKey, $schema);
if ($exception !== null) {
$tmessage = ValueException::get_message($exception);
if ($tmessage) $message = $tmessage;
}
$message = null;
if ($exception !== null) $message = ValueException::get_message($exception);
if (!$message) $message = $this->getMessage($messageKey, $schema);
$this->message = $message;
$this->exception = $exception;
return ref_analyze::INVALID;

View File

@ -12,8 +12,8 @@ use nulib\schema\_scalar\ScalarSchema;
use nulib\schema\types\IType;
use nulib\schema\types\tarray;
use nulib\schema\types\tbool;
use nulib\schema\types\tfunc;
use nulib\schema\types\tcontent;
use nulib\schema\types\tfunc;
use nulib\schema\types\tpkey;
use nulib\schema\types\trawstring;

View File

@ -3,9 +3,9 @@ namespace nulib\schema\_assoc;
use nulib\cl;
use nulib\ref\schema\ref_schema;
use nulib\ValueException;
use nulib\schema\Schema;
use nulib\schema\Wrapper;
use nulib\ValueException;
/**
* Class AssocSchema

View File

@ -105,18 +105,21 @@ class AssocWrapper extends Wrapper {
$result = $context->consolidatedResult;
$result->setValid();
foreach ($context->keyWrappers as $keyWrapper) {
foreach ($context->keyWrappers as $key => $keyWrapper) {
$keyWrapper->analyze($params);
if ($keyWrapper->isValid()) continue;
$what = ref_analyze::INVALID;
#XXX utiliser si possible la description ou une autre valeur "user-friendly"
# possibilité de sélectionner la valeur à utiliser dans $params?
$prefix = $key;
if (!$keyWrapper->isPresent()) {
$result->addMissingMessage($keyWrapper);
$result->addMissingMessage($keyWrapper, $prefix);
} elseif (!$keyWrapper->isAvailable()) {
$result->addUnavailableMessage($keyWrapper);
$result->addUnavailableMessage($keyWrapper, $prefix);
} elseif ($keyWrapper->isNull()) {
$result->addNullMessage($keyWrapper);
$result->addNullMessage($keyWrapper, $prefix);
} else {
$result->addInvalidMessage($keyWrapper);
$result->addInvalidMessage($keyWrapper, $prefix);
}
}

View File

@ -2,9 +2,9 @@
namespace nulib\schema\_list;
use nulib\ref\schema\ref_schema;
use nulib\ValueException;
use nulib\schema\Schema;
use nulib\schema\Wrapper;
use nulib\ValueException;
class ListSchema extends Schema {
/** @var array meta-schema d'un schéma de nature liste */

View File

@ -1,11 +1,10 @@
<?php
namespace nulib\schema\_scalar;
use nulib\cl;
use nulib\ref\schema\ref_schema;
use nulib\ValueException;
use nulib\schema\Schema;
use nulib\schema\Wrapper;
use nulib\ValueException;
/**
* Class ScalarSchema

View File

@ -1,11 +1,11 @@
<?php
namespace nulib\schema\input;
use nulib\ref\schema\ref_input;
use nulib\StateException;
use nulib\php\access\IAccess;
use nulib\php\access\KeyAccess;
use nulib\php\access\PropertyAccess;
use nulib\ref\schema\ref_input;
use nulib\StateException;
/**
* Class Input: accès à une valeur

View File

@ -1,14 +1,13 @@
<?php
namespace nulib\schema;
use nulib\ValueException;
use nulib\schema\types\IType;
use nulib\schema\types\Registry;
use nulib\schema\types\tarray;
use nulib\schema\types\tbool;
use nulib\schema\types\tfunc;
use nulib\schema\types\tcontent;
use nulib\schema\types\tfloat;
use nulib\schema\types\tfunc;
use nulib\schema\types\tint;
use nulib\schema\types\tkey;
use nulib\schema\types\tmixed;
@ -17,6 +16,7 @@ use nulib\schema\types\traw;
use nulib\schema\types\trawstring;
use nulib\schema\types\tstring;
use nulib\schema\types\ttext;
use nulib\ValueException;
/**
* Class types: classe outil pour gérer le registre de types

View File

@ -1,10 +1,10 @@
<?php
namespace nulib\schema\types;
use nulib\ValueException;
use nulib\schema\input\Input;
use nulib\schema\Result;
use nulib\schema\Schema;
use nulib\ValueException;
/**
* Interface IType: un type de données

View File

@ -1,9 +1,8 @@
<?php
namespace nulib\schema\types;
use nulib\StateException;
use nur\prop;
use nulib\schema\input\Input;
use nur\prop;
use nur\str;
abstract class _tsimple implements IType {

View File

@ -2,7 +2,6 @@
namespace nulib\schema\types;
use nulib\cl;
use nulib\ValueException;
use nulib\schema\_scalar\ScalarSchema;
use nulib\schema\Result;
use nulib\schema\Schema;

View File

@ -2,12 +2,12 @@
namespace nulib\schema\types;
use nulib\cl;
use nulib\ValueException;
use nur\prop;
use nulib\schema\_scalar\ScalarSchema;
use nulib\schema\input\Input;
use nulib\schema\Result;
use nulib\schema\Schema;
use nulib\ValueException;
use nur\prop;
class tbool extends _tformatable {
const NAME = "bool";
@ -60,7 +60,7 @@ class tbool extends _tformatable {
}
function getMissingValue(?bool &$valid=null) {
$valid = !$this->nullable;
$valid = false;
return null;
}

View File

@ -1,10 +1,10 @@
<?php
namespace nulib\schema\types;
use nulib\ValueException;
use nulib\schema\_scalar\ScalarSchema;
use nulib\schema\Result;
use nulib\schema\Schema;
use nulib\ValueException;
class tfloat extends _tformatable {
const NAME = "float";

View File

@ -3,10 +3,10 @@ namespace nulib\schema\types;
use Exception;
use nulib\php\func;
use nulib\ValueException;
use nulib\schema\_scalar\ScalarSchema;
use nulib\schema\Result;
use nulib\schema\Schema;
use nulib\ValueException;
class tfunc extends _tsimple {
const NAME = "func";

View File

@ -1,11 +1,10 @@
<?php
namespace nulib\schema\types;
use nulib\ValueException;
use nulib\schema\_scalar\ScalarSchema;
use nulib\schema\input\Input;
use nulib\schema\Result;
use nulib\schema\Schema;
use nulib\ValueException;
class tgeneric extends _tsimple {
function __construct(string $class, bool $nullable, ?array $params=null) {

View File

@ -1,10 +1,10 @@
<?php
namespace nulib\schema\types;
use nulib\ValueException;
use nulib\schema\_scalar\ScalarSchema;
use nulib\schema\Result;
use nulib\schema\Schema;
use nulib\ValueException;
class tint extends _tformatable {
const NAME = "int";

View File

@ -1,10 +1,10 @@
<?php
namespace nulib\schema\types;
use nulib\str;
use nulib\schema\_scalar\ScalarSchema;
use nulib\schema\Result;
use nulib\schema\Schema;
use nulib\str;
class trawstring extends _tstring {
const NAME = "rawstring";

View File

@ -6,6 +6,7 @@ use nulib\tests\TestCase;
use nulib\ValueException;
use nulib\schema\_scalar\ScalarSchemaTest;
use nulib\schema\Schema;
use PHPStan\Type\Enum\EnumCaseObjectType;
class AssocSchemaTest extends TestCase {
const NULL_SCHEMA = [
@ -32,6 +33,8 @@ class AssocSchemaTest extends TestCase {
"messages" => null,
"formatter_func" => null,
"format" => null,
"size" => null,
"precision" => null,
"name" => null,
"pkey" => null,
"header" => null,
@ -169,8 +172,8 @@ class AssocSchemaTest extends TestCase {
"b" => false,
], $array);
// false équivaut à absent
$array = ["s" => false, "i" => false, "b" => null];
// false équivaut à absent, sauf pour "b" qui est de type bool
$array = ["s" => false, "i" => false, "b" => false];
$schema->getWrapper($array, null, ["ensure_keys" => true]);
self::assertSame([
"s" => "",
@ -178,9 +181,11 @@ class AssocSchemaTest extends TestCase {
"b" => false,
], $array);
$array = ["s" => false, "i" => false, "b" => null];
$array = ["s" => false, "i" => false, "b" => false];
$schema->getWrapper($array, null, ["ensure_keys" => false]);
self::assertSame([], $array);
self::assertSame([
"b" => false,
], $array);
}
const STRING_SCHEMA = [
@ -363,4 +368,29 @@ class AssocSchemaTest extends TestCase {
$schema->getWrapper($array);
});
}
function testMessage() {
$schema = new AssocSchema([
"rs" => ["string", "required" => true],
"i" => ["int"],
]);
$value = [];
$result = $schema->getWrapper($value, null, ["throw" => false])->getResult(null);
$expectedMessage = <<<EOT
rs: vous devez spécifier cette valeur
EOT;
self::assertSame($expectedMessage, $result->message);
$value = [
"rs" => null,
"i" => "abc",
];
$result = $schema->getWrapper($value, null, ["throw" => false])->getResult(null);
$expectedMessage = <<<EOT
rs: cette valeur ne doit pas être nulle
i: une valeur numérique entière est attendue
EOT;
self::assertSame($expectedMessage, $result->message);
}
}

View File

@ -19,6 +19,8 @@ class ScalarSchemaTest extends TestCase {
"messages" => null,
"formatter_func" => null,
"format" => null,
"size" => null,
"precision" => null,
"" => [
"scalar",
"compute_func" => null,