nur-sery/nur_src/mapper/base/capacitor/ICapacitor.php

63 lines
2.2 KiB
PHP

<?php
namespace nur\mapper\base\capacitor;
/**
* Interface ICapacitor: objet qui permet d'accumuler des données pour les
* fournir en une seule fois au moment voulu
*/
interface ICapacitor {
const KEY_SCHEMA = [
"name" => ["key", null, "nom de la clé", "required" => true],
"primary" => ["bool", false, "est-ce une clé primaire?"],
"reverse" => ["?bool", null, "sens du tri par défaut"],
];
/**
* spécifier les clés à traquer lors du chargement d'une donnée.
*
* si une clé est marquée comme primaire, alors les doublons éventuels sont
* supprimés au fur et à mesure du chargement.
*/
function setKeys(array $keys, ?string $channel=null): void;
const SORT_SCHEMA = [
"name" => ["key", null, "nom de la clé", "required" => true],
"reverse" => ["?bool", null, "sens du tri"],
];
/**
* trier les données selon les clés spécifiées. si $keys===null, alors toutes
* les clés définies au préalable avec {@link setKeys()} sont utilisées.
*
* $keys ne doit mentionner que des clés déclarées avec {@link setKeys()}
*/
function sort(?array $keys=null, ?string $channel=null): void;
/**
* charger l'accumulateur avec un élément.
*
* Dans le cas où $item === null, le comportement est particulier:
* - Si aucune clé primaire n'a été définie, l'élément est systématiquement
* chargé
* - Si une clé primaire a été définie, l'élément est ignoré, sauf si
* $pkvalues est spécifiée. Dans ce cas, $pkvalues est utilisé comme clé
* primaire
*/
function charge($item, ?string $channel=null, $pkvalues=null): void;
/** méthode de convenance pour charger l'accumulateur avec plusieurs éléments */
function chargeAll(iterable $items, ?string $channel=null): void;
/**
* obtenir un élément à partir de sa clé primaire. une clé primaire doit avoir
* été définie au préalable avec {@link setKeys()}
*
* si aucune clé primaire n'a été définie, alors le seul moyen d'atteindre un
* élément est par son index
*/
function getItem($pkvalues, ?string $channel=null, $default=null);
/** décharger l'accumulateur en une seule fois */
function discharge(?string $channel=null, bool $remove=true): iterable;
}