mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-19 00:11:35 +00:00
pre README.md
This commit is contained in:
parent
1a746202c7
commit
b9ff3e1923
@ -133,4 +133,4 @@ PHPUnit `composer phpstan` can be run:
|
|||||||
ps
|
ps
|
||||||
```
|
```
|
||||||
|
|
||||||
## ffff
|
|
||||||
|
|||||||
@ -18,7 +18,6 @@ $items = [
|
|||||||
new Item('Backstage passes to a TAFKAL80ETC concert', 15, 20),
|
new Item('Backstage passes to a TAFKAL80ETC concert', 15, 20),
|
||||||
new Item('Backstage passes to a TAFKAL80ETC concert', 10, 49),
|
new Item('Backstage passes to a TAFKAL80ETC concert', 10, 49),
|
||||||
new Item('Backstage passes to a TAFKAL80ETC concert', 5, 49),
|
new Item('Backstage passes to a TAFKAL80ETC concert', 5, 49),
|
||||||
// this conjured item does not work properly yet
|
|
||||||
new Item('Conjured Mana Cake', 3, 6),
|
new Item('Conjured Mana Cake', 3, 6),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@ -1,47 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
|
||||||
======================================
|
|
||||||
Gilded Rose Requirements Specification
|
|
||||||
======================================
|
|
||||||
|
|
||||||
Hi and welcome to team Gilded Rose. As you know, we are a small inn with a prime location in a
|
|
||||||
prominent city ran by a friendly innkeeper named Allison. We also buy and sell only the finest goods.
|
|
||||||
Unfortunately, our goods are constantly degrading in quality as they approach their sell by date. We
|
|
||||||
have a system in place that updates our inventory for us. It was developed by a no-nonsense type named
|
|
||||||
Leeroy, who has moved on to new adventures. Your task is to add the new feature to our system so that
|
|
||||||
we can begin selling a new category of items. First an introduction to our system:
|
|
||||||
|
|
||||||
- All items have a SellIn value which denotes the number of days we have to sell the item
|
|
||||||
- All items have a Quality value which denotes how valuable the item is
|
|
||||||
- At the end of each day our system lowers both values for every item
|
|
||||||
|
|
||||||
Pretty simple, right? Well this is where it gets interesting:
|
|
||||||
|
|
||||||
+ Once the sell by date has passed, Quality degrades twice as fast
|
|
||||||
- The Quality of an item is never negative
|
|
||||||
- "Aged Brie" actually increases in Quality the older it gets
|
|
||||||
- The Quality of an item is never more than 50
|
|
||||||
- "Sulfuras", being a legendary item, never has to be sold or decreases in Quality
|
|
||||||
- "Backstage passes", like aged brie, increases in Quality as its SellIn value approaches;
|
|
||||||
Quality increases by 2 when there are 10 days or less and by 3 when there are 5 days or less but
|
|
||||||
Quality drops to 0 after the concert
|
|
||||||
|
|
||||||
We have recently signed a supplier of conjured items. This requires an update to our system:
|
|
||||||
|
|
||||||
- "Conjured" items degrade in Quality twice as fast as normal items
|
|
||||||
|
|
||||||
Feel free to make any changes to the UpdateQuality method and add any new code as long as everything
|
|
||||||
still works correctly. However, do not alter the Item class or Items property as those belong to the
|
|
||||||
goblin in the corner who will insta-rage and one-shot you as he doesn't believe in shared code
|
|
||||||
ownership (you can make the UpdateQuality method and Items property static if you like, we'll cover
|
|
||||||
for you).
|
|
||||||
|
|
||||||
Just for clarification, an item can never have its Quality increase above 50, however "Sulfuras" is a
|
|
||||||
legendary item and as such its Quality is 80 and it never alters.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
namespace GildedRose;
|
namespace GildedRose;
|
||||||
|
|
||||||
final class GildedRose
|
final class GildedRose
|
||||||
@ -65,8 +23,7 @@ final class GildedRose
|
|||||||
if ($item->name === 'Backstage passes to a TAFKAL80ETC concert') {
|
if ($item->name === 'Backstage passes to a TAFKAL80ETC concert') {
|
||||||
if ($item->sell_in <= 10 && $item->sell_in > 5) {
|
if ($item->sell_in <= 10 && $item->sell_in > 5) {
|
||||||
$this->increaseQuality($item, 1);
|
$this->increaseQuality($item, 1);
|
||||||
}
|
} elseif ($item->sell_in <= 5) {
|
||||||
elseif ($item->sell_in <= 5) {
|
|
||||||
$this->increaseQuality($item, 2);
|
$this->increaseQuality($item, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -88,21 +45,17 @@ final class GildedRose
|
|||||||
if ($item->quality < 50) {
|
if ($item->quality < 50) {
|
||||||
$this->increaseQuality($item, 1);
|
$this->increaseQuality($item, 1);
|
||||||
}
|
}
|
||||||
} else {
|
} else if ($item->name === 'Backstage passes to a TAFKAL80ETC concert') {
|
||||||
if ($item->name === 'Backstage passes to a TAFKAL80ETC concert') {
|
$this->lowerQuality($item, $item->quality);
|
||||||
$this->lowerQuality($item, $item->quality);
|
} else if ($item->quality > 0) {
|
||||||
} else {
|
$this->lowerQuality($item, 1);
|
||||||
if ($item->quality > 0) {
|
|
||||||
$this->lowerQuality($item, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->lowerSellIn($item, 1);
|
$this->lowerSellIn($item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function lowerQuality(Item $item, int $amount)
|
private function lowerQuality(Item $item, int $amount): void
|
||||||
{
|
{
|
||||||
if ($item->quality - $amount > 0) {
|
if ($item->quality - $amount > 0) {
|
||||||
$item->quality -= $amount;
|
$item->quality -= $amount;
|
||||||
@ -111,7 +64,7 @@ final class GildedRose
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function increaseQuality(Item $item, int $amount)
|
private function increaseQuality(Item $item, int $amount): void
|
||||||
{
|
{
|
||||||
if ($item->quality + $amount <= 50) {
|
if ($item->quality + $amount <= 50) {
|
||||||
$item->quality += $amount;
|
$item->quality += $amount;
|
||||||
@ -120,8 +73,8 @@ final class GildedRose
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function lowerSellIn(Item $item, int $amount)
|
private function lowerSellIn(Item $item): void
|
||||||
{
|
{
|
||||||
$item->sell_in -= $amount;
|
$item->sell_in -= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -21,7 +21,7 @@ Sulfuras, Hand of Ragnaros, -1, 80
|
|||||||
Backstage passes to a TAFKAL80ETC concert, 14, 21
|
Backstage passes to a TAFKAL80ETC concert, 14, 21
|
||||||
Backstage passes to a TAFKAL80ETC concert, 9, 50
|
Backstage passes to a TAFKAL80ETC concert, 9, 50
|
||||||
Backstage passes to a TAFKAL80ETC concert, 4, 50
|
Backstage passes to a TAFKAL80ETC concert, 4, 50
|
||||||
Conjured Mana Cake, 2, 5
|
Conjured Mana Cake, 2, 4
|
||||||
|
|
||||||
-------- day 2 --------
|
-------- day 2 --------
|
||||||
name, sellIn, quality
|
name, sellIn, quality
|
||||||
@ -33,7 +33,7 @@ Sulfuras, Hand of Ragnaros, -1, 80
|
|||||||
Backstage passes to a TAFKAL80ETC concert, 13, 22
|
Backstage passes to a TAFKAL80ETC concert, 13, 22
|
||||||
Backstage passes to a TAFKAL80ETC concert, 8, 50
|
Backstage passes to a TAFKAL80ETC concert, 8, 50
|
||||||
Backstage passes to a TAFKAL80ETC concert, 3, 50
|
Backstage passes to a TAFKAL80ETC concert, 3, 50
|
||||||
Conjured Mana Cake, 1, 4
|
Conjured Mana Cake, 1, 2
|
||||||
|
|
||||||
-------- day 3 --------
|
-------- day 3 --------
|
||||||
name, sellIn, quality
|
name, sellIn, quality
|
||||||
@ -45,7 +45,7 @@ Sulfuras, Hand of Ragnaros, -1, 80
|
|||||||
Backstage passes to a TAFKAL80ETC concert, 12, 23
|
Backstage passes to a TAFKAL80ETC concert, 12, 23
|
||||||
Backstage passes to a TAFKAL80ETC concert, 7, 50
|
Backstage passes to a TAFKAL80ETC concert, 7, 50
|
||||||
Backstage passes to a TAFKAL80ETC concert, 2, 50
|
Backstage passes to a TAFKAL80ETC concert, 2, 50
|
||||||
Conjured Mana Cake, 0, 3
|
Conjured Mana Cake, 0, 0
|
||||||
|
|
||||||
-------- day 4 --------
|
-------- day 4 --------
|
||||||
name, sellIn, quality
|
name, sellIn, quality
|
||||||
@ -57,7 +57,7 @@ Sulfuras, Hand of Ragnaros, -1, 80
|
|||||||
Backstage passes to a TAFKAL80ETC concert, 11, 24
|
Backstage passes to a TAFKAL80ETC concert, 11, 24
|
||||||
Backstage passes to a TAFKAL80ETC concert, 6, 50
|
Backstage passes to a TAFKAL80ETC concert, 6, 50
|
||||||
Backstage passes to a TAFKAL80ETC concert, 1, 50
|
Backstage passes to a TAFKAL80ETC concert, 1, 50
|
||||||
Conjured Mana Cake, -1, 1
|
Conjured Mana Cake, -1, 0
|
||||||
|
|
||||||
-------- day 5 --------
|
-------- day 5 --------
|
||||||
name, sellIn, quality
|
name, sellIn, quality
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user