class MauxRobot::Robot

The main class. It executes the actions using its table and position

Attributes

position[R]
talkative[R]

Public Class Methods

new(table = MauxRobot::Table.new) click to toggle source
# File lib/maux_robot/robot.rb, line 26
def initialize(table = MauxRobot::Table.new)
  @table = table
  @position = MauxRobot::NullPosition.new
  @talkative = false
end

Public Instance Methods

left() click to toggle source
# File lib/maux_robot/robot.rb, line 53
def left
  robot_placed? do
    @position.left
  end
end
move() click to toggle source
# File lib/maux_robot/robot.rb, line 41
def move
  robot_placed? do
    next_position = @position.forward_position

    ok_to_go?(next_position) do
      @position = next_position
    end

    @position
  end
end
place(x:, y:, face:) click to toggle source
# File lib/maux_robot/robot.rb, line 32
def place(x:, y:, face:) # rubocop:disable Naming/UncommunicativeMethodParamName
  position = MauxRobot::Position.new(x, y, face)

  ok_to_go?(position) do
    @position = position
  end
  @position
end
report(format_type: :csv) click to toggle source
# File lib/maux_robot/robot.rb, line 65
def report(format_type: :csv)
  robot_placed? do
    @position.report(format_type)
  end
end
right() click to toggle source
# File lib/maux_robot/robot.rb, line 59
def right
  robot_placed? do
    @position.right
  end
end
verbose() click to toggle source
# File lib/maux_robot/robot.rb, line 71
def verbose
  @talkative = !@talkative
  is_not = @talkative ? "is" : "is not"
  puts "Robot #{is_not} talkative now."
end

Private Instance Methods

ok_to_go?(position) { || ... } click to toggle source
# File lib/maux_robot/robot.rb, line 79
def ok_to_go?(position)
  raise NotOkToGo, position unless @table.contains?(position)

  yield
end
robot_placed?() { || ... } click to toggle source
# File lib/maux_robot/robot.rb, line 85
def robot_placed?
  raise RobotNotPlacedYet if @position.class == MauxRobot::NullPosition

  yield
end