Aller au contenu

Écrire un magasin

tilttek/progression

La progression est gardée dans trois magasins. Une application qui n'utilise pas le bundle les implémente sur son stockage ; chacun doit réussir le cas de test de contrat que fournissent les tests de la bibliothèque.

ExperienceStore

MéthodeContrat
add(Gain)Écrit le gain une fois par piste, par règle et par activité ; faux quand il existe déjà
remove(activity)Retire et retourne chaque gain de l'activité, sous forme de liste
total(track, subject, season)La somme des gains du sujet sur la piste dans la saison, le code vide pour aucune saison
lifetime(track, subject)La somme de toutes les saisons
seasons(track, subject)Un Total par saison, ceux en dehors de toute saison omis
earned(track, rule, subject, since, until)Ce que la règle a donné de since, inclus, à until, exclu
totalsSince(since)Les totaux complets de chaque piste, sujet et saison ayant un gain à partir de since
of(subject)Les gains du sujet, dans l'ordre où ils sont survenus
forget(since)Supprime les gains à partir de since, tous quand il est null
eraseMember(member)Supprime les gains dont le sujet ou le membre est le membre

MilestoneStore

reach() écrit un ReachedMilestone une fois par piste, par jalon, par sujet et par saison ; of() énumère ceux d'un sujet dans l'ordre où ils ont été atteints ; eraseMember() supprime ceux dont le sujet ou le membre est le membre.

StreakStore

add() écrit un StreakGesture une fois par série et par activité ; remove() retourne et supprime les gestes d'une activité ; units() énumère les unités actives d'un membre, triées, chacune une fois ; freeze(), thaw() et frozen() gardent les unités gelées ; state(), save() et discard() gardent un StreakState par série et par membre ; alive(streak, before) énumère les états qui ont une série en cours dont la dernière unité active est avant before ; forget() supprime les gestes à partir d'un moment, et eraseMember() tout ce qui concerne un membre.

Les gains et les gestes sont écrits une seule fois même quand deux processus les écrivent au même moment : une clé unique sur la piste, la règle et l'activité (la série et l'activité), et une insertion qui n'écrit rien sur un doublon.