Parcours
/
Ruby
Ruby
/
Exercices
/
Gilded Rose
Gilded Rose

Gilded Rose

Difficile

Instructions

Bienvenue dans l'équipe d'ingénierie de la Gilded Rose ! Comme tu le sais, nous sommes une auberge qui n'achète et ne vend que les meilleures marchandises. Nos marchandises se dégradent constamment en qualité à mesure qu'elles approchent de leur date limite de vente, c'est pourquoi nous avons un système d'inventaire qui garde la trace de ces données.

Nous avons besoin que tu ajoutes une nouvelle fonctionnalité à notre système, afin que nous puissions commencer à vendre une nouvelle catégorie d'articles. Cependant, le code est en désordre, et il sera difficile d'ajouter cette nouvelle fonctionnalité sans commencer par réécrire le code existant.

Ta tâche se décompose donc en deux parties : réécrire le système d'inventaire, puis ajouter la nouvelle fonctionnalité.

Aperçu du système d'inventaire

Voici les bases de notre système :

  • Tous les articles ont un attribut « sell in », qui indique le nombre de jours dont nous disposons pour vendre l'article.
  • Tous les articles ont un attribut « quality », qui indique la valeur de l'article.
  • À la fin de chaque journée, notre système diminue ces deux valeurs pour chaque article.

Plutôt simple, non ? Eh bien, c'est là que ça devient intéressant :

  • Une fois la date limite de vente arrivée, la qualité se dégrade deux fois plus vite.
  • La qualité d'un article n'est jamais négative.
  • Aged Brie augmente même en qualité à mesure qu'il vieillit.
  • La qualité d'un article ne dépasse jamais 50.
  • Sulfuras, en tant qu'objet légendaire, n'a pas de date limite de vente, et sa qualité de 80 ne diminue jamais.
  • Les Backstage passes, comme Aged Brie, gagnent en qualité à mesure que leur date limite de vente approche : la qualité augmente de 2 quand il reste 10 jours ou moins et de 3 quand il reste 5 jours ou moins, mais elle tombe à 0 après le concert.

1. Réécris

Pour préparer le terrain à la nouvelle fonctionnalité, réécris le code existant et rends-le plus facile à modifier.

Tu peux faire tous les changements et ajouter tout le code que tu veux, tant que tout continue de fonctionner correctement (c'est-à-dire tant que les tests des fonctionnalités existantes passent encore).

Remarque : tu peux partir du principe que les articles commencent toujours avec une qualité valide. Autrement dit, les tests automatisés ne vérifient pas ce qui se passe quand un article a une qualité initiale supérieure au maximum, ni quand un Sulfuras a une qualité initiale différente de 80.

2. Ajoute la nouvelle fonctionnalité

Nous venons de signer avec un fournisseur d'articles Conjured. Ton travail consiste à ajouter les règles suivantes à notre système :

  • Les articles Conjured voient leur qualité tomber à 0 une fois leur date limite de vente atteinte. De plus :
    • Les Conjured normal items se dégradent en qualité deux fois plus vite que les articles normaux non conjured.
    • Conjured Sulfuras a une date limite de vente, contrairement à un Sulfuras non conjured.
    • Les Conjured backstage passes gagnent 1 point de qualité de moins que s'ils n'étaient pas conjured.
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Ruby Exercism

Prêt à commencer Gilded Rose ?

Inscris-toi sur Exercism pour apprendre et maîtriser Ruby avec 21 concepts121 exercices, et un vrai mentorat humain, le tout gratuitement.