modifs.mineures sans commentaires

This commit is contained in:
Jephté Clain 2025-03-28 16:17:12 +04:00
parent c274adb6e6
commit 2a92a9a07e
5 changed files with 27 additions and 8 deletions

View File

@ -20,6 +20,8 @@
* cela pourrait servir pour générer automatiquement des tables SQL
* ou pour modéliser un schéma FSV
* support allowed_values
* valeurs composite/computed
* analyse / vérification de la valeur complète après calcul du résultat, si
tous les résultats sont bons

View File

@ -82,7 +82,15 @@ class AssocSchema extends Schema {
# cf le code similaire dans AssocWrapper::__construct()
$dontAnalyze = $value === null && $wrapper === null;
if (!($wrapper instanceof AssocWrapper)) $wrapper = $this->newWrapper();
# le schéma peut contenir des paramètres par défaut
$nature = $this->definition[""];
foreach (array_keys(ref_schema::ASSOC_PARAMS_SCHEMA) as $key) {
$value = $nature[$key] ?? null;
if ($value !== null) $params[$key] = $value;
}
if ($params !== null) $wrapper->resetParams($params);
return $wrapper->reset($value, $valueKey, $dontAnalyze? ["analyze" => false]: null);
}
}

View File

@ -89,13 +89,13 @@ class AssocWrapper extends Wrapper {
* @param AssocWrapper $wrapper
*/
static function _analyze(WrapperContext $context, Wrapper $wrapper, ?array $params): int {
if ($context->ensureArray) {
if ($params["ensure_array"] ?? $context->ensureArray) {
$valueKey = $context->valueKey;
$array = $context->input->get($valueKey);
if ($array === null) $context->input->set([], $valueKey);
}
if ($context->ensureAssoc) {
if ($params["ensure_assoc"] ?? $context->ensureAssoc) {
$context->input->ensureAssoc($context->schema->getKeys());
}
@ -113,7 +113,7 @@ class AssocWrapper extends Wrapper {
}
}
#XXX supprimer les clés "missing" ou "unavailable"
#XXX supprimer les clés "missing" ou "unavailable" sauf si $ensureKeys
return $what;
}
@ -122,8 +122,8 @@ class AssocWrapper extends Wrapper {
* @param AssocWrapper $wrapper
*/
static function _normalize(WrapperContext $context, Wrapper $wrapper, ?array $params): bool {
$ensureKeys = $context->ensureKeys;
$ensureOrder = $context->ensureOrder;
$ensureKeys = $params["ensure_keys"] ?? $context->ensureKeys;
$ensureOrder = $params["ensure_order"] ?? $context->ensureOrder;
if ($ensureKeys || $ensureOrder) {
$schema = $context->schema;
$keys = $schema->getKeys();

View File

@ -84,7 +84,15 @@ class ScalarSchema extends Schema {
# cf le code similaire dans ScalarWrapper::__construct()
$dontAnalyze = $value === null && $wrapper === null;
if (!($wrapper instanceof ScalarWrapper)) $wrapper = $this->newWrapper();
# le schéma peut contenir des paramètres par défaut
$nature = $this->definition[""];
foreach (array_keys(ref_schema::SCALAR_PARAMS_SCHEMA) as $key) {
$value = $nature[$key] ?? null;
if ($value !== null) $params[$key] = $value;
}
if ($params !== null) $wrapper->resetParams($params);
return $wrapper->reset($value, $valueKey, $dontAnalyze? ["analyze" => false]: null);
}
}

View File

@ -13,9 +13,10 @@ class AssocSchemaTest extends TestCase {
"assoc",
"compute_func" => null,
"validate_func" => null,
"ensure_array" => false,
"ensure_keys" => true,
"ensure_order" => true,
"ensure_array" => null,
"ensure_assoc" => null,
"ensure_keys" => null,
"ensure_order" => null,
],
"schema" => null,
"type" => [null],