forked from jimweirich/gilded_rose_kata
/
gilded_rose.rb
128 lines (109 loc) · 2.22 KB
/
gilded_rose.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
def conjured?(item)
item.name.match /conjured/i
end
def brie?(item)
item.name.match /brie/i
end
def backstage_pass?(item)
item.name.match /backstage passes/i
end
def sulfuras?(item)
item.name.match /sulfuras/i
end
module Normal
def update_quality
self.quality -= 1
end
def update_sell_in
self.sell_in -= 1
end
end
module Brie
def update_quality
self.quality += 1
end
def update_sell_in
self.sell_in -= 1
end
end
module BackstagePass
def update_quality
self.quality += 1
if self.sell_in < 11
self.quality += 1
end
if self.sell_in < 6
self.quality += 1
end
end
def update_sell_in
self.sell_in -= 1
end
end
module Sulfuras
def update_quality
end
end
module Conjured
def update_quality
self.quality -= 2
end
def update_sell_in
self.sell_in -= 1
end
end
def qualify(item)
case item.name
when /brie/i
item.extend Brie
when /backstage pass/i
item.extend BackstagePass
when /sulfuras/i
item.extend Sulfuras
when /conjured/i
item.extend Conjured
else
item.extend Normal
end
end
def update_quality(items)
items.each do |item|
qualify item
item.update_quality
unless sulfuras? item
item.update_sell_in
end
if item.sell_in < 0
unless brie? item
unless backstage_pass? item
if item.quality > 0
unless sulfuras? item
item.quality -= 1
if conjured? item
item.quality -= 1
end
end
end
else
item.quality = 0
end
else
item.quality += 1
end
end
item.quality = 50 if item.quality > 50
item.quality = 0 if item.quality < 0
end
end
# DO NOT CHANGE THINGS BELOW -----------------------------------------
Item = Struct.new(:name, :sell_in, :quality)
# We use the setup in the spec rather than the following for testing.
#
# Items = [
# Item.new("+5 Dexterity Vest", 10, 20),
# Item.new("Aged Brie", 2, 0),
# Item.new("Elixir of the Mongoose", 5, 7),
# Item.new("Sulfuras, Hand of Ragnaros", 0, 80),
# Item.new("Backstage passes to a TAFKAL80ETC concert", 15, 20),
# Item.new("Conjured Mana Cake", 3, 6),
# ]