diff --git a/python/gilded_rose.py b/python/gilded_rose.py index 4f21ea64..ca9b080a 100755 --- a/python/gilded_rose.py +++ b/python/gilded_rose.py @@ -2,41 +2,62 @@ class GildedRose(object): + AGED_BRIE = "Aged Brie" + BACKSTAGE_PASSES = "Backstage passes to a TAFKAL80ETC concert" + SULFURAS = "Sulfuras, Hand of Ragnaros" + CONJURED = "Conjured Mana Cake" + qualityIncrease = 1 + def __init__(self, items): self.items = items def update_quality(self): for item in self.items: - if item.name != "Aged Brie" and item.name != "Backstage passes to a TAFKAL80ETC concert": - if item.quality > 0: - if item.name != "Sulfuras, Hand of Ragnaros": - item.quality = item.quality - 1 - else: - if item.quality < 50: - item.quality = item.quality + 1 - if item.name == "Backstage passes to a TAFKAL80ETC concert": - if item.sell_in < 11: - if item.quality < 50: - item.quality = item.quality + 1 - if item.sell_in < 6: - if item.quality < 50: - item.quality = item.quality + 1 - if item.name != "Sulfuras, Hand of Ragnaros": - item.sell_in = item.sell_in - 1 - if item.sell_in < 0: - if item.name != "Aged Brie": - if item.name != "Backstage passes to a TAFKAL80ETC concert": - if item.quality > 0: - if item.name != "Sulfuras, Hand of Ragnaros": - item.quality = item.quality - 1 - else: - item.quality = item.quality - item.quality - else: - if item.quality < 50: - item.quality = item.quality + 1 + self.update_item_quality(item) + + def update_item_quality(self, item): + isExpired = item.sell_in < 0 + qualityDecrease = self.determine_degrate_quality_rate(item,isExpired) + doesDegradeQaulity = item.name != self.AGED_BRIE and item.name != self.BACKSTAGE_PASSES and item.name != self.SULFURAS + + if doesDegradeQaulity: + self.adjust_quality(item, qualityDecrease) + + if item.name == self.AGED_BRIE: + qualityIncrease = 2 if isExpired else 1 + self.adjust_quality(item, qualityIncrease) + + if item.name == self.BACKSTAGE_PASSES: + self.update_backstagepasses_quality(item, isExpired) + + if item.name != self.SULFURAS: + item.sell_in = item.sell_in - 1 + + # BAckstage Passes logic to update the item quality based on number of days + def update_backstagepasses_quality(self, item, isExpired): + self.adjust_quality(item, self.qualityIncrease) + if item.sell_in < 11: + self.adjust_quality(item, self.qualityIncrease) + if item.sell_in < 6: + self.adjust_quality(item, self.qualityIncrease) + if isExpired: + item.quality = item.quality - item.quality + + # Logic to determine the Quality Decrease rate based on Expired date and conjured item + def determine_degrate_quality_rate(self, item, isExpired): + qualityDecrease = -1 if item.name != self.CONJURED else -2 + return qualityDecrease * 2 if isExpired else qualityDecrease -class Item: + # Update the quality item value if the quality value is within the range 0 to 50 + def adjust_quality(self, item, quality_increase_decrease): + new_quality = item.quality + quality_increase_decrease + if new_quality >= 0 and new_quality <= 50: + item.quality = new_quality + + + +class Item: def __init__(self, name, sell_in, quality): self.name = name self.sell_in = sell_in