Skip to content

Instantly share code, notes, and snippets.

@bkleinen
Last active October 14, 2023 12:25
Show Gist options
  • Save bkleinen/d776c30d5c8e01a3daeeb12d993960e2 to your computer and use it in GitHub Desktop.
Save bkleinen/d776c30d5c8e01a3daeeb12d993960e2 to your computer and use it in GitHub Desktop.
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)
    }

Loading
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