Compare commits

..

4 Commits

6 changed files with 110 additions and 14 deletions

View File

@ -1,11 +1,11 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
UPSTREAM=dev74 UPSTREAM=
DEVELOP=dev82 DEVELOP=dev74
FEATURE=wip82/ FEATURE=wip74/
RELEASE=rel82- RELEASE=rel74-
MAIN=dist82 MAIN=dist74
TAG_SUFFIX=p82 TAG_SUFFIX=p74
HOTFIX=hotf82- HOTFIX=hotf74-
DIST= DIST=
NOAUTO= NOAUTO=

View File

@ -4,5 +4,5 @@
RUNPHP= RUNPHP=
# Si RUNPHP n'est pas défini, les variables suivantes peuvent être définies # Si RUNPHP n'est pas défini, les variables suivantes peuvent être définies
DIST=d12 DIST=d11
#REGISTRY=pubdocker.univ-reunion.fr/dist #REGISTRY=pubdocker.univ-reunion.fr/dist

View File

@ -15,12 +15,12 @@
} }
}, },
"require": { "require": {
"symfony/yaml": "^7.1", "symfony/yaml": "^5.0",
"ext-json": "*", "ext-json": "*",
"php": "^8.2" "php": "^7.4"
}, },
"require-dev": { "require-dev": {
"nulib/tests": "^8.2", "nulib/tests": "^7.4",
"ext-posix": "*", "ext-posix": "*",
"ext-pcntl": "*", "ext-pcntl": "*",
"ext-curl": "*", "ext-curl": "*",

View File

@ -3,13 +3,16 @@ namespace nulib\php;
use Closure; use Closure;
use Exception; use Exception;
use Generator;
use nulib\A; use nulib\A;
use nulib\cl;
use nulib\cv; use nulib\cv;
use nulib\StateException; use nulib\StateException;
use nulib\ValueException; use nulib\ValueException;
use ReflectionClass; use ReflectionClass;
use ReflectionFunction; use ReflectionFunction;
use ReflectionMethod; use ReflectionMethod;
use Traversable;
/** /**
* Class func: outils pour appeler fonctions et méthodes dynamiquement * Class func: outils pour appeler fonctions et méthodes dynamiquement
@ -491,6 +494,34 @@ class func {
return self::with($func)->invoke($args); return self::with($func)->invoke($args);
} }
/**
* si $value est une fonction, l'appeler
* si $value ou le résultat de l'appel est un Traversable, le résoudre
* sinon retourner $value tel quel
*
* en définitive, la valeur de retour de cette fonction est soit un scalaire,
* soit un array, soit un objet qui n'est pas Traversable
* @return mixed
*/
static function get_value($value, ...$args) {
if ($value instanceof self) $value = $value->invoke($args);
elseif (is_callable($value)) $value = self::call($value, ...$args);
if ($value instanceof Traversable) $value = cl::all($value);
return $value;
}
/**
* si $value est une fonction, l'appeler
* si $value ou le résultat de l'appel est un Traversable, le retourner
* sinon retourner $value en tant qu'array
*/
static function get_iterable($value, ...$args): ?iterable {
if ($value instanceof self) $value = $value->invoke($args);
elseif (is_callable($value)) $value = self::call($value, ...$args);
if ($value instanceof Traversable) return $value;
else return cl::withn($value);
}
############################################################################# #############################################################################
protected function __construct(int $type, $func, ?array $args=null, bool $bound=false, ?string $reason=null) { protected function __construct(int $type, $func, ?array $args=null, bool $bound=false, ?string $reason=null) {

View File

@ -0,0 +1,42 @@
<?php
namespace nulib\ref\schema;
class ref_input {
const ACCESS_AUTO = 0, ACCESS_KEY = 1, ACCESS_PROPERTY = 2;
const INPUT_PARAMS_SCHEMA = [
"access_type" => ["int", self::ACCESS_AUTO, "type d'accès: clé ou propriété"],
"allow_empty" => ["bool", true, "la chaine vide est-elle autorisée?"],
"allow_null" => ["bool", true, "la valeur null est-elle autorisée?"],
];
const ACCESS_PARAMS_SCHEMA = [
"allow_empty" => ["bool", true, "la chaine vide est-elle autorisée?"],
"allow_null" => ["bool", null, "la valeur null est-elle autorisée?"],
"allow_false" => ["bool", null, "la valeur false est-elle autorisée?"],
"protect_dest" => ["bool", null, "faut-il protéger la destination?"],
];
const VALUE_ACCESS_PARAMS_SCHEMA = [
"allow_null" => ["bool", false],
"allow_false" => ["bool", true],
"protect_dest" => ["bool", false],
];
const ARRAY_ACCESS_PARAMS_SCHEMA = [
"allow_null" => ["bool", true],
"allow_false" => ["bool", false],
"protect_dest" => ["bool", true],
"key_prefix" => ["?string", null, "préfixe des clés pour les méthodes ensureXxx()"],
"key_suffix" => ["?string", null, "suffixe des clés pour les méthodes ensureXxx()"],
];
const PROPERTY_ACCESS_PARAMS_SCHEMA = [
"allow_null" => ["bool", true],
"allow_false" => ["bool", false],
"protect_dest" => ["bool", true],
"key_prefix" => ["?string", null, "préfixe des clés pour les méthodes ensureXxx()"],
"key_suffix" => ["?string", null, "suffixe des clés pour les méthodes ensureXxx()"],
"map_names" => ["bool", true, "faut-il mapper les clés en camelCase?"]
];
}

View File

@ -44,18 +44,41 @@ class ref_schema {
"invalid" => "Cette valeur est invalide", "invalid" => "Cette valeur est invalide",
]; ];
const PARAMS_SCHEMA = [
"analyze" => ["bool", true, "faut-il analyser la valeur?"],
"reanalyze" => ["bool", true, "faut-il forcer l'analyse de la valeur?"],
"normalize" => ["bool", true, "faut-il normaliser la valeur?"],
"renormalize" => ["bool", true, "faut-il forcer la normalisation de la valeur?"],
"throw" => ["bool", true, "faut-il lancer une exception en cas d'erreur?"],
//...ref_input::INPUT_PARAMS_SCHEMA,
];
/** @var array clés supplémentaires de schéma de la nature scalaire */ /** @var array clés supplémentaires de schéma de la nature scalaire */
const SCALAR_NATURE_METASCHEMA = [ const SCALAR_NATURE_METASCHEMA = [
]; ];
const SCALAR_PARAMS_SCHEMA = [
];
/** @var array clés supplémentaires de schéma de la nature associative */ /** @var array clés supplémentaires de schéma de la nature associative */
const ASSOC_NATURE_METASCHEMA = [ const ASSOC_NATURE_METASCHEMA = [
"ensure_array" => ["bool", false, "faut-il s'assurer que le tableau destination est non nul?"], "ensure_array" => ["bool", null, "faut-il s'assurer que le tableau destination est non nul?"],
"ensure_keys" => ["bool", true, "faut-il s'assurer que toutes les clés existent?"], "ensure_assoc" => ["bool", null, "faut-il s'assurer que le tableau destination est associatif?"],
"ensure_order" => ["bool", true, "faut-il s'assurer que les clés soient dans l'ordre?"], "ensure_keys" => ["bool", null, "faut-il s'assurer que toutes les clés existent avec la valeur par défaut?"],
"ensure_order" => ["bool", null, "faut-il s'assurer que les clés soient dans l'ordre?"],
];
const ASSOC_PARAMS_SCHEMA = [
"ensure_array" => ["bool", false],
"ensure_assoc" => ["bool", true],
"ensure_keys" => ["bool", true],
"ensure_order" => ["bool", true],
]; ];
/** @var array clés supplémentaires de schéma de la nature liste */ /** @var array clés supplémentaires de schéma de la nature liste */
const LIST_NATURE_METASCHEMA = [ const LIST_NATURE_METASCHEMA = [
]; ];
const LIST_PARAMS_SCHEMA = [
];
} }