Trilhas
/
Ruby
Ruby
/
Exercícios
/
Gilded Rose
Gilded Rose

Gilded Rose

Difícil

Instruções

Bem-vindo à equipe de engenharia da Gilded Rose! Como você sabe, somos uma pousada que compra e vende apenas os melhores produtos. Nossos produtos estão constantemente perdendo qualidade conforme se aproximam da data de validade, por isso temos um sistema de inventário que acompanha esses dados.

Precisamos que você adicione um novo recurso ao nosso sistema para que possamos começar a vender uma nova categoria de itens. No entanto, o código está uma bagunça, e vai ser difícil adicionar o novo recurso sem antes refatorar o código existente.

Então sua tarefa tem duas partes: refatorar o sistema de inventário e depois adicionar o novo recurso.

Visão geral do sistema de inventário

Aqui estão os fundamentos 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 quanto o item é valioso.
  • No fim de cada dia, nosso sistema diminui os dois valores de cada item.

Bem simples, né? Mas é aí que fica interessante:

  • Quando a data de validade chega, a qualidade cai duas vezes mais rápido.
  • A qualidade de um item nunca é negativa.
  • O Aged Brie, na verdade, aumenta de qualidade à medida que envelhece.
  • A qualidade de um item nunca passa de 50.
  • O Sulfuras, por ser um item lendário, não tem data de validade e tem qualidade 80, que nunca diminui.
  • Os Backstage passes, assim como o Aged Brie, ganham qualidade conforme a data de validade se aproxima: a qualidade aumenta em 2 quando faltam 10 dias ou menos e em 3 quando faltam 5 dias ou menos, mas a qualidade cai para 0 depois do show.

1. Refatorar

Para abrir caminho para o novo recurso, refatore o código existente e deixe-o mais fácil de mudar.

Fique à vontade para fazer qualquer mudança e adicionar qualquer código novo, desde que tudo continue funcionando corretamente (ou seja, desde que os testes das funcionalidades existentes continuem passando).

Observação: você pode assumir que os itens sempre começam com uma qualidade válida. Em outras palavras, os testes automatizados não verificam o que acontece quando um item tem qualidade inicial acima do máximo, nem quando um Sulfuras tem qualidade inicial diferente de 80.

2. Adicionar o novo recurso

Recentemente, fechamos contrato com um fornecedor de itens Conjured. Sua tarefa é adicionar as seguintes regras ao nosso sistema:

  • Os itens Conjured caem para qualidade 0 quando a data de validade chega. Além disso:
    • Os Conjured normal items perdem qualidade duas vezes mais rápido que os itens normais não conjured.
    • O Conjured Sulfuras tem data de validade, ao contrário de um Sulfuras não conjurado.
    • Os Conjured backstage passes aumentam de qualidade 1 a menos do que se não fossem conjurados.
Editar via GitHub O link abre em uma nova janela ou aba
Ruby Exercism

Tudo pronto para começar Gilded Rose?

Crie sua conta no Exercism para aprender e dominar Ruby com 21 conceitos121 exercícios e mentoria humana de verdade, tudo de graça.