Rutas
/
Ruby
Ruby
/
Ejercicios
/
La rosa dorada
La rosa dorada

La rosa dorada

Difícil

Instrucciones

¡Bienvenido al equipo de ingeniería de Gilded Rose! Como sabes, somos una posada que solo compra y vende los mejores artículos. Nuestros artículos se degradan constantemente en calidad a medida que se acercan a su fecha de caducidad, así que tenemos un sistema de inventario que lleva un registro de estos datos.

Necesitamos que añadas una nueva funcionalidad a nuestro sistema para que podamos empezar a vender una nueva categoría de artículos. Sin embargo, el código es un desastre y será difícil añadir 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, después, añadir la nueva funcionalidad.

Resumen del sistema de inventario

Estos son los conceptos básicos de nuestro sistema:

  • Todos los artículos tienen un atributo «sell in», que indica el número de días que tenemos para vender el artículo.
  • Todos los artículos tienen un atributo «quality», que indica cuánto vale el artículo.
  • Al final de cada día, nuestro sistema reduce ambos valores para cada artículo.

Bastante sencillo, ¿verdad? Pues aquí es donde se pone interesante:

  • Cuando llega la fecha de caducidad, la calidad se degrada el doble de rápido.
  • La calidad de un artículo nunca es negativa.
  • Aged Brie en realidad aumenta de calidad a medida que envejece.
  • La calidad de un artículo nunca supera 50.
  • Sulfuras, al ser un artículo legendario, no tiene fecha de caducidad y tiene una calidad de 80 que nunca disminuye.
  • Las Backstage passes, al igual que Aged Brie, aumentan de calidad a medida que se acerca su fecha de caducidad: la calidad aumenta en 2 cuando quedan 10 días o menos y en 3 cuando quedan 5 días o menos, pero la calidad cae a 0 después del concierto.

1. Refactoriza

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

Puedes hacer los cambios que quieras y añadir código nuevo siempre que todo siga funcionando correctamente (es decir, siempre que los tests de las funcionalidades existentes sigan pasando).

Nota: puedes asumir que los artículos siempre empiezan con una calidad válida. En otras palabras, los tests automatizados no comprueban qué ocurre cuando un artículo tiene una calidad inicial por encima del máximo, ni cuando un Sulfuras tiene una calidad inicial distinta de 80.

2. Añade la nueva funcionalidad

Hace poco hemos firmado un acuerdo con un proveedor de artículos Conjured. Tu trabajo consiste en añadir las siguientes reglas a nuestro sistema:

  • Los artículos Conjured bajan a 0 su calidad en cuanto llega su fecha de caducidad. Además:
    • Los Conjured normal items se degradan en calidad el doble de rápido que los artículos normales no conjurados.
    • Conjured Sulfuras tiene fecha de caducidad, a diferencia de un Sulfuras no conjurado.
    • Las Conjured backstage passes aumentan de calidad en 1 menos que si no estuvieran conjuradas.
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Ruby Exercism

¿Listo para empezar La rosa dorada?

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