/
project_decision.rb
57 lines (47 loc) · 1.57 KB
/
project_decision.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
class ProjectDecision < Decision
attr_accessor :project_name, :days_to_completion
def initialize (init_obj)
super(init_obj)
@project_name = init_obj[:project_name]
@days_to_completion = init_obj[:days_to_completion]
fail 'Project needs day amount!' if @days_to_completion.nil? || @days_to_completion.zero?
daily_changes = init_obj[:yes][:daily_status]
compl_changes = init_obj[:yes][:completion_status]
@yes = {
daily_status: StatusChange.new(daily_changes),
completion_status: StatusChange.new(compl_changes)
}
end
def decide! (choice)
if choice == :yes
# first create a new project to add to the game
arg_data = {
name: @project_name,
game: asker.game,
daily_status: yes[:daily_status],
completion_status: yes[:completion_status],
days_to_completion: @days_to_completion
}
new_proj = Project.new arg_data
asker.game.projects << new_proj
else
no = StatusChange.new(no) unless no.is_a? StatusChange
asker.game.status.update_with_change no
end
end
def display_consequences
puts "Choosing #{ 'yes'.green }:".bold.blue
puts "Every day for #{ days_to_completion } days:"
yes[:daily_status].non_zero_changes.each do |k, v|
print_result(k,v)
end
puts 'And at completion:'
yes[:completion_status].non_zero_changes.each do |k, v|
print_result(k,v)
end
puts "\nChoosing #{ 'no'.red }:".bold.blue
no.non_zero_changes.each do |k, v|
print_result(k,v)
end
end
end