Guest User

Untitled

a guest
Jul 17th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. class Product
  2. attr_reader :days_remaining, :quality
  3.  
  4. def initialize(days_remaining:, quality:)
  5. @days_remaining = days_remaining
  6. @quality = quality
  7. end
  8.  
  9. def tick; end
  10.  
  11. private
  12.  
  13. attr_writer :days_remaining, :quality
  14. end
  15.  
  16. class NormalItem < Product
  17. def tick
  18. self.days_remaining = days_remaining - 1
  19. if days_remaining > 0
  20. self.quality = quality > 1 ? quality - 1 : 0
  21. else
  22. self.quality = quality > 2 ? quality - 2 : 0
  23. end
  24. end
  25. end
  26.  
  27. class ConjuredManaCake < Product
  28. def tick
  29. self.days_remaining = days_remaining - 1
  30. if days_remaining > 0
  31. self.quality = quality > 1 ? quality - 2 : 0
  32. else
  33. self.quality = quality > 3 ? quality - 4 : 0
  34. end
  35. end
  36. end
  37.  
  38. class AgedBrie < Product
  39. def tick
  40. self.days_remaining = days_remaining - 1
  41. if days_remaining > 0
  42. self.quality = quality < 50 ? quality + 1 : 50
  43. else
  44. self.quality = quality < 49 ? quality + 2 : 50
  45. end
  46. end
  47. end
  48.  
  49. class BackstagePasses < Product
  50. def tick
  51. self.days_remaining = days_remaining - 1
  52. if days_remaining > 9
  53. self.quality = quality < 50 ? quality + 1 : 50
  54. elsif days_remaining > 4
  55. self.quality = quality < 50 ? quality + 2 : 50
  56. elsif days_remaining >= 0
  57. self.quality = quality < 50 ? quality + 3 : 50
  58. else
  59. self.quality = 0
  60. end
  61. end
  62. end
  63.  
  64. class GildedRose
  65. PRODUCT = {
  66. 'Conjured Mana Cake' => 'ConjuredManaCake',
  67. 'Aged Brie' => 'AgedBrie',
  68. 'Backstage passes to a TAFKAL80ETC concert' => 'BackstagePasses',
  69. 'Normal Item' => 'NormalItem'
  70. }.freeze
  71.  
  72. attr_reader :product
  73.  
  74. def initialize(name:, days_remaining:, quality:)
  75. @product = product_by(name).new(days_remaining: days_remaining, quality: quality)
  76. end
  77.  
  78. def tick
  79. product.tick
  80. end
  81.  
  82. def days_remaining
  83. product.days_remaining
  84. end
  85.  
  86. def quality
  87. product.quality
  88. end
  89.  
  90. private
  91.  
  92. def product_by(name)
  93. Object.const_get(PRODUCT[name] || 'Product')
  94. end
  95. end
Add Comment
Please, Sign In to add comment