-
Notifications
You must be signed in to change notification settings - Fork 37
/
coffee_machine.rb
108 lines (90 loc) · 2.03 KB
/
coffee_machine.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
class CoffeeMachine
attr_reader :coffee_served, :started
def initialize
@started = false
# Yes it's a magic machine :)
descale()
fill_tank()
fill_beans()
empty_grounds()
@coffee_served = false
@water_hardness = 2
@grinder = "medium"
@settings_displayed = false
end
def start(lang = 'en')
@started = true
@lang = lang.to_sym
end
def stop
@started = false
end
def messages
i18n = {
en: {
tank: 'Fill tank',
beans: 'Fill beans',
grounds: 'Empty grounds',
ready: 'Ready',
settings: "Settings:\n - 1: water hardness\n - 2: grinder",
descale: "Descaling is needed"
},
fr: {
tank: 'Remplir reservoir',
beans: 'Ajouter grains',
grounds: 'Vider marc',
ready: 'Pret',
settings: "Settings:\n - 1: durete de l'eau\n - 2: mouture",
descale: "Detartrage requis"
}
}
return i18n[@lang]
end
def message
return '' unless @started
return messages[:settings] if @settings_displayed
return messages[:tank] if @tank_content <= 10
return messages[:beans] if @beans_content < 3
return messages[:grounds] if @grounds_content >= 30
return messages[:descale] if is_descaling_needed?
return messages[:ready]
end
def show_settings
@settings_displayed = true
end
def quit_settings
@settings_displayed = false
end
def get_settings
{
'water hardness': @water_hardness,
'grinder': @grinder
}
end
def take_coffee
if (@tank_content == 0 || @beans_content == 0)
@coffee_served = false
else
@coffee_served = true
@tank_content -= 1
@beans_content -= 1
@grounds_content += 1
@countdown_to_descale -= 1
end
end
def fill_tank
@tank_content = 60
end
def fill_beans
@beans_content = 40
end
def empty_grounds
@grounds_content = 0
end
def descale
@countdown_to_descale = 500
end
def is_descaling_needed?
@countdown_to_descale <= 0
end
end