# Classe ApiUsage

La classe ApiUsage gère la définition et la validation des paramètres lors de l'appel et l'exécution de scripts CLI.
Elle permet de spécifier et contrôler la présence de paramètres requis ou optionnels, et de retourner un texte d'aide précisant les paramètres requis lorsque la validation échoue.

# Constructeur

new ApiUsage();

# Exemple

use Anakeen\Script;

$usage = new ApiUsage();
$docId = $usage->addRequiredParameter("id", "Smart Element id");
$usage->verify();

doSomethingWith($docId);
$ ./ank.php --script=test
Erreur : {CORE0001} argument 'id' expected


Usage :
        --id=<Smart Element id>
   Options:
        --userid=<user system id or login name to execute function - default is (admin)>, default is '1'
        --help (Show usage)

# Méthodes de la classe ApiUsage

# addEmptyParameter

    bool addEmptyParameter(string $argName, string $argDefinition = "")

Cette méthode ajoute un paramètre qui ne prend pas de valeur (autrement nommé flag). Elle retourne true si le paramètre est appliqué, false sinon.

# Liste des paramètres

argName (string)

Le nom du paramètre

argDefinition (string)

Un texte (simple ligne) de description du paramètre

# Exemple

use Anakeen\Script;

$usage = new ApiUsage();
$debug = $usage->addEmptyParameter("debug", "Turn on debug message");
$usage->verify();

$debug = $debug === false ? false : true;

if ($debug) {
  printf("Debug mode ON\n");
} else {
  printf("Debug mode OFF\n");
}

# addHiddenParameter

    string addHiddenParameter(string $argName, string $argDefinition = "")

Cette méthode ajoute un paramètre sans que celui-ci ne soit visible dans le texte d'usage. Un paramètre hidden n'est pas requis, et il est traité comme un paramètre optionnel (ApiUsage::addOptionalParameter). Cette méthode retourne la valeur du paramètre ou null si le paramètre n'est pas présent.

# Liste des paramètres

argName (string)

Le nom du paramètre

argDefinition

Un texte (simple ligne) de description du paramètre.

# Exemple

use Anakeen\Script;

$usage = new ApiUsage();
$hidden = $usage->addHiddenParameter("hidden", "Hidden option");
$usage->verify();

printf("hidden = '%s'\n", $hidden);

# addRequiredParameter

    string addRequiredParameter(string $argName, string $argDefinition = "", string[]|callable $restriction = null)

Cette méthode ajoute un paramètre obligatoire.
Elle retourne la valeur du paramètre. Si la valeur n'est pas conforme à la restriction spécifiée au moyen du paramètre restriction, alors la validation est mise en erreur.

# Liste des paramètres

argName (string)

Le nom du paramètre

argDefinition

Un texte (simple ligne) de description du paramètre

restriction (string[] | callable)

Liste des valeurs possibles pour le paramètre ou un [callable][callable_information] vérifiant une contrainte à appliquer à la valeur du paramètre.
Si la restriction est un array, alors la valeur passée doit obligatoirement être scalaire, et sa valeur doit être parmi les valeurs du tableau.
Pour une autre restriction, se reporter à la description du [callable de restriction][callable_information].

# Le callable de restriction

Le paramètre de restriction peut être un callable. Il permet de vérifier une contrainte que l'on souhaite appliquer aux valeurs passées en argument du paramètre.

    string function(string|string[] $values, string $argName, ApiUsage $apiusage)

Ce callable reçoit trois arguments:

  • values (string|string[])

    La ou les valeurs du paramètre

  • argName (string)

    Le nom du paramètre

  • apiusage (ApiUsage)

    L'objet courant de type ApiUsage contenant les informations des autres paramètres.
    Il est déclenché lors de l'appel à ApiUsage::verify() et doit retourner :

    • une chaîne vide si la valeur est valide,
    • un message d'erreur si la valeur n'est pas valide,
    • une chaîne d'usage si la valeur est la constante ApiUsage::GET_USAGE. Les callables suivants sont disponibles pour les cas standard:
    • ApiUsage::isScalar : vérifie que la valeur est scalaire (c'est la restriction appliquée par défaut),
    • ApiUsage::isArray : vérifie que la valeur est multiple.

# Exemple

use Anakeen\Script;

$usage = new ApiUsage();
$docid = $usage->addRequiredParameter("docid", "Smart Element id");
$format = $usage->addRequiredParameter("format", "Paper format", array("a4", "a3"));
$usage->verify();

printf("docid = '%s'\n", $docid);
printf("format = '%s'\n", $format);
  • Passage d'une valeur ne respectant pas la restriction
$ ./ank.php --script=test --docid=1234 --format=foo
Erreur : {CORE0001} argument 'format' must be one of these values : a4, a3


Usage :
        --docid=<Smart Element id>
        --format=<Paper format> [a4|a3]
   Options:
        --userid=<user system id or login name to execute function - default is (admin)>, default is '1'
        --help (Show usage)
  • Appel valide
$ ./ank.php --script=test --docid=1234 --format=a4
docid = '1234'
format = 'a4'
  • Restriction par un callable
use Anakeen\Script;

    $usage = new ApiUsage();
    $numberpositive = $usage->addRequiredParameter(
        "number",
        "A number",
        function($values, $argname, $apiusage){
            if (ApiUsage::GET_USAGE === $values) {
                return "A positive number";
            }
            if (is_array($values)) {
                $invalidValues = array_filter($values, function($var) {return($var < 0);});
                if (count($invalidValues) > 0 ) {
                    return sprintf("Following values are not positive: [%s]", implode("],[", $invalidValues));
                }
            } elseif ($values < 0) {
                return sprintf("Following value are not positive : [%s]", $values);
            }
            return "";
        }
    };
    $usage->verify();

    printf("number = '%s'\n", $numberpositive);
  • Passage d'une valeur ne respectant pas la restriction :
$ ./ank.php --script=test --number=-12
Erreur : {CORE0001} Error checking argument number type: Following value is not positive : [-12]


Usage :
      --number=<A number>A positive number
 Options:
      --userid=<user system id or login name to execute function - default is (admin)>, default is '1'
      --help (Show usage)
  • Appel valide
$ ./ank.php --script=test --number=12
number = '12'

# addOptionalParameter

    string addOptionalParameter( string $argName,
                                 string $argDefinition,
                                 string[]|callable $restriction = null,
                                 string $default = null)

Cette méthode ajoute un paramètre optionnel. Elle retourne trois valeurs possibles:

  • si le paramètre est présent, alors la valeur du paramètre est retournée,
  • si le paramètre n'est pas présent et qu'une valeur par défaut est fournie, alors c'est la valeur par défaut qui est retournée, sinon null est retourné,
  • si la valeur n'est pas conforme à la restriction spécifiée au moyen du paramètre restriction, alors la validation est mise en erreur.

# Liste des paramètres

argName (string)

Le nom du paramètre

argDefinition (string)

Un texte (simple ligne) de description du paramètre

restriction (string[]|callable)

Liste des valeurs possibles pour le paramètre ou un callable vérifiant une contrainte à appliquer à la valeur du paramètre.
Si la restriction est un array, alors la valeur passée doit obligatoirement être scalaire, et sa valeur doit être parmi les valeurs du tableau.
Pour une autre restriction, se reporter à la description du callable de restriction.

default (string)

Valeur retournée par défaut si le paramètre n'est pas présent.

# Exemple

  • Définition du paramètre format
use Anakeen\Script;

$usage = new ApiUsage();
$format = $usage->addOptionalParameter("format", "Paper format", array("a4", "a3"), "a4");
$usage->verify();
printf("format = '%s'\n", $format);
  • Chaîne d'usage générée
$ ./ank.php --script=test --help

Usage :
   Options:
        --userid=<user system id or login name to execute function - default is (admin)>, default is '1'
        --format=<Paper format> [a3|a4], default is 'a4'
        --help (Show usage)
  • Valeur par défaut
$ ./ank.php --script=test
format = 'a4'
  • Passage de la valeur
$ ./ank.php --script=test --format=a3
format = 'a3'

# setDefinitionText

    void setDefinitionText(string $text)

Cette méthode ajoute un texte de description du script d'API dans le message d'usage.

# Liste des paramètres

text (string)

Le texte (simple ligne) de description du script

# Exemple

use Anakeen\Script;

$usage = new ApiUsage();
$usage->setDefinitionText("Script de test de la classe ApiUsage");
$usage->verify();
$ ./ank.php --script=test --help
Script de test de la classe ApiUsage
Usage :
   Options:
        --userid=<user system id or login name to execute function - default is (admin)>, default is '1'
        --help (Show usage)

# setStrictMode

    void setStrictMode( bool $strict = true)

Cette méthode active ou désactive le mode de validation strict des paramètres. Lorsque le mode de validation strict est activé, la présence d'arguments non enregistrés auprès de l'instance d'ApiUsage en cours met en échec la validation des paramètres.
Par défaut, le mode de validation strict est actif.

# Liste des paramètres

strict (bool)

Active (true) ou désactive (false) le mode de validation strict.

# Exemple

use Anakeen\Script;

$usage = new ApiUsage();
$usage->setStrictMode(false);
$ ./ank.php --script=test --foo=bar

Aucune erreur n'est remontée concernant le paramètre foo inconnu.

# verify

    void verify( bool $useException = false)

Cette méthode lance la validation des paramètres précédemment définis. Elle génère une erreur si les paramètres ne sont pas conformes.

# Liste des paramètres

useException (bool)

Active (true) ou désactive (false) la remontée d'erreur par exception lors de l'échec de la validation des paramètres.

# Exemple

use Anakeen\Script;

$usage = new ApiUsage();
try {
  $usage->verify(true);
} catch (Anakeen\Script\Exception $e) {
  printf("Bad parameters!\n");
}
printf("Done.");
$ ./ank.php --script=test --foo=bar
Bad parameters!
Done.

# isScalar

    string isScalar($argVal, $argName)

Cette méthode vérifie qu'une valeur est scalaire.
Elle retourne une chaîne vide s'il n'y a pas d'erreur, ou une chaîne non-vide contenant le message d'erreur dans le cas contraire.

# Liste des paramètres

argVal (string)

valeur du paramètre à vérifier

argName (string)

Nom du paramètre

# isArray

    string isArray($argVal)

Cette méthode vérifie si le paramètre est un tableau.
Elle retourne une chaîne vide s'il n'y a pas d'erreur, ou une chaîne non-vide contenant le message d'erreur dans le cas contraire.

# Liste des paramètres

argVal (string)

valeur du paramètre à vérifier

# setDefinitionText

    void setDefinitionText($text)

Cette méthode ajoute une description au script.

# Liste des paramètres

text (string)

description (simple ligne) à ajouter au script

# getUsage

    string getUsage()

Cette méthode retourne les informations relatives à un script telles que :

  • une description,
  • les paramètres obligatoires du script,
  • les paramètres optionnels du script.