-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.rb
62 lines (50 loc) · 1.13 KB
/
app.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
require "require_all"
require_all "lib"
class NasaRovers
def initialize
@rovers = []
end
def verbose_run
display_initial_greeting
run
end
def run
create_plateau
until $stdin.eof
deploy_rover
move_rover
end
display_output_message
rovers.each do |rover|
puts rover.current_position
end
end
private
attr_accessor :plateau, :rovers
def create_plateau
@plateau = CreatePlateauParser.execute($stdin.gets.chomp)
rescue StandardError => e
handle_error(e, method(:create_plateau))
end
def deploy_rover
rovers << DeployRoverParser.execute($stdin.gets.chomp, plateau)
rescue StandardError => e
handle_error(e, method(:deploy_rover))
end
def move_rover
MoveRoverParser.execute($stdin.gets.chomp, rovers.last)
rescue StandardError => e
handle_error(e, method(:move_rover))
end
def handle_error(error, repeat_action)
puts error
puts InfoMessage.repeat_line
repeat_action.call
end
def display_initial_greeting
puts InfoMessage.greeting_instructions
end
def display_output_message
puts InfoMessage.output
end
end