Треки
/
Ruby
Ruby
/
Вправи
/
Позолочена троянда
Позолочена троянда

Позолочена троянда

Складна

Вказівки

Вітаємо в інженерній команді Gilded Rose! Як відомо, ми таверна, яка купує й продає лише найкращі товари. Якість наших товарів постійно знижується в міру наближення терміну продажу, тож ми маємо систему обліку запасів, яка відстежує ці дані.

Нам потрібно додати до нашої системи нову можливість, щоб ми могли почати продавати нову категорію товарів. Однак код заплутаний, і додати нову можливість буде складно, якщо спершу не відрефакторити наявний код.

Отже, завдання подвійне: відрефакторити систему обліку запасів, а потім додати нову можливість.

Огляд системи обліку запасів

Ось основи нашої системи:

  • Усі предмети мають атрибут «sell in», який позначає кількість днів, за які ми маємо продати предмет.
  • Усі предмети мають атрибут «quality», який позначає, наскільки цінним є предмет.
  • Наприкінці кожного дня наша система знижує обидва значення для кожного предмета.

Досить просто, правда? Але ось де починається цікаве:

  • Коли настає термін продажу, якість знижується удвічі швидше.
  • Якість предмета ніколи не буває відʼємною.
  • Якість Aged Brie насправді зростає з часом.
  • Якість предмета ніколи не перевищує 50.
  • Sulfuras, як легендарний предмет, не має терміну продажу, а його якість становить 80 і ніколи не знижується.
  • Backstage passes, як і Aged Brie, підвищують якість у міру наближення терміну продажу: якість зростає на 2, коли залишається 10 днів або менше, і на 3, коли залишається 5 днів або менше, але після концерту якість падає до 0.

1. Рефакторинг

Щоб підготувати ґрунт для нової можливості, відрефакторіть наявний код і зробіть його простішим для змін.

Сміливо вносьте будь-які зміни й додавайте будь-який новий код, аби лише все й далі працювало правильно (тобто аби тести для наявних можливостей і далі проходили).

Примітка: можна припустити, що предмети завжди починають із припустимої якості. Інакше кажучи, автоматичні тести не перевіряють, що відбувається, коли початкова якість предмета перевищує максимум, або коли початкова якість Sulfuras відрізняється від 80.

2. Додавання нової можливості

Нещодавно ми уклали договір із постачальником предметів Conjured. Завдання - додати такі правила до нашої системи:

  • У предметів Conjured якість падає до 0, коли настає термін продажу. Крім того:
    • Conjured normal items знижують якість удвічі швидше, ніж звичайні предмети без Conjured.
    • Conjured Sulfuras має термін продажу, на відміну від звичайної Sulfuras.
    • Conjured backstage passes підвищують якість на 1 менше, ніж звичайні backstage passes.

Джерело

Gilded Rose KataПосилання відкривається в новому вікні або вкладці
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Ruby Exercism

Час розпочати Позолочена троянда?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Ruby, а також 21 концепція121 вправа та справжнє наставництво від людей, і все це безкоштовно.