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