modifs.mineures sans commentaires
This commit is contained in:
parent
4353f482a4
commit
e592e8b9c4
@ -19,7 +19,7 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate {
|
|||||||
$this->context->resetParams($params);
|
$this->context->resetParams($params);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function resetContext($resetSelectedKey): void {
|
protected function resetContext(bool $resetSelectedKey): void {
|
||||||
$context = $this->context;
|
$context = $this->context;
|
||||||
$type = $context->schema->type;
|
$type = $context->schema->type;
|
||||||
if (is_array($type)) $type = $type[0];
|
if (is_array($type)) $type = $type[0];
|
||||||
@ -28,19 +28,16 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate {
|
|||||||
$context->result->reset();
|
$context->result->reset();
|
||||||
$context->analyzed = false;
|
$context->analyzed = false;
|
||||||
$context->normalized = false;
|
$context->normalized = false;
|
||||||
if ($resetSelectedKey) $context->selectedKey = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function afterModify(?array $params, $resetSelectedKey=false): void {
|
protected function afterModify(?array $params, bool $resetSelectedKey=false): void {
|
||||||
$context = $this->context;
|
$context = $this->context;
|
||||||
$this->resetContext($resetSelectedKey);
|
$this->resetContext($resetSelectedKey);
|
||||||
if ($params["analyze"] ?? $context->analyze) {
|
if ($params["analyze"] ?? $context->analyze) {
|
||||||
$this->analyze($params);
|
$this->analyze($params);
|
||||||
}
|
}
|
||||||
if ($context->analyzed) {
|
if ($context->analyzed && ($params["normalize"] ?? $context->normalize)) {
|
||||||
if ($params["normalize"] ?? $context->normalize) {
|
$this->normalize($params);
|
||||||
$this->normalize($params);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,6 +77,15 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate {
|
|||||||
/** normaliser la valeur */
|
/** normaliser la valeur */
|
||||||
abstract static function _normalize(WrapperContext $context, Wrapper $wrapper, ?array $params): bool;
|
abstract static function _normalize(WrapperContext $context, Wrapper $wrapper, ?array $params): bool;
|
||||||
|
|
||||||
|
protected function checkResult(): void {
|
||||||
|
$context = $this->context;
|
||||||
|
/** @var ScalarResult $result */
|
||||||
|
$result = $context->result;
|
||||||
|
if (!$result->valid) {
|
||||||
|
$result->throw($params["throw"] ?? $context->throw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function normalize(?array $params=null): bool {
|
function normalize(?array $params=null): bool {
|
||||||
$context = $this->context;
|
$context = $this->context;
|
||||||
|
|
||||||
@ -95,11 +101,7 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate {
|
|||||||
$modified = false;
|
$modified = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @var ScalarResult $result */
|
$this->checkResult();
|
||||||
$result = $context->result;
|
|
||||||
if (!$result->valid) {
|
|
||||||
$result->throw($params["throw"] ?? $context->throw);
|
|
||||||
}
|
|
||||||
return $modified;
|
return $modified;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,7 +117,7 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate {
|
|||||||
* @param string|int|null $key
|
* @param string|int|null $key
|
||||||
* @return Wrapper $this
|
* @return Wrapper $this
|
||||||
*/
|
*/
|
||||||
abstract function select($key): Wrapper;
|
abstract function select($key=null): Wrapper;
|
||||||
|
|
||||||
function getIterator() {
|
function getIterator() {
|
||||||
foreach ($this->getKeys() as $key) {
|
foreach ($this->getKeys() as $key) {
|
||||||
|
@ -37,8 +37,6 @@ class WrapperContext {
|
|||||||
/** @var mixed */
|
/** @var mixed */
|
||||||
public $value = null;
|
public $value = null;
|
||||||
|
|
||||||
/** @var string|int|null clé sélectionnée */
|
|
||||||
public $selectedKey = null;
|
|
||||||
/** type de la valeur de la clé sélectionnée après analyse */
|
/** type de la valeur de la clé sélectionnée après analyse */
|
||||||
public ?IType $type = null;
|
public ?IType $type = null;
|
||||||
/** résultat de l'analyse de la valeur de la clé sélectionnée */
|
/** résultat de l'analyse de la valeur de la clé sélectionnée */
|
||||||
|
@ -14,23 +14,25 @@ use nulib\schema\WrapperContext;
|
|||||||
|
|
||||||
class AssocWrapper extends Wrapper {
|
class AssocWrapper extends Wrapper {
|
||||||
function __construct(AssocSchema $schema, &$value=null, $valueKey=null, ?array $params=null) {
|
function __construct(AssocSchema $schema, &$value=null, $valueKey=null, ?array $params=null) {
|
||||||
$keys = $schema->getKeys();
|
$this->context = $context = new AssocWrapperContext($schema, null, null, $params);
|
||||||
$keyParams = cl::merge($params, [
|
$paramsNoThrow = cl::merge($params, [
|
||||||
"throw" => false,
|
"throw" => false,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$keys = $schema->getKeys();
|
||||||
$keyWrappers = [];
|
$keyWrappers = [];
|
||||||
foreach ($keys as $key) {
|
foreach ($keys as $key) {
|
||||||
$value = null;
|
$keyDummy = null;
|
||||||
$keyWrappers[$key] = $schema->getSchema($key)->getWrapper($value, null, $keyParams);
|
$keyWrappers[$key] = $schema->getSchema($key)->getWrapper($keyDummy, null, $paramsNoThrow);
|
||||||
}
|
}
|
||||||
$this->context = $context = new AssocWrapperContext($schema, null, null, $params);
|
|
||||||
$arrayParams = cl::merge($params, [
|
|
||||||
"throw" => false,
|
|
||||||
]);
|
|
||||||
$context->arrayWrapper = new ScalarWrapper($schema, $dummy, null, $arrayParams, $context);
|
|
||||||
$context->keys = $keys;
|
$context->keys = $keys;
|
||||||
$context->keyWrappers = $keyWrappers;
|
$context->keyWrappers = $keyWrappers;
|
||||||
|
|
||||||
|
$arrayDummy = null;
|
||||||
|
$context->arrayWrapper = new ScalarWrapper($schema, $arrayDummy, null, $paramsNoThrow, $context);
|
||||||
|
|
||||||
|
$context->assocResult = new ScalarResult();#XX AssocResult
|
||||||
|
|
||||||
if ($value !== null) {
|
if ($value !== null) {
|
||||||
# n'initialiser que si $value n'est pas null
|
# n'initialiser que si $value n'est pas null
|
||||||
$this->reset($value, $valueKey);
|
$this->reset($value, $valueKey);
|
||||||
@ -40,13 +42,14 @@ class AssocWrapper extends Wrapper {
|
|||||||
/** @var AssocWrapperContext */
|
/** @var AssocWrapperContext */
|
||||||
protected WrapperContext $context;
|
protected WrapperContext $context;
|
||||||
|
|
||||||
protected function resetContext($resetSelectedKey): void {
|
protected function resetContext(bool $resetSelectedKey): void {
|
||||||
parent::resetContext($resetSelectedKey);
|
parent::resetContext($resetSelectedKey);
|
||||||
$context = $this->context;
|
$context = $this->context;
|
||||||
$context->arrayWrapper->getResult()->reset();
|
$context->arrayWrapper->getResult()->reset();
|
||||||
foreach ($context->keyWrappers as $wrapper) {
|
foreach ($context->keyWrappers as $wrapper) {
|
||||||
$wrapper->getResult()->reset();
|
$wrapper->getResult()->reset();
|
||||||
}
|
}
|
||||||
|
if ($resetSelectedKey) $context->selectedKey = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function reset(&$value, $valueKey=null, ?array $params=null): Wrapper {
|
function reset(&$value, $valueKey=null, ?array $params=null): Wrapper {
|
||||||
@ -69,7 +72,7 @@ class AssocWrapper extends Wrapper {
|
|||||||
|
|
||||||
protected function _getWrapper($key): Wrapper {
|
protected function _getWrapper($key): Wrapper {
|
||||||
$context = $this->context;
|
$context = $this->context;
|
||||||
if ($key === null) return $context->arrayWrapper;
|
if ($key === null || $key === "") return $context->arrayWrapper;
|
||||||
$wrapper = $context->keyWrappers[$key] ?? null;
|
$wrapper = $context->keyWrappers[$key] ?? null;
|
||||||
if ($wrapper === null) throw ValueException::invalid_key($key);
|
if ($wrapper === null) throw ValueException::invalid_key($key);
|
||||||
return $wrapper;
|
return $wrapper;
|
||||||
@ -99,9 +102,10 @@ class AssocWrapper extends Wrapper {
|
|||||||
|
|
||||||
$what = ScalarWrapper::_analyze($context, $wrapper, $params);
|
$what = ScalarWrapper::_analyze($context, $wrapper, $params);
|
||||||
/** @var ScalarResult $result */
|
/** @var ScalarResult $result */
|
||||||
$result = $context->result;
|
if (!$context->result->valid) return $what;
|
||||||
if (!$result->valid) return $what;
|
|
||||||
|
|
||||||
|
$result = $context->assocResult;
|
||||||
|
$result->setValid();
|
||||||
foreach ($context->keyWrappers as $keyWrapper) {
|
foreach ($context->keyWrappers as $keyWrapper) {
|
||||||
$keyWrapper->analyze($params);
|
$keyWrapper->analyze($params);
|
||||||
if ($keyWrapper->isValid()) continue;
|
if ($keyWrapper->isValid()) continue;
|
||||||
@ -155,7 +159,17 @@ class AssocWrapper extends Wrapper {
|
|||||||
return $modified;
|
return $modified;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function checkResult(): void {
|
||||||
|
$context = $this->context;
|
||||||
|
/** @var ScalarResult $result */
|
||||||
|
$result = $context->assocResult;
|
||||||
|
if (!$result->valid) {
|
||||||
|
$result->throw($params["throw"] ?? $context->throw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function getResult($key=false): Result {
|
function getResult($key=false): Result {
|
||||||
|
if ($key === null) return $this->context->assocResult;
|
||||||
if ($key === false) $key = $this->context->selectedKey;
|
if ($key === false) $key = $this->context->selectedKey;
|
||||||
return $this->_getWrapper($key)->getResult();
|
return $this->_getWrapper($key)->getResult();
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
namespace nulib\schema\_assoc;
|
namespace nulib\schema\_assoc;
|
||||||
|
|
||||||
use nulib\ref\schema\ref_schema;
|
use nulib\ref\schema\ref_schema;
|
||||||
|
use nulib\schema\_scalar\ScalarResult;
|
||||||
use nulib\schema\_scalar\ScalarWrapper;
|
use nulib\schema\_scalar\ScalarWrapper;
|
||||||
use nulib\schema\Wrapper;
|
use nulib\schema\Wrapper;
|
||||||
use nulib\schema\WrapperContext;
|
use nulib\schema\WrapperContext;
|
||||||
@ -28,4 +29,9 @@ class AssocWrapperContext extends WrapperContext {
|
|||||||
|
|
||||||
/** @var Wrapper[] */
|
/** @var Wrapper[] */
|
||||||
public array $keyWrappers;
|
public array $keyWrappers;
|
||||||
|
|
||||||
|
public ScalarResult $assocResult;
|
||||||
|
|
||||||
|
/** @var string|int|null clé sélectionnée */
|
||||||
|
public $selectedKey = null;
|
||||||
}
|
}
|
||||||
|
@ -40,9 +40,9 @@ class ScalarWrapper extends Wrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @param string|int|null $key */
|
/** @param string|int|null $key */
|
||||||
function select($key): ScalarWrapper {
|
function select($key=null): ScalarWrapper {
|
||||||
if ($key !== null) throw ValueException::invalid_key($key);
|
if ($key === null || $key === "") return $this;
|
||||||
return $this;
|
throw ValueException::invalid_key($key);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** analyser la valeur et résoudre son type */
|
/** analyser la valeur et résoudre son type */
|
||||||
|
Loading…
Reference in New Issue
Block a user