Aller au contenu

tilttek/generator-bundle

✅ publié

Des générateurs aléatoires pour Symfony : les listes et les gabarits de l'application, tirés dans ses pages, son terminal et son API.

tilttek/generator-bundle intègre tilttek/generator à une application Symfony. Il lit les listes et les générateurs dans les fichiers YAML et JSON de l'application, les garde en cache, et construit à la première utilisation le générateur qui les vérifie. Il ajoute des commandes qui valident les fichiers, écrivent un nouveau générateur et font des tirages dans le terminal. Il ajoute aussi une fonction Twig qui fait un tirage dans un gabarit, un gabarit et un contrôleur Stimulus qui refont le tirage sur place, et une API de tirage que d'autres sites et applications appellent sans jamais recevoir les listes. L'API est désactivée tant que l'application ne l'active pas. Elle n'ouvre que les générateurs qu'elle nomme, à tout le monde ou aux clients qui présentent leur jeton, sous les limites de débit de framework.rate_limiter. Il charge les tables aléatoires de la bibliothèque sur demande, en anglais ou en français, et garde les états des tables à mémoire (la météo d'une campagne, un voyage, une exploration) par générateur et par clé, dans un pool de cache ou dans un stockage de l'application.

Il s'adresse aux applications Symfony qui offrent des générateurs à leurs membres ou à d'autres sites : une page de générateur de noms, la boîte à outils d'un meneur de jeu, des tables aléatoires servies à une table virtuelle. Les listes appartiennent à l'application ; le bundle n'en fournit aucune, et les tables aléatoires de la bibliothèque ne sont chargées que quand l'application les demande.

C'est un bundle Symfony (AbstractBundle) sur tilttek/generator et tilttek/dice. Ses intégrations (l'API, les commandes, les limites de débit, le cache des états, la fonction Twig et le contrôleur Stimulus) sont enregistrées seulement quand leur composant est installé. Quand tilttek/dice-bundle est installé, ses dés, y compris les dés personnalisés, sont lancés dans les gabarits.

La conception est petite : CachedCatalog lit les fichiers et les met en cache, GeneratorFactory construit le Generator, MemoryTables fait des tirages à partir de l'état que garde un StateStore, derrière un StateLock quand un verrou est configuré, ApiAccess décide qui peut tirer quoi, DrawController sert les tirages, et les commandes et l'extension Twig utilisent le même générateur.

État

PartieÉtat
Listes et générateurs lus dans des fichiers et des répertoires, mis en cache, rafraîchis en mode débogageImplémenté et testé
Les tables aléatoires de la bibliothèque, chargées sur demande, en anglais ou en françaisImplémenté et testé
Tables à mémoire : états gardés par générateur et par clé dans un pool de cache, en mémoire ou dans le stockage de l'applicationImplémenté et testé
Un verrou facultatif sur symfony/lock, pour que deux tirages sur le même état ne perdent pas une mise à jourImplémenté et testé
Commandes : valider, créer (un texte, des champs, une carte, une table à mémoire, ou une copie d'une table aléatoire) et tirer, avec une cléImplémenté et testé
Fonction Twig tilttek_draw, gabarit et contrôleur Stimulus qui refont le tirageImplémenté et testé
API de tirage : désactivée par défaut, générateurs publics par adresse, clients par jeton, limites de débit, détails de problème, états renvoyés par le clientImplémenté et testé
Les dés de tilttek/dice-bundle dans les gabarits, quand il est installéImplémenté et testé

Documentation

DocumentContenu
InstallationPrérequis, installation, les fichiers et les routes.
ConfigurationChaque clé de tilttek_generator.
Commandestilttek:generator:validate, create et draw.
Tables à mémoireMemoryTables, le stockage des états, le verrou, et les états par l'API.
Gabaritstilttek_draw, le gabarit qui refait le tirage et son contrôleur Stimulus.
API de tirageLa route, les paramètres, les réponses, l'accès et les limites de débit.
Points d'extensionLes services qu'une application peut remplacer ou utiliser.
ExceptionsLes exceptions du bundle et comment l'API y répond.
TestsLes tests du bundle et sa barre de mutation, et comment tester les générateurs d'une application.
RéférenceChaque type du bundle, avec son rôle.

La syntaxe des générateurs (listes, gabarits, grammaire, cartes et tirages) est celle de tilttek/generator, documentée dans son propre doc/.

Démarrage rapide

composer require tilttek/generator-bundle
# config/generators/names.yaml
lists:
  name.syllable: [ka, ri, to, mu, sel]
generators:
  name.short:
    templates: "{% set a = pick('name.syllable') %}{{ a }}{{ pick('name.syllable', not: a) }}"
    filters: [capitalize]
{{ include('@TilttekGenerator/draw.html.twig', {
    result: tilttek_draw('name.short', 5, true),
    url: path('tilttek_generator_draw', {generator: 'name.short'}),
}) }}
bin/console tilttek:generator:validate
bin/console tilttek:generator:draw name.short --count=5 --unique

Prérequis

PHP 8.5 ou plus récent, Symfony 8.2.

Contribuer

Les contributions sont les bienvenues sur le monodépôt de PHIL : lisez le guide de contribution et le code de conduite. Signalez une vulnérabilité en privé, comme l'explique la politique de sécurité, jamais dans un ticket public.

Licence

MIT, © Philippe Gamache, doing business as Le Gnome Archiviste; a Tilttek project. Voir LICENSE.