Track
/
Ruby
Ruby
/
Esercizi
/
Gilded Rose
Gilded Rose

Gilded Rose

Difficile

Istruzioni

Benvenuto nel team di ingegneria della Gilded Rose! Come sai, siamo una locanda che compra e vende solo le merci più pregiate. La quality delle nostre merci peggiora costantemente man mano che si avvicinano alla loro data di scadenza, perciò abbiamo un sistema di inventario che tiene traccia di questi dati.

Ci serve che tu aggiunga una nuova funzionalità al nostro sistema, così da poter iniziare a vendere una nuova categoria di articoli. Tuttavia, il codice è un disastro e sarà difficile aggiungere la nuova funzionalità se prima non riorganizzi il codice esistente.

Il tuo compito è quindi duplice: riorganizzare il sistema di inventario, poi aggiungere la nuova funzionalità.

Panoramica del sistema di inventario

Ecco le basi del nostro sistema:

  • Tutti gli articoli hanno un attributo «sell in», che indica il numero di giorni che abbiamo per vendere l'articolo.
  • Tutti gli articoli hanno un attributo «quality», che indica quanto è prezioso l'articolo.
  • Alla fine di ogni giornata, il nostro sistema abbassa entrambi i valori per ogni articolo.

Abbastanza semplice, vero? Beh, è qui che le cose si fanno interessanti:

  • Una volta arrivata la data di scadenza, la quality peggiora due volte più in fretta.
  • La quality di un articolo non è mai negativa.
  • La quality di Aged Brie in realtà aumenta man mano che invecchia.
  • La quality di un articolo non è mai superiore a 50.
  • Sulfuras, essendo un articolo leggendario, non ha una data di scadenza, e ha una quality di 80 che non diminuisce mai.
  • I Backstage passes, come Aged Brie, aumentano di quality man mano che si avvicina la loro data di scadenza: la quality aumenta di 2 quando mancano 10 giorni o meno e di 3 quando ne mancano 5 o meno, ma dopo il concerto la quality scende a 0.

1. Riorganizza

Per preparare la strada alla nuova funzionalità, riorganizza il codice esistente e rendilo più facile da modificare.

Sentiti libero di apportare qualsiasi modifica e di aggiungere nuovo codice, purché tutto continui a funzionare correttamente (cioè, purché i test delle funzionalità esistenti continuino a passare).

Nota: puoi assumere che gli articoli inizino sempre con una quality valida. In altre parole, i test automatici non verificano cosa succede quando un articolo ha una quality iniziale superiore al massimo, o quando una Sulfuras ha una quality iniziale diversa da 80.

2. Aggiungi la nuova funzionalità

Abbiamo appena firmato un accordo con un fornitore di articoli Conjured. Il tuo compito è aggiungere le seguenti regole al nostro sistema:

  • Gli articoli Conjured scendono a 0 di quality una volta arrivata la loro data di scadenza. Inoltre:
    • Gli Conjured normal items peggiorano di quality due volte più in fretta rispetto agli articoli normali non conjured.
    • La Conjured Sulfuras ha una data di scadenza, a differenza di una Sulfuras non conjured.
    • I Conjured backstage passes aumentano di quality di 1 in meno rispetto a quanto farebbero se non fossero conjured.
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Ruby Exercism

Vuoi iniziare Gilded Rose?

Iscriviti a Exercism per imparare e padroneggiare Ruby con 21 concetti121 esercizi e il mentoring di persone reali, tutto gratis.