Gilded Rose

Gilded Rose

Difícil

Instruções

Damos-te as boas-vindas à equipa de engenharia da Gilded Rose! Como sabes, somos uma estalagem que compra e vende apenas os melhores produtos. Os nossos produtos vão perdendo qualidade à medida que se aproximam da data-limite de venda, por isso temos um sistema de inventário que mantém o registo destes dados.

Precisamos que adiciones uma nova funcionalidade ao nosso sistema, para podermos começar a vender uma nova categoria de itens. No entanto, o código é uma confusão, e vai ser difícil adicionar a nova funcionalidade a menos que refatores primeiro o código existente.

Portanto, a tua tarefa tem duas partes: refatorar o sistema de inventário e, depois, adicionar a nova funcionalidade.

Visão geral do sistema de inventário

Aqui estão os pontos essenciais do nosso sistema:

  • Todos os itens têm um atributo "sell in", que indica o número de dias que temos para vender o item.
  • Todos os itens têm um atributo "quality", que indica o quão valioso é o item.
  • No final de cada dia, o nosso sistema diminui os dois valores em cada item.

Bastante simples, não é? Bem, é aqui que as coisas ficam interessantes:

  • Quando a data-limite de venda chega, a qualidade degrada-se duas vezes mais depressa.
  • A qualidade de um item nunca é negativa.
  • A qualidade da Aged Brie, na verdade, aumenta à medida que envelhece.
  • A qualidade de um item nunca é superior a 50.
  • A Sulfuras, por ser um item lendário, não tem data-limite de venda e tem uma qualidade de 80, que nunca diminui.
  • Os Backstage passes, tal como a Aged Brie, aumentam de qualidade à medida que a data-limite de venda se aproxima: a qualidade aumenta 2 quando faltam 10 dias ou menos e 3 quando faltam 5 dias ou menos, mas cai para 0 depois do concerto.

1. Refatorar

Para preparar o caminho para a nova funcionalidade, refatora o código existente e torna-o mais fácil de alterar.

Podes fazer as alterações que quiseres e acrescentar código novo, desde que tudo continue a funcionar corretamente (ou seja, desde que os testes das funcionalidades existentes continuem a passar).

Nota: podes assumir que os itens começam sempre com uma qualidade válida. Por outras palavras, os testes automáticos não verificam o que acontece quando um item tem uma qualidade inicial acima do máximo, nem quando uma Sulfuras tem uma qualidade inicial diferente de 80.

2. Adicionar a nova funcionalidade

Contratámos recentemente um fornecedor de itens Conjured. A tua tarefa é adicionar as seguintes regras ao nosso sistema:

  • Os itens Conjured ficam com qualidade 0 quando a sua data-limite de venda chega. Além disso:
    • Os itens normais Conjured perdem qualidade duas vezes mais depressa do que os itens normais que não são Conjured.
    • As Conjured Sulfuras têm data-limite de venda, ao contrário das Sulfuras normais.
    • Os Conjured backstage passes aumentam de qualidade menos 1 do que aumentariam se não fossem Conjured.
Editar via GitHub A ligação abre numa nova janela ou separador
Ruby Exercism

Estás pronto para começar Gilded Rose?

Inscreve-te no Exercism para aprenderes e dominares Ruby com 21 conceitos121 exercícios, e mentoria humana real, tudo grátis.