Tracks
/
Ruby
Ruby
/
Ejercicios
/
Gilded Rose
Gilded Rose

Gilded Rose

Difícil

Instrucciones

¡Te damos la bienvenida al equipo de ingeniería de Gilded Rose! Como sabes, somos una posada que compra y vende solo los mejores productos. Nuestros productos se degradan constantemente en «quality» a medida que se acercan a su fecha de venta, así que tenemos un sistema de inventario que lleva un registro de estos datos.

Necesitamos que agregues una nueva funcionalidad a nuestro sistema para poder empezar a vender una nueva categoría de artículos. Sin embargo, el código es un desastre y será difícil agregar la nueva funcionalidad a menos que primero refactorices el código existente.

Así que tu tarea tiene dos partes: refactorizar el sistema de inventario y luego agregar la nueva funcionalidad.

Descripción general del sistema de inventario

Estos son los aspectos básicos de nuestro sistema:

  • Todos los artículos tienen un atributo «sell in», que indica la cantidad de días que tenemos para vender el artículo.
  • Todos los artículos tienen un atributo «quality», que indica qué tan valioso es el artículo.
  • Al final de cada día, nuestro sistema reduce ambos valores en todos los artículos.

Bastante simple, ¿no? Pues aquí es donde se pone interesante:

  • Una vez que llega la fecha de venta, la «quality» se degrada al doble de velocidad.
  • La «quality» de un artículo nunca es negativa.
  • La «quality» de Aged Brie en realidad aumenta a medida que envejece.
  • La «quality» de un artículo nunca es mayor que 50.
  • Sulfuras, al ser un artículo legendario, no tiene fecha de venta y tiene una «quality» de 80 que nunca disminuye.
  • Los Backstage passes, al igual que Aged Brie, aumentan su «quality» a medida que se acerca su fecha de venta: la «quality» aumenta en 2 cuando quedan 10 días o menos y en 3 cuando quedan 5 días o menos, pero la «quality» cae a 0 después del concierto.

1. Refactoriza

Para preparar el camino a la nueva funcionalidad, refactoriza el código existente y hazlo más fácil de cambiar.

Puedes hacer todos los cambios que quieras y agregar el código nuevo que necesites, siempre que todo siga funcionando correctamente (es decir, siempre que sigan pasando las pruebas de las funcionalidades existentes).

Nota: puedes asumir que los artículos siempre empiezan con una «quality» válida. En otras palabras, las pruebas automatizadas no verifican qué pasa cuando un artículo tiene una «quality» inicial por encima del máximo, ni cuando un Sulfuras tiene una «quality» inicial distinta de 80.

2. Agrega la nueva funcionalidad

Hace poco firmamos un contrato con un proveedor de artículos Conjured. Tu trabajo es agregar las siguientes reglas a nuestro sistema:

  • Los artículos Conjured caen a una «quality» de 0 una vez que llega su fecha de venta. Además:
    • Los Conjured normal items se degradan en «quality» al doble de velocidad que los artículos normales que no son Conjured.
    • Un Conjured Sulfuras tiene fecha de venta, a diferencia de un Sulfuras que no es Conjured.
    • Los Conjured backstage passes aumentan su «quality» 1 menos de lo que lo harían si no fueran Conjured.
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Ruby Exercism

¿Todo listo para empezar Gilded Rose?

Regístrate en Exercism para aprender y dominar Ruby con 21 conceptos121 ejercicios y mentoría humana real, todo gratis.