GildedRose-Refactoring-Kata/python/gilded_rose.py

101 lines
3.0 KiB
Python
Executable File

class Item:
def __init__(self, name, sell_in, quality):
self.name = name
self.sell_in = sell_in
self.quality = quality
def __repr__(self):
return f"{self.name}, {self.sell_in}, {self.quality}"
class RegularItem(Item):
def update_quality(self):
if self.quality > 0:
self.quality -= 1
if self.sell_in < 1:
if self.quality > 0:
self.quality -= 1
self.sell_in -= 1
class AgedBrie(Item):
def update_quality(self):
if self.quality < 50:
self.quality += 1
if self.sell_in < 1:
if self.quality < 50:
self.quality += 1
self.sell_in -= 1
class ElixirOfTheMongoose(Item):
def update_quality(self):
if self.quality > 0:
self.quality -= 1
if self.sell_in < 1:
if self.quality > 0:
self.quality -= 1
self.sell_in -= 1
class Sulfuras(Item):
def __init__(self, name, sell_in, quality):
super().__init__(name, sell_in, quality)
self.quality = 80
def update_quality(self):
pass
class BackstagePass(Item):
def update_quality(self):
if self.quality < 50:
self.quality += 1
if self.sell_in < 11:
if self.quality < 50:
self.quality += 1
if self.sell_in < 6:
if self.quality < 50:
self.quality += 1
if self.sell_in < 1:
self.quality = 0
self.sell_in -= 1
class ConjuredItem(Item):
def update_quality(self):
if self.quality > 0:
self.quality -= 2
if self.sell_in < 1:
if self.quality > 0:
self.quality -= 2
self.sell_in -= 1
class GildedRose:
def __init__(self, items: list):
self.items = self._special_items(items)
def update_quality(self):
for item in self.items:
item.update_quality()
def _special_items(self, items):
special_item_classes = {
"Aged Brie": AgedBrie,
"Elixir Of the Mongoose": ElixirOfTheMongoose,
"Sulfuras, Hand of Ragnaros": Sulfuras,
"Backstage passes": BackstagePass,
"Conjured": ConjuredItem
}
corrected_list = []
for item in items:
special_item_class = self._get_special_item_class(item.name, special_item_classes)
corrected_list.append(special_item_class(item.name, item.sell_in, item.quality))
return corrected_list
def _get_special_item_class(self, item_name, special_item_classes):
for name, cls in special_item_classes.items():
if name.lower() in item_name.lower() or item_name.lower() in name.lower():
return cls
return RegularItem
def get_items(self):
return self.items