forked from jimweirich/gilded_rose_kata
/
gilded_rose.rb
67 lines (54 loc) · 1.21 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
class Item
attr_reader :quality, :days_remaining
def initialize(quality, days_remaining)
@quality = quality
@days_remaining = days_remaining
end
def tick
end
end
class Normal < Item
def tick
@days_remaining -= 1
return if quality <= 0
@quality -= 1
@quality -= 1 if @days_remaining <= 0
end
end
class AgedBrie < Item
def tick
@days_remaining -= 1
return if @quality >= 50
@quality += 1
@quality += 1 if @days_remaining <= 0 && @quality < 50
end
end
class Conjured < Item
def tick
@days_remaining -= 1
return if @quality <= 0
@quality -= 2
@quality -= 2 if @days_remaining <= 0
end
end
class Backstage < Item
def tick
@days_remaining -= 1
return if @quality >= 50
return @quality = 0 if @days_remaining < 0
@quality += 1
@quality += 1 if @days_remaining < 10
@quality += 1 if @days_remaining < 5
end
end
class GildedRose
ITEMS = Hash.new(Item).tap { |h|
h['NORMAL ITEM'] = Normal
h['Aged Brie'] = AgedBrie
h['Backstage passes to a TAFKAL80ETC concert'] = Backstage
h['Conjured Mana Cake'] = Conjured
}
def self.item(name, quality, days_remaining)
ITEMS[name].new(quality, days_remaining)
end
end