Gilding the Rose: Refactoring Legacy Code

27204e228cc521c6cafed3c92b95184c?s=47 Randy Coulman
September 20, 2014

Gilding the Rose: Refactoring Legacy Code

Presented at Golden Gate Ruby Conference 2014.

We all run into legacy code. Sometimes, we even write it ourselves. Working with legacy code can be a daunting challenge, but there are ways to tackle it. The Gilded Rose code kata is a coding exercise for practicing refactoring and testing skills in a legacy codebase.

In this presentation, I use the Gilded Rose kata to demonstrate techniques for safely working with a legacy codebase and using pure baby-step refactorings to improve the design.

27204e228cc521c6cafed3c92b95184c?s=128

Randy Coulman

September 20, 2014
Tweet

Transcript

  1. 1.

    Gilding the Rose: Refactoring Legacy Code Randy Coulman Principal Software

    Engineer http://randycoulman.com @randycoulman randycoulman
  2. 5.

    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 sell-by date 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.
  3. 6.

    Constraint The I t e m class and @ i

    t e m s property are off limits - no collective code ownership
  4. 9.

    c l a s s I t e m a

    t t r _ a c c e s s o r : n a m e , : s e l l _ i n , : q u a l i t y d e f i n i t i a l i z e ( n a m e , s e l l _ i n , q u a l i t y ) @ n a m e = n a m e @ s e l l _ i n = s e l l _ i n @ q u a l i t y = q u a l i t y e n d e n d
  5. 10.

    r e q u i r e ' . /

    i t e m . r b ' c l a s s G i l d e d R o s e @ i t e m s = [ ] d e f i n i t i a l i z e @ i t e m s = [ ] @ i t e m s < < I t e m . n e w ( " + 5 D e x t e r i t y V e s t " , 1 0 , 2 0 ) @ i t e m s < < I t e m . n e w ( " A g e d B r i e " , 2 , 0 ) @ i t e m s < < I t e m . n e w ( " E l i x i r o f t h e M o n g o o s e " , 5 , 7 ) @ i t e m s < < I t e m . n e w ( " S u l f u r a s , H a n d o f R a g n a r o s " , 0 , 8 0 ) @ i t e m s < < I t e m . n e w ( " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " , 1 5 , 2 0 ) @ i t e m s < < I t e m . n e w ( " C o n j u r e d M a n a C a k e " , 3 , 6 ) e n d d e f u p d a t e _ q u a l i t y # . . . e n d e n d
  6. 12.

    d e f u p d a t e _

    q u a l i t y f o r i i n 0 . . ( @ i t e m s . s i z e - 1 ) i f ( @ i t e m s [ i ] . n a m e ! = " A g e d B r i e " & & @ i t e m s [ i ] . n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " ) i f ( @ i t e m s [ i ] . q u a l i t y > 0 ) i f ( @ i t e m s [ i ] . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " ) @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y - 1 e n d e n d e l s e i f ( @ i t e m s [ i ] . q u a l i t y < 5 0 ) @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y + 1 i f ( @ i t e m s [ i ] . n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " ) i f ( @ i t e m s [ i ] . s e l l _ i n < 1 1 ) i f ( @ i t e m s [ i ] . q u a l i t y < 5 0 ) @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y + 1 e n d e n d i f ( @ i t e m s [ i ] . s e l l _ i n < 6 ) i f ( @ i t e m s [ i ] . q u a l i t y < 5 0 ) @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y + 1 e n d e n d e n d e n d e n d # . . . c o n t i n u e d . . .
  7. 13.

    # . . . c o n t i n

    u e d . . . i f ( @ i t e m s [ i ] . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " ) @ i t e m s [ i ] . s e l l _ i n = @ i t e m s [ i ] . s e l l _ i n - 1 ; e n d i f ( @ i t e m s [ i ] . s e l l _ i n < 0 ) i f ( @ i t e m s [ i ] . n a m e ! = " A g e d B r i e " ) i f ( @ i t e m s [ i ] . n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " ) i f ( @ i t e m s [ i ] . q u a l i t y > 0 ) i f ( @ i t e m s [ i ] . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " ) @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y - 1 e n d e n d e l s e @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y - @ i t e m s [ i ] . q u a l i t y e n d e l s e i f ( @ i t e m s [ i ] . q u a l i t y < 5 0 ) @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y + 1 e n d e n d e n d e n d e n d
  8. 14.
  9. 15.
  10. 18.
  11. 25.

    For each desired change, make the change easy (warning: this

    may be hard), then make the easy change. --Kent Beck (https://twitter.com/KentBeck/status/250733358307500032)
  12. 27.

    d e f u p d a t e _

    q u a l i t y f o r i i n 0 . . ( @ i t e m s . s i z e - 1 ) i f ( @ i t e m s [ i ] . n a m e ! = " A g e d B r i e " & & @ i t e m s [ i ] . n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " ) i f ( @ i t e m s [ i ] . q u a l i t y > 0 ) i f ( @ i t e m s [ i ] . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " ) @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y - 1 e n d e n d e l s e i f ( @ i t e m s [ i ] . q u a l i t y < 5 0 ) @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y + 1 i f ( @ i t e m s [ i ] . n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " ) i f ( @ i t e m s [ i ] . s e l l _ i n < 1 1 ) i f ( @ i t e m s [ i ] . q u a l i t y < 5 0 ) @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y + 1 e n d e n d i f ( @ i t e m s [ i ] . s e l l _ i n < 6 ) i f ( @ i t e m s [ i ] . q u a l i t y < 5 0 ) @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y + 1 e n d e n d e n d e n d e n d # . . . c o n t i n u e d . . .
  13. 28.

    When you start a new programming job you have to

    walk right up to the biggest function in the yard and refactor it in front of everyone. --@supermoof (https://twitter.com/supermoof/status/478322429257715712)
  14. 30.

    d e f u p d a t e _

    q u a l i t y f o r i i n 0 . . ( @ i t e m s . s i z e - 1 ) i f ( @ i t e m s [ i ] . n a m e ! = " A g e d B r i e " & & @ i t e m s [ i ] . n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " ) i f ( @ i t e m s [ i ] . q u a l i t y > 0 ) i f ( @ i t e m s [ i ] . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " ) @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y - 1 e n d e n d e l s e i f ( @ i t e m s [ i ] . q u a l i t y < 5 0 ) @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y + 1 i f ( @ i t e m s [ i ] . n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " ) i f ( @ i t e m s [ i ] . s e l l _ i n < 1 1 ) i f ( @ i t e m s [ i ] . q u a l i t y < 5 0 ) @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y + 1 e n d e n d i f ( @ i t e m s [ i ] . s e l l _ i n < 6 ) i f ( @ i t e m s [ i ] . q u a l i t y < 5 0 ) @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y + 1 e n d e n d e n d e n d e n d # . . . c o n t i n u e d . . .
  15. 31.

    d e f u p d a t e _

    q u a l i t y f o r i i n 0 . . ( @ i t e m s . s i z e - 1 ) i t e m = @ i t e m s [ i ] i f ( i t e m . n a m e ! = " A g e d B r i e " & & i t e m . n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " ) i f ( i t e m . q u a l i t y > 0 ) i f ( i t e m . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " ) i t e m . q u a l i t y = i t e m . q u a l i t y - 1 e n d e n d e l s e i f ( i t e m . q u a l i t y < 5 0 ) i t e m . q u a l i t y = i t e m . q u a l i t y + 1 i f ( i t e m . n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " ) i f ( i t e m . s e l l _ i n < 1 1 ) i f ( i t e m . q u a l i t y < 5 0 ) i t e m . q u a l i t y = i t e m . q u a l i t y + 1 e n d e n d i f ( i t e m . s e l l _ i n < 6 ) i f ( i t e m . q u a l i t y < 5 0 ) i t e m . q u a l i t y = i t e m . q u a l i t y + 1 e n d e n d e n d e n d e n d # . . . c o n t i n u e d . . .
  16. 32.

    d e f u p d a t e _

    q u a l i t y f o r i i n 0 . . ( @ i t e m s . s i z e - 1 ) i t e m = @ i t e m s [ i ] # . . . 4 0 + l i n e s o f c o d e u s i n g i t e m . . . e n d e n d
  17. 33.

    d e f u p d a t e _

    q u a l i t y f o r i i n 0 . . ( @ i t e m s . s i z e - 1 ) i t e m = @ i t e m s [ i ] u p d a t e ( i t e m ) e n d e n d d e f u p d a t e ( i t e m ) # . . . 4 0 + l i n e s o f c o d e u s i n g i t e m . . . e n d
  18. 34.

    d e f u p d a t e _

    q u a l i t y f o r i i n 0 . . ( @ i t e m s . s i z e - 1 ) i t e m = @ i t e m s [ i ] u p d a t e ( i t e m ) e n d e n d
  19. 36.

    d e f u p d a t e _

    q u a l i t y f o r i i n 0 . . ( @ i t e m s . s i z e - 1 ) i t e m = @ i t e m s [ i ] u p d a t e ( i t e m ) e n d e n d
  20. 37.

    d e f u p d a t e _

    q u a l i t y @ i t e m s . e a c h d o | i t e m | u p d a t e ( i t e m ) e n d e n d
  21. 38.

    d e f u p d a t e (

    i t e m ) i f ( i t e m . n a m e ! = " A g e d B r i e " & & i t e m . n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " ) i f ( i t e m . q u a l i t y > 0 ) i f ( i t e m . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " ) i t e m . q u a l i t y = i t e m . q u a l i t y - 1 e n d e n d e l s e i f ( i t e m . q u a l i t y < 5 0 ) i t e m . q u a l i t y = i t e m . q u a l i t y + 1 i f ( i t e m . n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " ) i f ( i t e m . s e l l _ i n < 1 1 ) i f ( i t e m . q u a l i t y < 5 0 ) i t e m . q u a l i t y = i t e m . q u a l i t y + 1 e n d e n d i f ( i t e m . s e l l _ i n < 6 ) i f ( i t e m . q u a l i t y < 5 0 ) i t e m . q u a l i t y = i t e m . q u a l i t y + 1 e n d e n d e n d e n d e n d i f ( i t e m . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " ) i t e m . s e l l _ i n = i t e m . s e l l _ i n - 1 ; e n d # . . . 1 7 m o r e l i n e s . . . e n d
  22. 39.

    d e f u p d a t e (

    i t e m ) i f i t e m . n a m e ! = " A g e d B r i e " & & i t e m . n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f i t e m . q u a l i t y > 0 i f i t e m . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " i t e m . q u a l i t y = i t e m . q u a l i t y - 1 e n d e n d e l s e i f i t e m . q u a l i t y < 5 0 i t e m . q u a l i t y = i t e m . q u a l i t y + 1 i f i t e m . n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f i t e m . s e l l _ i n < 1 1 i f i t e m . q u a l i t y < 5 0 i t e m . q u a l i t y = i t e m . q u a l i t y + 1 e n d e n d i f i t e m . s e l l _ i n < 6 i f i t e m . q u a l i t y < 5 0 i t e m . q u a l i t y = i t e m . q u a l i t y + 1 e n d e n d e n d e n d e n d i f i t e m . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " i t e m . s e l l _ i n = i t e m . s e l l _ i n - 1 ; e n d # . . . 1 7 m o r e l i n e s . . . e n d
  23. 40.

    d e f u p d a t e (

    i t e m ) i f i t e m . n a m e ! = " A g e d B r i e " & & i t e m . n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f i t e m . q u a l i t y > 0 i f i t e m . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " i t e m . q u a l i t y = i t e m . q u a l i t y - 1 e n d e n d e l s e i f i t e m . q u a l i t y < 5 0 i t e m . q u a l i t y = i t e m . q u a l i t y + 1 i f i t e m . n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f i t e m . s e l l _ i n < 1 1 i f i t e m . q u a l i t y < 5 0 i t e m . q u a l i t y = i t e m . q u a l i t y + 1 e n d e n d i f i t e m . s e l l _ i n < 6 i f i t e m . q u a l i t y < 5 0 i t e m . q u a l i t y = i t e m . q u a l i t y + 1 e n d e n d e n d e n d e n d i f i t e m . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " i t e m . s e l l _ i n = i t e m . s e l l _ i n - 1 e n d # . . . 1 7 m o r e l i n e s . . . e n d
  24. 41.

    d e f u p d a t e (

    i t e m ) i f i t e m . n a m e ! = " A g e d B r i e " & & i t e m . n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f i t e m . q u a l i t y > 0 i f i t e m . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " i t e m . q u a l i t y - = 1 e n d e n d e l s e i f i t e m . q u a l i t y < 5 0 i t e m . q u a l i t y + = 1 i f i t e m . n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f i t e m . s e l l _ i n < 1 1 i f i t e m . q u a l i t y < 5 0 i t e m . q u a l i t y + = 1 e n d e n d i f i t e m . s e l l _ i n < 6 i f i t e m . q u a l i t y < 5 0 i t e m . q u a l i t y + = 1 e n d e n d e n d e n d e n d i f i t e m . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " i t e m . s e l l _ i n - = 1 e n d # . . . 1 7 m o r e l i n e s . . . e n d
  25. 43.

    d e f u p d a t e (

    i t e m ) i f i t e m . n a m e ! = " A g e d B r i e " & & i t e m . n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f i t e m . q u a l i t y > 0 i f i t e m . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " i t e m . q u a l i t y - = 1 e n d e n d e l s e i f i t e m . q u a l i t y < 5 0 i t e m . q u a l i t y + = 1 i f i t e m . n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f i t e m . s e l l _ i n < 1 1 i f i t e m . q u a l i t y < 5 0 i t e m . q u a l i t y + = 1 e n d e n d i f i t e m . s e l l _ i n < 6 i f i t e m . q u a l i t y < 5 0 i t e m . q u a l i t y + = 1 e n d e n d e n d e n d e n d i f i t e m . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " i t e m . s e l l _ i n - = 1 e n d # . . . 1 7 m o r e l i n e s . . . e n d
  26. 45.

    d e f u p d a t e (

    i t e m ) i f i t e m . n a m e ! = " A g e d B r i e " & & i t e m . n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f i t e m . q u a l i t y > 0 i f i t e m . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " i t e m . q u a l i t y - = 1 e n d e n d e l s e i f i t e m . q u a l i t y < 5 0 i t e m . q u a l i t y + = 1 i f i t e m . n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f i t e m . s e l l _ i n < 1 1 i f i t e m . q u a l i t y < 5 0 i t e m . q u a l i t y + = 1 e n d e n d i f i t e m . s e l l _ i n < 6 i f i t e m . q u a l i t y < 5 0 i t e m . q u a l i t y + = 1 e n d e n d e n d e n d e n d i f i t e m . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " i t e m . s e l l _ i n - = 1 e n d # . . . c o n t i n u e d . . . e n d
  27. 46.

    Constraint The I t e m class and @ i

    t e m s property are off limits - no collective code ownership
  28. 47.

    c l a s s G i l d e

    d R o s e d e f u p d a t e _ q u a l i t y @ i t e m s . e a c h d o | i t e m | u p d a t e ( i t e m ) e n d e n d d e f u p d a t e ( i t e m ) # . . . 4 3 l i n e s u s i n g i t e m . . . e n d e n d
  29. 48.

    r e q u i r e ' d e

    l e g a t e ' c l a s s I t e m W r a p p e r < S i m p l e D e l e g a t o r e n d c l a s s G i l d e d R o s e d e f u p d a t e _ q u a l i t y @ i t e m s . e a c h d o | i t e m | u p d a t e ( I t e m W r a p p e r . n e w ( i t e m ) ) e n d e n d d e f u p d a t e ( i t e m ) # . . . 4 3 l i n e s u s i n g i t e m . . . e n d e n d
  30. 49.

    c l a s s I t e m W

    r a p p e r < S i m p l e D e l e g a t o r d e f u p d a t e i t e m = s e l f # . . . 4 3 l i n e s u s i n g i t e m . . . e n d e n d c l a s s G i l d e d R o s e d e f u p d a t e _ q u a l i t y @ i t e m s . e a c h d o | i t e m | u p d a t e ( I t e m W r a p p e r . n e w ( i t e m ) ) e n d e n d d e f u p d a t e ( i t e m ) i t e m . u p d a t e e n d e n d
  31. 50.

    c l a s s I t e m W

    r a p p e r < S i m p l e D e l e g a t o r d e f u p d a t e i t e m = s e l f # . . . 4 3 l i n e s u s i n g i t e m . . . e n d e n d c l a s s G i l d e d R o s e d e f u p d a t e _ q u a l i t y @ i t e m s . e a c h d o | i t e m | I t e m W r a p p e r . n e w ( i t e m ) . u p d a t e e n d e n d e n d
  32. 51.

    d e f u p d a t e i

    t e m = s e l f i f i t e m . n a m e ! = " A g e d B r i e " & & i t e m . n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f i t e m . q u a l i t y > 0 i f i t e m . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " i t e m . q u a l i t y - = 1 e n d e n d e l s e i f i t e m . q u a l i t y < 5 0 i t e m . q u a l i t y + = 1 i f i t e m . n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f i t e m . s e l l _ i n < 1 1 i f i t e m . q u a l i t y < 5 0 i t e m . q u a l i t y + = 1 e n d e n d i f i t e m . s e l l _ i n < 6 i f i t e m . q u a l i t y < 5 0 i t e m . q u a l i t y + = 1 e n d e n d e n d e n d e n d i f i t e m . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " i t e m . s e l l _ i n - = 1 e n d # . . . c o n t i n u e d . . . e n d
  33. 52.

    d e f u p d a t e i

    f s e l f . n a m e ! = " A g e d B r i e " & & s e l f . n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l f . q u a l i t y > 0 i f s e l f . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " s e l f . q u a l i t y - = 1 e n d e n d e l s e i f s e l f . q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 i f s e l f . n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l f . s e l l _ i n < 1 1 i f s e l f . q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 e n d e n d i f s e l f . s e l l _ i n < 6 i f s e l f . q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 e n d e n d e n d e n d e n d i f s e l f . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " s e l f . s e l l _ i n - = 1 e n d # . . . c o n t i n u e d . . . e n d
  34. 53.

    d e f u p d a t e i

    f n a m e ! = " A g e d B r i e " & & n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f q u a l i t y > 0 i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " s e l f . q u a l i t y - = 1 e n d e n d e l s e i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l l _ i n < 1 1 i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 e n d e n d i f s e l l _ i n < 6 i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 e n d e n d e n d e n d e n d i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " s e l f . s e l l _ i n - = 1 e n d # . . . c o n t i n u e d . . . e n d
  35. 55.

    d e f u p d a t e i

    f n a m e ! = " A g e d B r i e " & & n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f q u a l i t y > 0 i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " s e l f . q u a l i t y - = 1 e n d e n d e l s e i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l l _ i n < 1 1 i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 e n d e n d i f s e l l _ i n < 6 i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 e n d e n d e n d e n d e n d i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " s e l f . s e l l _ i n - = 1 e n d # . . . c o n t i n u e d . . . e n d
  36. 57.

    d e f u p d a t e i

    f # . . . # . . . e l s e i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 i f # . . . i f # . . . i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 e n d e n d i f # . . . i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 e n d e n d e n d e n d e n d # . . . i f # . . . i f # . . . # . . . e l s e i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 e n d e n d e n d e n d
  37. 58.

    d e f u p d a t e i

    f # . . . # . . . e l s e i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 i f # . . . i f # . . . i n c r e a s e _ q u a l i t y e n d i f # . . . i n c r e a s e _ q u a l i t y e n d e n d e n d e n d # . . . i f # . . . i f # . . . # . . . e l s e i n c r e a s e _ q u a l i t y e n d e n d e n d d e f i n c r e a s e _ q u a l i t y i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 e n d e n d
  38. 59.

    d e f u p d a t e i

    f # . . . # . . . e l s e i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l l _ i n < 1 1 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 6 i n c r e a s e _ q u a l i t y e n d e n d e n d e n d # . . . e n d d e f i n c r e a s e _ q u a l i t y i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 e n d e n d
  39. 60.

    d e f u p d a t e i

    f # . . . # . . . e l s e i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 e n d i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l l _ i n < 1 1 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 6 i n c r e a s e _ q u a l i t y e n d e n d e n d # . . . e n d d e f i n c r e a s e _ q u a l i t y i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 e n d e n d
  40. 61.

    d e f u p d a t e i

    f # . . . # . . . e l s e i n c r e a s e _ q u a l i t y i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l l _ i n < 1 1 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 6 i n c r e a s e _ q u a l i t y e n d e n d e n d # . . . e n d d e f i n c r e a s e _ q u a l i t y i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 e n d e n d
  41. 62.

    d e f u p d a t e i

    f # . . . i f q u a l i t y > 0 i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " s e l f . q u a l i t y - = 1 e n d e n d e l s e # . . . e n d # . . . i f # . . . i f # . . . i f # . . . i f q u a l i t y > 0 i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " s e l f . q u a l i t y - = 1 e n d e n d e l s e # . . . e n d e l s e # . . . e n d e n d e n d
  42. 63.

    d e f u p d a t e i

    f # . . . i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " i f q u a l i t y > 0 s e l f . q u a l i t y - = 1 e n d e n d e l s e # . . . e n d # . . . i f # . . . i f # . . . i f # . . . i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " i f q u a l i t y > 0 s e l f . q u a l i t y - = 1 e n d e n d e l s e # . . . e n d e l s e # . . . e n d e n d e n d
  43. 64.

    d e f u p d a t e i

    f # . . . i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e l s e # . . . e n d # . . . i f # . . . i f # . . . i f # . . . i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e l s e # . . . e n d e l s e # . . . e n d e n d e n d d e f d e c r e a s e _ q u a l i t y i f q u a l i t y > 0 s e l f . q u a l i t y - = 1 e n d e n d
  44. 66.

    d e f u p d a t e i

    f n a m e ! = " A g e d B r i e " & & n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e l s e i n c r e a s e _ q u a l i t y i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l l _ i n < 1 1 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 6 i n c r e a s e _ q u a l i t y e n d e n d e n d i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " s e l f . s e l l _ i n - = 1 e n d i f s e l l _ i n < 0 i f n a m e ! = " A g e d B r i e " i f n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e l s e s e l f . q u a l i t y - = q u a l i t y e n d e l s e i n c r e a s e _ q u a l i t y e n d e n d e n d
  45. 68.

    d e f u p d a t e i

    f n a m e ! = " A g e d B r i e " & & n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e l s e i n c r e a s e _ q u a l i t y i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l l _ i n < 1 1 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 6 i n c r e a s e _ q u a l i t y e n d e n d e n d i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " s e l f . s e l l _ i n - = 1 e n d i f s e l l _ i n < 0 i f n a m e ! = " A g e d B r i e " i f n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e l s e s e l f . q u a l i t y - = q u a l i t y e n d e l s e i n c r e a s e _ q u a l i t y e n d e n d e n d
  46. 69.

    d e f u p d a t e i

    f # . . . # . . . e l s e # . . . i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l l _ i n < 1 1 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 6 i n c r e a s e _ q u a l i t y e n d e n d e n d i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " s e l f . s e l l _ i n - = 1 e n d i f s e l l _ i n < 0 # . . . e n d e n d
  47. 70.

    d e f u p d a t e i

    f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " s e l f . s e l l _ i n - = 1 e n d i f # . . . # . . . e l s e # . . . i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d e n d e n d i f s e l l _ i n < 0 # . . . e n d e n d
  48. 71.

    d e f u p d a t e i

    f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " s e l f . s e l l _ i n - = 1 e n d i f n a m e ! = " A g e d B r i e " & & n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e l s e i n c r e a s e _ q u a l i t y i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d e n d e n d i f s e l l _ i n < 0 i f n a m e ! = " A g e d B r i e " i f n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e l s e s e l f . q u a l i t y - = q u a l i t y e n d e l s e i n c r e a s e _ q u a l i t y e n d e n d e n d
  49. 72.

    d e f u p d a t e a

    g e i f n a m e ! = " A g e d B r i e " & & n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e l s e i n c r e a s e _ q u a l i t y i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d e n d e n d i f s e l l _ i n < 0 i f n a m e ! = " A g e d B r i e " i f n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e l s e s e l f . q u a l i t y - = q u a l i t y e n d e l s e i n c r e a s e _ q u a l i t y e n d e n d e n d d e f a g e i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " s e l f . s e l l _ i n - = 1 e n d e n d
  50. 73.

    d e f u p d a t e a

    g e u p d a t e _ q u a l i t y e n d d e f u p d a t e _ q u a l i t y i f n a m e ! = " A g e d B r i e " & & n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e l s e i n c r e a s e _ q u a l i t y i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d e n d e n d i f s e l l _ i n < 0 i f n a m e ! = " A g e d B r i e " i f n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e l s e s e l f . q u a l i t y - = q u a l i t y e n d e l s e i n c r e a s e _ q u a l i t y e n d e n d e n d
  51. 75.

    d e f u p d a t e _

    q u a l i t y i f n a m e ! = " A g e d B r i e " & & n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e l s e i n c r e a s e _ q u a l i t y i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d e n d e n d i f s e l l _ i n < 0 i f n a m e ! = " A g e d B r i e " i f n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e l s e s e l f . q u a l i t y - = q u a l i t y e n d e l s e i n c r e a s e _ q u a l i t y e n d e n d e n d
  52. 77.

    d e f u p d a t e _

    q u a l i t y i f n a m e ! = " A g e d B r i e " & & n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e l s e i n c r e a s e _ q u a l i t y i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d e n d e n d i f s e l l _ i n < 0 i f n a m e ! = " A g e d B r i e " i f n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e l s e s e l f . q u a l i t y - = q u a l i t y e n d e l s e i n c r e a s e _ q u a l i t y e n d e n d e n d
  53. 78.

    i f n a m e ! = " B

    a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e l s e s e l f . q u a l i t y - = q u a l i t y e n d
  54. 79.

    i f n a m e = = " B

    a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " s e l f . q u a l i t y - = q u a l i t y e l s e i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e n d
  55. 80.

    i f n a m e ! = " A

    g e d B r i e " i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " s e l f . q u a l i t y - = q u a l i t y e l s e i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e n d e l s e i n c r e a s e _ q u a l i t y e n d
  56. 81.

    i f n a m e = = " A

    g e d B r i e " i n c r e a s e _ q u a l i t y e l s e i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " s e l f . q u a l i t y - = q u a l i t y e l s e i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e n d e n d
  57. 82.

    i f n a m e ! = " A

    g e d B r i e " & & n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e l s e i n c r e a s e _ q u a l i t y i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d e n d e n d
  58. 83.

    DeMorgan's Laws not (A and B) ==> (not A) or

    (not B) not (A or B) ==> (not A) and (not B)
  59. 84.

    n a m e ! = " A g e

    d B r i e " & & n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t "
  60. 85.

    n a m e ! = " A g e

    d B r i e " & & n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " # N e g a t e : ! ( n a m e ! = " A g e d B r i e " & & n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " )
  61. 86.

    n a m e ! = " A g e

    d B r i e " & & n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " # N e g a t e : ! ( n a m e ! = " A g e d B r i e " & & n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " ) # D e M o r g a n : n o t ( A a n d B ) = = > ( n o t A ) o r ( n o t B ) ! ( n a m e ! = " A g e d B r i e " ) | | ! ( n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " )
  62. 87.

    n a m e ! = " A g e

    d B r i e " & & n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " # N e g a t e : ! ( n a m e ! = " A g e d B r i e " & & n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " ) # D e M o r g a n : n o t ( A a n d B ) = = > ( n o t A ) o r ( n o t B ) ! ( n a m e ! = " A g e d B r i e " ) | | ! ( n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " ) # S i m p l i f y : n a m e = = " A g e d B r i e " | | n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t "
  63. 88.

    i f n a m e ! = " A

    g e d B r i e " & & n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e l s e i n c r e a s e _ q u a l i t y i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d e n d e n d
  64. 89.

    i f n a m e = = " A

    g e d B r i e " | | n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i n c r e a s e _ q u a l i t y i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d e n d e l s e i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e n d
  65. 90.

    d e f u p d a t e _

    q u a l i t y i f # . . . # . . . e l s e i f # . . . # . . . e n d e n d i f # . . . i f # . . . # . . . e l s e i f # . . . # . . . e l s e i f # . . . # . . . e n d e n d e n d e n d e n d
  66. 91.

    d e f u p d a t e _

    q u a l i t y i f # . . . # . . . e l s i f # . . . # . . . e n d i f # . . . i f # . . . # . . . e l s i f # . . . # . . . e l s i f # . . . # . . . e n d e n d e n d
  67. 92.

    d e f u p d a t e _

    q u a l i t y i f n a m e = = " A g e d B r i e " | | n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i n c r e a s e _ q u a l i t y i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d e n d e l s i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 0 i f n a m e = = " A g e d B r i e " i n c r e a s e _ q u a l i t y e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " s e l f . q u a l i t y - = q u a l i t y e l s i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e n d e n d
  68. 93.

    d e f u p d a t e _

    q u a l i t y i f # . . . # . . . e l s i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d i f # . . . i f # . . . # . . . e l s i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " d e c r e a s e _ q u a l i t y e n d e n d e n d
  69. 94.

    d e f u p d a t e _

    q u a l i t y r e t u r n i f n a m e = = " S u l f u r a s , H a n d o f R a g n a r o s " i f # . . . # . . . e l s e d e c r e a s e _ q u a l i t y e n d i f # . . . i f # . . . # . . . e l s e d e c r e a s e _ q u a l i t y e n d e n d e n d
  70. 95.

    d e f u p d a t e a

    g e u p d a t e _ q u a l i t y e n d d e f a g e i f n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " s e l f . s e l l _ i n - = 1 e n d e n d d e f u p d a t e _ q u a l i t y r e t u r n i f n a m e = = " S u l f u r a s , H a n d o f R a g n a r o s " # . . . 2 2 l i n e s . . . e n d
  71. 96.

    d e f u p d a t e a

    g e u p d a t e _ q u a l i t y e n d d e f a g e r e t u r n i f n a m e = = " S u l f u r a s , H a n d o f R a g n a r o s " s e l f . s e l l _ i n - = 1 e n d d e f u p d a t e _ q u a l i t y r e t u r n i f n a m e = = " S u l f u r a s , H a n d o f R a g n a r o s " # . . . 2 2 l i n e s . . . e n d
  72. 97.

    d e f u p d a t e r

    e t u r n i f n a m e = = " S u l f u r a s , H a n d o f R a g n a r o s " a g e u p d a t e _ q u a l i t y e n d d e f a g e s e l f . s e l l _ i n - = 1 e n d d e f u p d a t e _ q u a l i t y # . . . 2 2 l i n e s . . . e n d
  73. 98.

    d e f u p d a t e _

    q u a l i t y i f n a m e = = " A g e d B r i e " | | n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i n c r e a s e _ q u a l i t y i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d e n d e l s e d e c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 0 i f n a m e = = " A g e d B r i e " i n c r e a s e _ q u a l i t y e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " s e l f . q u a l i t y - = q u a l i t y e l s e d e c r e a s e _ q u a l i t y e n d e n d e n d
  74. 99.

    d e f u p d a t e _

    q u a l i t y i f n a m e = = " A g e d B r i e " i n c r e a s e _ q u a l i t y e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d e l s e d e c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 0 i f n a m e = = " A g e d B r i e " i n c r e a s e _ q u a l i t y e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " s e l f . q u a l i t y - = q u a l i t y e l s e d e c r e a s e _ q u a l i t y e n d e n d e n d
  75. 100.

    d e f u p d a t e _

    q u a l i t y i f n a m e = = " A g e d B r i e " i n c r e a s e _ q u a l i t y e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d e l s e d e c r e a s e _ q u a l i t y i f s e l l _ i n < 0 d e c r e a s e _ q u a l i t y e n d e n d i f s e l l _ i n < 0 i f n a m e = = " A g e d B r i e " i n c r e a s e _ q u a l i t y e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " s e l f . q u a l i t y - = q u a l i t y e n d e n d e n d
  76. 101.

    d e f u p d a t e _

    q u a l i t y i f n a m e = = " A g e d B r i e " i n c r e a s e _ q u a l i t y e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 0 s e l f . q u a l i t y - = q u a l i t y e n d e l s e d e c r e a s e _ q u a l i t y i f s e l l _ i n < 0 d e c r e a s e _ q u a l i t y e n d e n d i f s e l l _ i n < 0 i f n a m e = = " A g e d B r i e " i n c r e a s e _ q u a l i t y e n d e n d e n d
  77. 102.

    d e f u p d a t e _

    q u a l i t y i f n a m e = = " A g e d B r i e " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 0 i n c r e a s e _ q u a l i t y e n d e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 0 s e l f . q u a l i t y - = q u a l i t y e n d e l s e d e c r e a s e _ q u a l i t y i f s e l l _ i n < 0 d e c r e a s e _ q u a l i t y e n d e n d e n d
  78. 104.

    d e f u p d a t e _

    q u a l i t y i f n a m e = = " A g e d B r i e " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 0 i n c r e a s e _ q u a l i t y e n d e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 0 s e l f . q u a l i t y - = q u a l i t y e n d e l s e d e c r e a s e _ q u a l i t y i f s e l l _ i n < 0 d e c r e a s e _ q u a l i t y e n d e n d e n d
  79. 105.
  80. 107.

    d e f u p d a t e _

    q u a l i t y i f n a m e = = " A g e d B r i e " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 0 i n c r e a s e _ q u a l i t y e n d e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 0 s e l f . q u a l i t y - = q u a l i t y e n d e l s e d e c r e a s e _ q u a l i t y i f s e l l _ i n < 0 d e c r e a s e _ q u a l i t y e n d e n d e n d
  81. 109.

    d e f u p d a t e _

    q u a l i t y i f n a m e = = " A g e d B r i e " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 0 i n c r e a s e _ q u a l i t y e n d e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 0 s e l f . q u a l i t y - = q u a l i t y e n d e l s e d e c r e a s e _ q u a l i t y i f s e l l _ i n < 0 d e c r e a s e _ q u a l i t y e n d e n d e n d
  82. 110.

    d e f u p d a t e _

    q u a l i t y i f n a m e = = " A g e d B r i e " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 0 i n c r e a s e _ q u a l i t y e n d e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 0 s e l f . q u a l i t y - = q u a l i t y e n d e l s i f n a m e = = " C o n j u r e d M a n a C a k e " d e c r e a s e _ q u a l i t y d e c r e a s e _ q u a l i t y i f s e l l _ i n < 0 d e c r e a s e _ q u a l i t y d e c r e a s e _ q u a l i t y e n d e l s e d e c r e a s e _ q u a l i t y i f s e l l _ i n < 0 d e c r e a s e _ q u a l i t y e n d e n d e n d
  83. 111.

    d e f u p d a t e _

    q u a l i t y i f n a m e = = " A g e d B r i e " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 0 i n c r e a s e _ q u a l i t y e n d e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 0 s e l f . q u a l i t y - = q u a l i t y e n d e l s i f n a m e = = " C o n j u r e d M a n a C a k e " s e l f . q u a l i t y - = 2 # F a i l s t e s t s - w e c a n ' t d o t h i s i f s e l l _ i n < 0 s e l f . q u a l i t y - = 2 # F a i l s t e s t s - w e c a n ' t d o t h i s e n d e l s e d e c r e a s e _ q u a l i t y i f s e l l _ i n < 0 d e c r e a s e _ q u a l i t y e n d e n d e n d
  84. 112.

    d e f u p d a t e _

    q u a l i t y i f n a m e = = " A g e d B r i e " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 0 i n c r e a s e _ q u a l i t y e n d e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 0 s e l f . q u a l i t y - = q u a l i t y e n d e l s i f n a m e = = " C o n j u r e d M a n a C a k e " d e c r e a s e _ q u a l i t y d e c r e a s e _ q u a l i t y i f s e l l _ i n < 0 d e c r e a s e _ q u a l i t y d e c r e a s e _ q u a l i t y e n d e l s e d e c r e a s e _ q u a l i t y i f s e l l _ i n < 0 d e c r e a s e _ q u a l i t y e n d e n d e n d
  85. 114.

    c l a s s I t e m W

    r a p p e r d e f d e c r e a s e _ q u a l i t y i f q u a l i t y > 0 s e l f . q u a l i t y - = 1 e n d e n d d e f i n c r e a s e _ q u a l i t y i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 e n d e n d e n d
  86. 115.

    The Spec ... The quality of an item is never

    negative ... The quality of an item is never more than 50 ...
  87. 116.

    c l a s s I t e m W

    r a p p e r d e f d e c r e a s e _ q u a l i t y i f q u a l i t y > 0 s e l f . q u a l i t y - = 1 e n d e n d d e f i n c r e a s e _ q u a l i t y i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 e n d e n d e n d
  88. 117.

    c l a s s I t e m W

    r a p p e r d e f d e c r e a s e _ q u a l i t y i f q u a l i t y > 0 s e l f . q u a l i t y - = 1 e n d e n d d e f i n c r e a s e _ q u a l i t y i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 e n d e n d d e f q u a l i t y = ( n e w _ q u a l i t y ) s u p e r e n d e n d
  89. 118.

    c l a s s I t e m W

    r a p p e r d e f d e c r e a s e _ q u a l i t y s e l f . q u a l i t y - = 1 e n d d e f i n c r e a s e _ q u a l i t y i f q u a l i t y < 5 0 s e l f . q u a l i t y + = 1 e n d e n d d e f q u a l i t y = ( n e w _ q u a l i t y ) n e w _ q u a l i t y = 0 i f n e w _ q u a l i t y < 0 s u p e r ( n e w _ q u a l i t y ) e n d e n d
  90. 119.

    c l a s s I t e m W

    r a p p e r d e f d e c r e a s e _ q u a l i t y s e l f . q u a l i t y - = 1 e n d d e f i n c r e a s e _ q u a l i t y s e l f . q u a l i t y + = 1 e n d d e f q u a l i t y = ( n e w _ q u a l i t y ) n e w _ q u a l i t y = 0 i f n e w _ q u a l i t y < 0 n e w _ q u a l i t y = 5 0 i f n e w _ q u a l i t y > 5 0 s u p e r ( n e w _ q u a l i t y ) e n d e n d
  91. 120.

    d e f u p d a t e _

    q u a l i t y i f n a m e = = " A g e d B r i e " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 0 i n c r e a s e _ q u a l i t y e n d e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 0 s e l f . q u a l i t y - = q u a l i t y e n d e l s i f n a m e = = " C o n j u r e d M a n a C a k e " d e c r e a s e _ q u a l i t y d e c r e a s e _ q u a l i t y i f s e l l _ i n < 0 d e c r e a s e _ q u a l i t y d e c r e a s e _ q u a l i t y e n d e l s e d e c r e a s e _ q u a l i t y i f s e l l _ i n < 0 d e c r e a s e _ q u a l i t y e n d e n d e n d d e f d e c r e a s e _ q u a l i t y s e l f . q u a l i t y - = 1 e n d
  92. 121.

    d e f u p d a t e _

    q u a l i t y i f n a m e = = " A g e d B r i e " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 0 i n c r e a s e _ q u a l i t y e n d e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " i n c r e a s e _ q u a l i t y i f s e l l _ i n < 1 0 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 5 i n c r e a s e _ q u a l i t y e n d i f s e l l _ i n < 0 s e l f . q u a l i t y - = q u a l i t y e n d e l s i f n a m e = = " C o n j u r e d M a n a C a k e " s e l f . q u a l i t y - = 1 s e l f . q u a l i t y - = 1 i f s e l l _ i n < 0 s e l f . q u a l i t y - = 1 s e l f . q u a l i t y - = 1 e n d e l s e s e l f . q u a l i t y - = 1 i f s e l l _ i n < 0 s e l f . q u a l i t y - = 1 e n d e n d e n d d e f i n c r e a s e _ q u a l i t y s e l f . q u a l i t y + = 1 e n d
  93. 122.

    d e f u p d a t e _

    q u a l i t y i f n a m e = = " A g e d B r i e " s e l f . q u a l i t y + = 1 i f s e l l _ i n < 0 s e l f . q u a l i t y + = 1 e n d e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " s e l f . q u a l i t y + = 1 i f s e l l _ i n < 1 0 s e l f . q u a l i t y + = 1 e n d i f s e l l _ i n < 5 s e l f . q u a l i t y + = 1 e n d i f s e l l _ i n < 0 s e l f . q u a l i t y - = q u a l i t y e n d e l s i f n a m e = = " C o n j u r e d M a n a C a k e " s e l f . q u a l i t y - = 1 s e l f . q u a l i t y - = 1 i f s e l l _ i n < 0 s e l f . q u a l i t y - = 1 s e l f . q u a l i t y - = 1 e n d e l s e s e l f . q u a l i t y - = 1 i f s e l l _ i n < 0 s e l f . q u a l i t y - = 1 e n d e n d e n d
  94. 123.

    d e f u p d a t e _

    q u a l i t y i f n a m e = = " A g e d B r i e " s e l f . q u a l i t y + = 1 i f s e l l _ i n < 0 s e l f . q u a l i t y + = 1 e n d e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " s e l f . q u a l i t y + = 1 i f s e l l _ i n < 1 0 s e l f . q u a l i t y + = 1 e n d i f s e l l _ i n < 5 s e l f . q u a l i t y + = 1 e n d i f s e l l _ i n < 0 s e l f . q u a l i t y - = q u a l i t y e n d e l s i f n a m e = = " C o n j u r e d M a n a C a k e " s e l f . q u a l i t y - = 2 i f s e l l _ i n < 0 s e l f . q u a l i t y - = 2 e n d e l s e s e l f . q u a l i t y - = 1 i f s e l l _ i n < 0 s e l f . q u a l i t y - = 1 e n d e n d e n d
  95. 124.

    d e f u p d a t e _

    q u a l i t y s e l f . q u a l i t y + = q u a l i t y _ a d j u s t m e n t e n d d e f q u a l i t y _ a d j u s t m e n t i f n a m e = = " A g e d B r i e " a d j u s t m e n t = 1 i f s e l l _ i n < 0 a d j u s t m e n t = 2 e n d e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " a d j u s t m e n t = 1 i f s e l l _ i n < 1 0 a d j u s t m e n t = 2 e n d i f s e l l _ i n < 5 a d j u s t m e n t = 3 e n d i f s e l l _ i n < 0 a d j u s t m e n t = - q u a l i t y e n d e l s i f n a m e = = " C o n j u r e d M a n a C a k e " a d j u s t m e n t = - 2 i f s e l l _ i n < 0 a d j u s t m e n t = - 4 e n d e l s e a d j u s t m e n t = - 1 i f s e l l _ i n < 0 a d j u s t m e n t = - 2 e n d e n d a d j u s t m e n t e n d
  96. 126.

    c l a s s I t e m W

    r a p p e r < S i m p l e D e l e g a t o r # . . . e n d c l a s s G i l d e d R o s e d e f u p d a t e _ q u a l i t y @ i t e m s . e a c h d o | i t e m | I t e m W r a p p e r . n e w ( i t e m ) . u p d a t e e n d e n d e n d
  97. 127.

    c l a s s I t e m W

    r a p p e r < S i m p l e D e l e g a t o r d e f s e l f . w r a p ( i t e m ) n e w ( i t e m ) e n d # . . . e n d c l a s s G i l d e d R o s e d e f u p d a t e _ q u a l i t y @ i t e m s . e a c h d o | i t e m | I t e m W r a p p e r . w r a p ( i t e m ) . u p d a t e e n d e n d e n d
  98. 128.

    c l a s s I t e m W

    r a p p e r d e f s e l f . w r a p ( i t e m ) n e w ( i t e m ) e n d d e f q u a l i t y _ a d j u s t m e n t i f n a m e = = " A g e d B r i e " a d j u s t m e n t = 1 i f s e l l _ i n < 0 a d j u s t m e n t = 2 e n d e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " # . . . e l s i f n a m e = = " C o n j u r e d M a n a C a k e " # . . . e l s e # . . . e n d a d j u s t m e n t e n d e n d
  99. 129.

    c l a s s I t e m W

    r a p p e r d e f s e l f . w r a p ( i t e m ) i f i t e m . n a m e = = " A g e d B r i e " A g e d B r i e . n e w ( i t e m ) e l s e n e w ( i t e m ) e n d e n d d e f q u a l i t y _ a d j u s t m e n t i f n a m e = = " A g e d B r i e " a d j u s t m e n t = 1 i f s e l l _ i n < 0 a d j u s t m e n t = 2 e n d e l s i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " # . . . e l s i f n a m e = = " C o n j u r e d M a n a C a k e " # . . . e l s e # . . . e n d a d j u s t m e n t e n d e n d c l a s s A g e d B r i e < I t e m W r a p p e r e n d
  100. 130.

    c l a s s I t e m W

    r a p p e r d e f s e l f . w r a p ( i t e m ) i f i t e m . n a m e = = " A g e d B r i e " A g e d B r i e . n e w ( i t e m ) e l s e n e w ( i t e m ) e n d e n d d e f q u a l i t y _ a d j u s t m e n t i f n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " # . . . e l s i f n a m e = = " C o n j u r e d M a n a C a k e " # . . . e l s e # . . . e n d a d j u s t m e n t e n d e n d c l a s s A g e d B r i e < I t e m W r a p p e r d e f q u a l i t y _ a d j u s t m e n t a d j u s t m e n t = 1 i f s e l l _ i n < 0 a d j u s t m e n t = 2 e n d a d j u s t m e n t e n d e n d
  101. 131.

    c l a s s I t e m W

    r a p p e r < S i m p l e D e l e g a t o r d e f s e l f . w r a p ( i t e m ) i f i t e m . n a m e = = " A g e d B r i e " A g e d B r i e . n e w ( i t e m ) e l s i f i t e m . n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " B a c k s t a g e P a s s . n e w ( i t e m ) e l s e n e w ( i t e m ) e n d e n d d e f q u a l i t y _ a d j u s t m e n t i f n a m e = = " C o n j u r e d M a n a C a k e " # . . . e l s e # . . . e n d a d j u s t m e n t e n d e n d c l a s s B a c k s t a g e P a s s < I t e m W r a p p e r d e f q u a l i t y _ a d j u s t m e n t a d j u s t m e n t = 1 i f s e l l _ i n < 1 0 a d j u s t m e n t = 2 e n d i f s e l l _ i n < 5 a d j u s t m e n t = 3 e n d i f s e l l _ i n < 0 a d j u s t m e n t = - q u a l i t y e n d a d j u s t m e n t e n d e n d
  102. 132.

    c l a s s I t e m W

    r a p p e r < S i m p l e D e l e g a t o r d e f s e l f . w r a p ( i t e m ) i f i t e m . n a m e = = " A g e d B r i e " A g e d B r i e . n e w ( i t e m ) e l s i f i t e m . n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " B a c k s t a g e P a s s . n e w ( i t e m ) e l s i f i t e m . n a m e = = " C o n j u r e d M a n a C a k e " C o n j u r e d I t e m . n e w ( i t e m ) e l s e n e w ( i t e m ) e n d e n d d e f q u a l i t y _ a d j u s t m e n t # . . . a d j u s t m e n t e n d e n d c l a s s C o n j u r e d I t e m < I t e m W r a p p e r d e f q u a l i t y _ a d j u s t m e n t a d j u s t m e n t = - 2 i f s e l l _ i n < 0 a d j u s t m e n t = - 4 e n d a d j u s t m e n t e n d e n d
  103. 133.

    c l a s s I t e m W

    r a p p e r < S i m p l e D e l e g a t o r d e f s e l f . w r a p ( i t e m ) i f i t e m . n a m e = = " A g e d B r i e " A g e d B r i e . n e w ( i t e m ) e l s i f i t e m . n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " B a c k s t a g e P a s s . n e w ( i t e m ) e l s i f i t e m . n a m e = = " C o n j u r e d M a n a C a k e " C o n j u r e d I t e m . n e w ( i t e m ) e l s e n e w ( i t e m ) e n d e n d d e f u p d a t e r e t u r n i f n a m e = = " S u l f u r a s , H a n d o f R a g n a r o s " a g e u p d a t e _ q u a l i t y e n d e n d
  104. 134.
  105. 135.

    c l a s s I t e m W

    r a p p e r < S i m p l e D e l e g a t o r d e f s e l f . w r a p ( i t e m ) i f i t e m . n a m e = = " A g e d B r i e " A g e d B r i e . n e w ( i t e m ) e l s i f i t e m . n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " B a c k s t a g e P a s s . n e w ( i t e m ) e l s i f i t e m . n a m e = = " C o n j u r e d M a n a C a k e " C o n j u r e d I t e m . n e w ( i t e m ) e l s i f i t e m . n a m e = = " S u l f u r a s , H a n d o f R a g n a r o s " L e g e n d a r y I t e m . n e w ( i t e m ) e l s e n e w ( i t e m ) e n d e n d d e f u p d a t e r e t u r n i f n a m e = = " S u l f u r a s , H a n d o f R a g n a r o s " a g e u p d a t e _ q u a l i t y e n d e n d c l a s s L e g e n d a r y I t e m < I t e m W r a p p e r e n d
  106. 136.

    c l a s s I t e m W

    r a p p e r < S i m p l e D e l e g a t o r d e f s e l f . w r a p ( i t e m ) i f i t e m . n a m e = = " A g e d B r i e " A g e d B r i e . n e w ( i t e m ) e l s i f i t e m . n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " B a c k s t a g e P a s s . n e w ( i t e m ) e l s i f i t e m . n a m e = = " C o n j u r e d M a n a C a k e " C o n j u r e d I t e m . n e w ( i t e m ) e l s i f i t e m . n a m e = = " S u l f u r a s , H a n d o f R a g n a r o s " L e g e n d a r y I t e m . n e w ( i t e m ) e l s e n e w ( i t e m ) e n d e n d d e f u p d a t e a g e u p d a t e _ q u a l i t y e n d e n d c l a s s L e g e n d a r y I t e m < I t e m W r a p p e r d e f u p d a t e # N o t h i n g t o d o - L e g e n d a r y i t e m s d o n ' t c h a n g e e n d e n d
  107. 137.

    c l a s s I t e m W

    r a p p e r < S i m p l e D e l e g a t o r d e f s e l f . w r a p ( i t e m ) i f i t e m . n a m e = = " A g e d B r i e " A g e d B r i e . n e w ( i t e m ) e l s i f i t e m . n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " B a c k s t a g e P a s s . n e w ( i t e m ) e l s i f i t e m . n a m e = = " C o n j u r e d M a n a C a k e " C o n j u r e d I t e m . n e w ( i t e m ) e l s i f i t e m . n a m e = = " S u l f u r a s , H a n d o f R a g n a r o s " L e g e n d a r y I t e m . n e w ( i t e m ) e l s e n e w ( i t e m ) e n d e n d e n d
  108. 138.

    c l a s s I t e m W

    r a p p e r < S i m p l e D e l e g a t o r d e f s e l f . w r a p ( i t e m ) c a s e i t e m . n a m e w h e n " A g e d B r i e " A g e d B r i e . n e w ( i t e m ) w h e n " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " B a c k s t a g e P a s s . n e w ( i t e m ) w h e n " C o n j u r e d M a n a C a k e " C o n j u r e d I t e m . n e w ( i t e m ) w h e n " S u l f u r a s , H a n d o f R a g n a r o s " L e g e n d a r y I t e m . n e w ( i t e m ) e l s e n e w ( i t e m ) e n d e n d e n d
  109. 141.

    c l a s s I t e m W

    r a p p e r < S i m p l e D e l e g a t o r d e f q u a l i t y _ a d j u s t m e n t a d j u s t m e n t = - 1 i f s e l l _ i n < 0 a d j u s t m e n t = - 2 e n d a d j u s t m e n t e n d e n d
  110. 142.

    c l a s s I t e m W

    r a p p e r < S i m p l e D e l e g a t o r d e f q u a l i t y _ a d j u s t m e n t i f s e l l _ i n < 0 p a s t _ d a t e _ a d j u s t m e n t e l s e n o r m a l _ a d j u s t m e n t e n d e n d d e f n o r m a l _ a d j u s t m e n t - 1 e n d d e f p a s t _ d a t e _ a d j u s t m e n t 2 * n o r m a l _ a d j u s t m e n t e n d e n d
  111. 144.

    c l a s s A g e d B

    r i e < I t e m W r a p p e r d e f q u a l i t y _ a d j u s t m e n t a d j u s t m e n t = 1 i f s e l l _ i n < 0 a d j u s t m e n t = 2 e n d a d j u s t m e n t e n d e n d
  112. 145.

    c l a s s A g e d B

    r i e < I t e m W r a p p e r d e f n o r m a l _ a d j u s t m e n t - s u p e r e n d e n d
  113. 147.

    c l a s s C o n j u

    r e d I t e m < I t e m W r a p p e r d e f q u a l i t y _ a d j u s t m e n t a d j u s t m e n t = - 2 i f s e l l _ i n < 0 a d j u s t m e n t = - 4 e n d a d j u s t m e n t e n d e n d
  114. 148.

    c l a s s C o n j u

    r e d I t e m < I t e m W r a p p e r d e f n o r m a l _ a d j u s t m e n t 2 * s u p e r e n d e n d
  115. 150.

    c l a s s B a c k s

    t a g e P a s s < I t e m W r a p p e r d e f q u a l i t y _ a d j u s t m e n t a d j u s t m e n t = 1 i f s e l l _ i n < 1 0 a d j u s t m e n t = 2 e n d i f s e l l _ i n < 5 a d j u s t m e n t = 3 e n d i f s e l l _ i n < 0 a d j u s t m e n t = - q u a l i t y e n d a d j u s t m e n t e n d e n d
  116. 151.

    c l a s s B a c k s

    t a g e P a s s < I t e m W r a p p e r d e f n o r m a l _ a d j u s t m e n t a d j u s t m e n t = 1 i f s e l l _ i n < 1 0 a d j u s t m e n t = 2 e n d i f s e l l _ i n < 5 a d j u s t m e n t = 3 e n d a d j u s t m e n t e n d d e f p a s t _ d a t e _ a d j u s t m e n t - q u a l i t y e n d e n d
  117. 152.

    c l a s s B a c k s

    t a g e P a s s < I t e m W r a p p e r d e f n o r m a l _ a d j u s t m e n t a d j u s t m e n t = 1 i f s e l l _ i n < 1 0 a d j u s t m e n t = 2 e n d i f s e l l _ i n < 5 a d j u s t m e n t = 3 e n d a d j u s t m e n t e n d e n d
  118. 153.

    c l a s s B a c k s

    t a g e P a s s < I t e m W r a p p e r d e f n o r m a l _ a d j u s t m e n t i f s e l l _ i n < 5 3 e l s i f s e l l _ i n < 1 0 2 e l s e 1 e n d e n d e n d
  119. 154.

    The Spec ... "Backstage passes" ... quality increases by 2

    when there are 10 days or less and by 3 when there are 5 days or less, ...
  120. 155.

    c l a s s B a c k s

    t a g e P a s s < I t e m W r a p p e r d e f n o r m a l _ a d j u s t m e n t i f s e l l _ i n < 5 3 e l s i f s e l l _ i n < 1 0 2 e l s e 1 e n d e n d e n d
  121. 157.
  122. 158.

    d e f u p d a t e _

    q u a l i t y f o r i i n 0 . . ( @ i t e m s . s i z e - 1 ) i f ( @ i t e m s [ i ] . n a m e ! = " A g e d B r i e " & & @ i t e m s [ i ] . n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " ) i f ( @ i t e m s [ i ] . q u a l i t y > 0 ) i f ( @ i t e m s [ i ] . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " ) @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y - 1 e n d e n d e l s e i f ( @ i t e m s [ i ] . q u a l i t y < 5 0 ) @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y + 1 i f ( @ i t e m s [ i ] . n a m e = = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " ) i f ( @ i t e m s [ i ] . s e l l _ i n < 1 1 ) i f ( @ i t e m s [ i ] . q u a l i t y < 5 0 ) @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y + 1 e n d e n d i f ( @ i t e m s [ i ] . s e l l _ i n < 6 ) i f ( @ i t e m s [ i ] . q u a l i t y < 5 0 ) @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y + 1 e n d e n d e n d e n d e n d # . . . c o n t i n u e d . . .
  123. 159.

    # . . . c o n t i n

    u e d . . . i f ( @ i t e m s [ i ] . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " ) @ i t e m s [ i ] . s e l l _ i n = @ i t e m s [ i ] . s e l l _ i n - 1 ; e n d i f ( @ i t e m s [ i ] . s e l l _ i n < 0 ) i f ( @ i t e m s [ i ] . n a m e ! = " A g e d B r i e " ) i f ( @ i t e m s [ i ] . n a m e ! = " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " ) i f ( @ i t e m s [ i ] . q u a l i t y > 0 ) i f ( @ i t e m s [ i ] . n a m e ! = " S u l f u r a s , H a n d o f R a g n a r o s " ) @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y - 1 e n d e n d e l s e @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y - @ i t e m s [ i ] . q u a l i t y e n d e l s e i f ( @ i t e m s [ i ] . q u a l i t y < 5 0 ) @ i t e m s [ i ] . q u a l i t y = @ i t e m s [ i ] . q u a l i t y + 1 e n d e n d e n d e n d e n d
  124. 162.

    r e q u i r e ' . /

    i t e m . r b ' r e q u i r e ' d e l e g a t e ' c l a s s G i l d e d R o s e @ i t e m s = [ ] d e f i n i t i a l i z e @ i t e m s = [ ] @ i t e m s < < I t e m . n e w ( " + 5 D e x t e r i t y V e s t " , 1 0 , 2 0 ) @ i t e m s < < I t e m . n e w ( " A g e d B r i e " , 2 , 0 ) @ i t e m s < < I t e m . n e w ( " E l i x i r o f t h e M o n g o o s e " , 5 , 7 ) @ i t e m s < < I t e m . n e w ( " S u l f u r a s , H a n d o f R a g n a r o s " , 0 , 8 0 ) @ i t e m s < < I t e m . n e w ( " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " , 1 5 , 2 0 ) @ i t e m s < < I t e m . n e w ( " C o n j u r e d M a n a C a k e " , 3 , 6 ) e n d d e f u p d a t e _ q u a l i t y @ i t e m s . e a c h d o | i t e m | I t e m W r a p p e r . w r a p ( i t e m ) . u p d a t e e n d e n d e n d
  125. 163.

    c l a s s I t e m W

    r a p p e r < S i m p l e D e l e g a t o r d e f s e l f . w r a p ( i t e m ) c a s e i t e m . n a m e w h e n " A g e d B r i e " A g e d B r i e . n e w ( i t e m ) w h e n " B a c k s t a g e p a s s e s t o a T A F K A L 8 0 E T C c o n c e r t " B a c k s t a g e P a s s . n e w ( i t e m ) w h e n " C o n j u r e d M a n a C a k e " C o n j u r e d I t e m . n e w ( i t e m ) w h e n " S u l f u r a s , H a n d o f R a g n a r o s " L e g e n d a r y I t e m . n e w ( i t e m ) e l s e n e w ( i t e m ) e n d e n d # . . . c o n t i n u e d . . .
  126. 164.

    # . . . c o n t i n

    u e d . . . d e f u p d a t e a g e u p d a t e _ q u a l i t y e n d d e f a g e s e l f . s e l l _ i n - = 1 e n d # . . . c o n t i n u e d . . .
  127. 165.

    # . . . c o n t i n

    u e d . . . d e f u p d a t e _ q u a l i t y s e l f . q u a l i t y + = q u a l i t y _ a d j u s t m e n t e n d d e f q u a l i t y _ a d j u s t m e n t i f s e l l _ i n < 0 p a s t _ d a t e _ a d j u s t m e n t e l s e n o r m a l _ a d j u s t m e n t e n d e n d d e f n o r m a l _ a d j u s t m e n t - 1 e n d d e f p a s t _ d a t e _ a d j u s t m e n t 2 * n o r m a l _ a d j u s t m e n t e n d d e f q u a l i t y = ( n e w _ q u a l i t y ) n e w _ q u a l i t y = 0 i f n e w _ q u a l i t y < 0 n e w _ q u a l i t y = 5 0 i f n e w _ q u a l i t y > 5 0 s u p e r ( n e w _ q u a l i t y ) e n d e n d
  128. 166.

    c l a s s A g e d B

    r i e < I t e m W r a p p e r d e f n o r m a l _ a d j u s t m e n t - s u p e r e n d e n d c l a s s B a c k s t a g e P a s s < I t e m W r a p p e r d e f n o r m a l _ a d j u s t m e n t i f s e l l _ i n < 5 3 e l s i f s e l l _ i n < 1 0 2 e l s e 1 e n d e n d d e f p a s t _ d a t e _ a d j u s t m e n t - q u a l i t y e n d e n d c l a s s C o n j u r e d I t e m < I t e m W r a p p e r d e f n o r m a l _ a d j u s t m e n t 2 * s u p e r e n d e n d c l a s s L e g e n d a r y I t e m < I t e m W r a p p e r d e f u p d a t e # N o t h i n g t o d o - L e g e n d a r y i t e m s d o n ' t c h a n g e e n d e n d
  129. 168.
  130. 178.

    References Gilded Rose Kata Working Effectively With Legacy Code -

    Michael Feathers Refactoring - Martin Fowler
  131. 179.