classDiagram
AgingItem <|-- NormalItem
AgingItem <|-- AgedBrie
AgingItem <|-- BackstagePass
class AgingItem{
update(item)
_age(item)
_update_quality(item)
_quality_change(item)
_cap_quality(item)
}
class Sulfuras{
update(item)
}
class NormalItem{
_quality_change(item)
}
class AgedBrie{
_quality_change(item)
}
class BackstagePass{
_update_quality(item)
_quality_change(item)
}
Last active
October 14, 2023 12:25
-
-
Save bkleinen/d776c30d5c8e01a3daeeb12d993960e2 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def get_updater_for(item): | |
return UPDATERS.get(item.name, UPDATERS["----default-----"])().update | |
UPDATERS = { | |
DEFAULT_KEY: NormalItem, | |
"Aged Brie": AgedBrie, | |
"Backstage passes to a TAFKAL80ETC concert": | |
BackstagePass, | |
"Sulfuras, Hand of Ragnaros": Sulfuras | |
} | |
class Sulfuras: | |
def update(self, item): | |
item.quality = 80 | |
class AgingItem(): | |
def update(self, item): | |
self._age(item) | |
self._cap_quality(item) | |
self._update_quality(item) | |
self._cap_quality(item) | |
def _age(self, item): | |
item.sell_in = item.sell_in - 1 | |
def _update_quality(self, item): | |
item.quality += self._quality_change(item) | |
def _quality_change(self, item): | |
return 0 | |
@staticmethod | |
def _cap_quality(item): | |
if item.quality < 0: | |
item.quality = 0 | |
elif item.quality > 50: | |
item.quality = 50 | |
class NormalItem(AgingItem): | |
def _quality_change(self, item): | |
if item.sell_in < 0: | |
return -2 | |
return -1 | |
class AgedBrie(AgingItem): | |
def _quality_change(self, item): | |
if item.sell_in < 0: | |
return 2 | |
return 1 | |
class BackstagePass(AgingItem): | |
def _update_quality(self, item): | |
if item.sell_in < 0: | |
item.quality = 0 | |
else: | |
item.quality += self._quality_change(item) | |
def _quality_change(self, item): | |
if item.sell_in < 0: | |
return 0 | |
if item.sell_in < 5: | |
return 3 | |
if item.sell_in < 10: | |
return 2 | |
return 1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment