main
1require 'heading'
2require 'rotation'
3Dir[File.dirname(__FILE__) + "/**/*.rb"].each do |file|
4 require file
5end
6
7class Console
8 def initialize(input, output, processor = CommandProcessor.new)
9 @input = input
10 @output = output
11 @processor = processor
12 end
13
14 def run
15 queue_commands_for(ask('enter size of plateau:'))
16 @processor.run
17 end
18
19 private
20
21 def ask(message)
22 @output.puts message
23 @output.print '> '
24 @input.gets.chomp!
25 end
26
27 def create_command_for(plateau, landing)
28 intercept(NavigateRover.new(plateau, landing, ask('enter instructions:')))
29 end
30
31 def intercept(command)
32 Interceptor.new(command, method(:write_to_console))
33 end
34
35 def write_to_console(command)
36 @output.puts "#{command.run}"
37 end
38
39 def queue_commands_for(plateau)
40 while ((landing = ask('enter landing coordinate (q to quit):')) != 'q') do
41 @processor.add(create_command_for(plateau, landing))
42 end
43 end
44end