toyrobot 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +2 -2
  3. data/README.md +166 -10
  4. data/lib/toy_robot/application.rb +1 -13
  5. data/lib/toy_robot/board.rb +1 -1
  6. data/lib/toy_robot/command/parser.rb +6 -3
  7. data/lib/toy_robot/command/parser/base.rb +4 -25
  8. data/lib/toy_robot/command/parser/left.rb +12 -0
  9. data/lib/toy_robot/command/parser/move.rb +12 -0
  10. data/lib/toy_robot/command/parser/place.rb +3 -4
  11. data/lib/toy_robot/command/parser/report.rb +12 -0
  12. data/lib/toy_robot/command/parser/right.rb +12 -0
  13. data/lib/toy_robot/controller.rb +32 -0
  14. data/lib/toy_robot/factory.rb +6 -18
  15. data/lib/toy_robot/pose.rb +19 -5
  16. data/lib/toy_robot/robot.rb +11 -15
  17. data/lib/toy_robot/view.rb +10 -12
  18. data/test/board_double.rb +5 -0
  19. data/test/integration/test_factory.rb +2 -2
  20. data/test/integration/test_toy_robot.rb +1 -1
  21. data/test/pose_double.rb +23 -0
  22. data/test/test_board.rb +7 -14
  23. data/test/test_board_double.rb +13 -0
  24. data/test/test_board_interface.rb +15 -0
  25. data/test/{test_command_matcher.rb → test_command_parser.rb} +6 -6
  26. data/test/{test_command_matcher_interface.rb → test_command_parser_interface.rb} +5 -5
  27. data/test/test_command_parser_left.rb +20 -0
  28. data/test/{test_command_matcher_move.rb → test_command_parser_move.rb} +5 -5
  29. data/test/{test_command_matcher_place.rb → test_command_parser_place.rb} +10 -10
  30. data/test/{test_command_matcher_report.rb → test_command_parser_report.rb} +5 -5
  31. data/test/test_command_parser_right.rb +20 -0
  32. data/test/test_controller.rb +64 -0
  33. data/test/test_pose.rb +16 -20
  34. data/test/test_pose_double.rb +15 -0
  35. data/test/test_pose_interface.rb +26 -0
  36. data/test/test_reporter_interface.rb +13 -1
  37. data/test/test_robot.rb +70 -27
  38. data/toyrobot.gemspec +1 -1
  39. metadata +35 -26
  40. data/lib/toy_robot/command/base.rb +0 -5
  41. data/lib/toy_robot/command/token.rb +0 -11
  42. data/lib/toy_robot/placement.rb +0 -34
  43. data/lib/toy_robot/robot_controller.rb +0 -35
  44. data/test/test_command.rb +0 -22
  45. data/test/test_command_matcher_left.rb +0 -20
  46. data/test/test_command_matcher_right.rb +0 -20
  47. data/test/test_placement.rb +0 -94
  48. data/test/test_robot_controller.rb +0 -62
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toyrobot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matias Anaya
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-11 00:00:00.000000000 Z
11
+ date: 2014-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -64,34 +64,39 @@ files:
64
64
  - lib/toy_robot.rb
65
65
  - lib/toy_robot/application.rb
66
66
  - lib/toy_robot/board.rb
67
- - lib/toy_robot/command/base.rb
68
67
  - lib/toy_robot/command/parser.rb
69
68
  - lib/toy_robot/command/parser/base.rb
69
+ - lib/toy_robot/command/parser/left.rb
70
+ - lib/toy_robot/command/parser/move.rb
70
71
  - lib/toy_robot/command/parser/place.rb
71
- - lib/toy_robot/command/token.rb
72
+ - lib/toy_robot/command/parser/report.rb
73
+ - lib/toy_robot/command/parser/right.rb
74
+ - lib/toy_robot/controller.rb
72
75
  - lib/toy_robot/factory.rb
73
- - lib/toy_robot/placement.rb
74
76
  - lib/toy_robot/pose.rb
75
77
  - lib/toy_robot/robot.rb
76
- - lib/toy_robot/robot_controller.rb
77
78
  - lib/toy_robot/view.rb
79
+ - test/board_double.rb
78
80
  - test/integration/test_application.rb
79
81
  - test/integration/test_factory.rb
80
82
  - test/integration/test_toy_robot.rb
83
+ - test/pose_double.rb
81
84
  - test/test_board.rb
82
- - test/test_command.rb
83
- - test/test_command_matcher.rb
84
- - test/test_command_matcher_interface.rb
85
- - test/test_command_matcher_left.rb
86
- - test/test_command_matcher_move.rb
87
- - test/test_command_matcher_place.rb
88
- - test/test_command_matcher_report.rb
89
- - test/test_command_matcher_right.rb
90
- - test/test_placement.rb
85
+ - test/test_board_double.rb
86
+ - test/test_board_interface.rb
87
+ - test/test_command_parser.rb
88
+ - test/test_command_parser_interface.rb
89
+ - test/test_command_parser_left.rb
90
+ - test/test_command_parser_move.rb
91
+ - test/test_command_parser_place.rb
92
+ - test/test_command_parser_report.rb
93
+ - test/test_command_parser_right.rb
94
+ - test/test_controller.rb
91
95
  - test/test_pose.rb
96
+ - test/test_pose_double.rb
97
+ - test/test_pose_interface.rb
92
98
  - test/test_reporter_interface.rb
93
99
  - test/test_robot.rb
94
- - test/test_robot_controller.rb
95
100
  - test/test_view.rb
96
101
  - toyrobot.gemspec
97
102
  homepage: https://github.com/matiasanaya/toy-robot-simulator
@@ -119,21 +124,25 @@ signing_key:
119
124
  specification_version: 4
120
125
  summary: A toy robot simulator
121
126
  test_files:
127
+ - test/board_double.rb
122
128
  - test/integration/test_application.rb
123
129
  - test/integration/test_factory.rb
124
130
  - test/integration/test_toy_robot.rb
131
+ - test/pose_double.rb
125
132
  - test/test_board.rb
126
- - test/test_command.rb
127
- - test/test_command_matcher.rb
128
- - test/test_command_matcher_interface.rb
129
- - test/test_command_matcher_left.rb
130
- - test/test_command_matcher_move.rb
131
- - test/test_command_matcher_place.rb
132
- - test/test_command_matcher_report.rb
133
- - test/test_command_matcher_right.rb
134
- - test/test_placement.rb
133
+ - test/test_board_double.rb
134
+ - test/test_board_interface.rb
135
+ - test/test_command_parser.rb
136
+ - test/test_command_parser_interface.rb
137
+ - test/test_command_parser_left.rb
138
+ - test/test_command_parser_move.rb
139
+ - test/test_command_parser_place.rb
140
+ - test/test_command_parser_report.rb
141
+ - test/test_command_parser_right.rb
142
+ - test/test_controller.rb
135
143
  - test/test_pose.rb
144
+ - test/test_pose_double.rb
145
+ - test/test_pose_interface.rb
136
146
  - test/test_reporter_interface.rb
137
147
  - test/test_robot.rb
138
- - test/test_robot_controller.rb
139
148
  - test/test_view.rb
@@ -1,5 +0,0 @@
1
- module ToyRobot
2
- module Command
3
- Base = Struct.new(:token, :args)
4
- end
5
- end
@@ -1,11 +0,0 @@
1
- module ToyRobot
2
- module Command
3
- module Token
4
- PLACE = :PLACE
5
- MOVE = :MOVE
6
- RIGHT = :RIGHT
7
- LEFT = :LEFT
8
- REPORT = :REPORT
9
- end
10
- end
11
- end
@@ -1,34 +0,0 @@
1
- require 'forwardable'
2
-
3
- module ToyRobot
4
- class Placement
5
- extend Forwardable
6
-
7
- def_delegator :pose, :report
8
- def_delegator :pose, :rotate!, :rotate
9
-
10
- def initialize(args)
11
- @board = args[:board]
12
- @pose = args[:pose]
13
- end
14
-
15
- def on_board?
16
- board && board.valid_pose?(pose)
17
- end
18
-
19
- def update(a_new_pose)
20
- if board.valid_pose?(a_new_pose)
21
- self.pose = a_new_pose
22
- end
23
- end
24
-
25
- def advance
26
- update(pose.adjacent)
27
- end
28
-
29
- private
30
-
31
- attr_reader :board
32
- attr_accessor :pose
33
- end
34
- end
@@ -1,35 +0,0 @@
1
- require_relative 'command/token'
2
- require 'forwardable'
3
-
4
- module ToyRobot
5
- class RobotController
6
- extend Forwardable
7
-
8
- def_delegators :robot, :place, :move, :left, :right
9
- def_delegator :view, :report
10
-
11
- def initialize(args)
12
- @robot = args[:robot]
13
- @view = args[:view]
14
- end
15
-
16
- def input(command)
17
- case command.token
18
- when Command::Token::PLACE
19
- place(command.args)
20
- when Command::Token::MOVE
21
- move
22
- when Command::Token::RIGHT
23
- right
24
- when Command::Token::LEFT
25
- left
26
- when Command::Token::REPORT
27
- report
28
- end
29
- end
30
-
31
- private
32
-
33
- attr_reader :robot, :view
34
- end
35
- end
data/test/test_command.rb DELETED
@@ -1,22 +0,0 @@
1
- require_relative '../lib/toy_robot/command/token'
2
- require 'minitest/autorun'
3
-
4
- module ToyRobot
5
- class CommandTest < MiniTest::Unit::TestCase
6
- def test_tokens_are_defined
7
- assert defined?(Command::Token::PLACE)
8
-
9
- assert defined?(Command::Token::MOVE)
10
-
11
- assert defined?(Command::Token::RIGHT)
12
-
13
- assert defined?(Command::Token::LEFT)
14
-
15
- assert defined?(Command::Token::REPORT)
16
- end
17
-
18
- def test_base_is_defined
19
- assert defined?(Command::Base)
20
- end
21
- end
22
- end
@@ -1,20 +0,0 @@
1
- require_relative '../lib/toy_robot/command/parser/base'
2
- require_relative 'test_command_matcher_interface'
3
- require 'minitest/autorun'
4
-
5
- module ToyRobot
6
- class CommandMatcherLeftTest < MiniTest::Unit::TestCase
7
- include CommandMatcherInterfaceTest
8
-
9
- def setup
10
- @object = Command::Parser::Left
11
- @object_token = Command::Token::LEFT
12
- @object_valid_str = 'LEFT'
13
- @object_invalid_strs = [
14
- 'LEFT ',
15
- 'LEFTY',
16
- 'LEFT 180'
17
- ]
18
- end
19
- end
20
- end
@@ -1,20 +0,0 @@
1
- require_relative '../lib/toy_robot/command/parser/base'
2
- require_relative 'test_command_matcher_interface'
3
- require 'minitest/autorun'
4
-
5
- module ToyRobot
6
- class CommandMatcherRightTest < MiniTest::Unit::TestCase
7
- include CommandMatcherInterfaceTest
8
-
9
- def setup
10
- @object = Command::Parser::Right
11
- @object_token = Command::Token::RIGHT
12
- @object_valid_str = 'RIGHT'
13
- @object_invalid_strs = [
14
- 'RIGHT ',
15
- 'RIGHTY',
16
- 'RIGHT 180'
17
- ]
18
- end
19
- end
20
- end
@@ -1,94 +0,0 @@
1
- require_relative '../lib/toy_robot/placement'
2
- require_relative 'test_reporter_interface'
3
- require 'minitest/autorun'
4
-
5
- module ToyRobot
6
- class PlacementTest < MiniTest::Unit::TestCase
7
- include ReporterInterfaceTest
8
-
9
- SimpleDouble = Struct.new(:stub) do
10
- def valid_pose?(_)
11
- stub.fetch(:valid_pose?)
12
- end
13
-
14
- def adjacent
15
- stub.fetch(:adjacent)
16
- end
17
- end
18
-
19
- def setup
20
- @board = SimpleDouble.new(valid_pose?: true)
21
- @pose = SimpleDouble.new
22
- @placement = @object = Placement.new(board: @board, pose: @pose)
23
- end
24
-
25
- def test_respond_to_public_interface
26
- assert_respond_to @placement, :update
27
- assert_respond_to @placement, :advance
28
- assert_respond_to @placement, :rotate
29
- assert_respond_to @placement, :on_board?
30
- end
31
-
32
- def test_that_it_might_be_on_board
33
- assert @placement.on_board?
34
- end
35
-
36
- def test_that_it_might_not_be_on_board
37
- @board[:stub] = { valid_pose?: false }
38
-
39
- refute @placement.on_board?
40
- end
41
-
42
- def test_that_it_might_update
43
- new_pose = Object.new
44
-
45
- @placement.update(new_pose)
46
-
47
- assert_equal new_pose, @placement.instance_variable_get(:@pose)
48
- end
49
-
50
- def test_that_update_might_fail
51
- @board[:stub] = { valid_pose?: false }
52
-
53
- @placement.update('invalid_pose')
54
-
55
- assert_equal @pose, @placement.instance_variable_get(:@pose)
56
- end
57
-
58
- def test_that_it_might_advance
59
- adjacent_pose = Object.new
60
- @pose[:stub] = { adjacent: adjacent_pose }
61
-
62
- @placement.advance
63
-
64
- assert_equal adjacent_pose, @placement.instance_variable_get(:@pose)
65
- end
66
-
67
- def test_that_it_might_not_advance
68
- @board[:stub] = { valid_pose?: false }
69
- @pose[:stub] = { adjacent: 'anything' }
70
-
71
- @placement.advance
72
-
73
- assert_equal @pose, @placement.instance_variable_get(:@pose)
74
- end
75
-
76
- def test_that_it_rotates
77
- pose = MiniTest::Mock.new
78
- placement = Placement.new(pose: pose)
79
-
80
- pose.expect(:rotate!, nil, [123])
81
- placement.rotate(123)
82
- pose.verify
83
- end
84
-
85
- def test_that_it_reports
86
- pose = MiniTest::Mock.new
87
- placement = Placement.new(pose: pose)
88
-
89
- pose.expect(:report, nil)
90
- placement.report
91
- pose.verify
92
- end
93
- end
94
- end
@@ -1,62 +0,0 @@
1
- require_relative '../lib/toy_robot/robot_controller'
2
- require 'minitest/autorun'
3
-
4
- module ToyRobot
5
- class RobotControllerTest < MiniTest::Unit::TestCase
6
- CommandDouble = Struct.new(:token, :args)
7
-
8
- def setup
9
- @command_double = CommandDouble.new(nil, nil)
10
- @robot = MiniTest::Mock.new
11
- @view = MiniTest::Mock.new
12
- @robot_controller = RobotController.new(
13
- robot: @robot,
14
- view: @view
15
- )
16
- end
17
-
18
- def test_respond_to_public_interface
19
- assert_respond_to @robot_controller, :input
20
- end
21
-
22
- def test_it_delegates_a_place_command_to_robot
23
- @command_double.token = Command::Token::PLACE
24
-
25
- @robot.expect(:place, nil, [@command_double.args])
26
- @robot_controller.input(@command_double)
27
- @robot.verify
28
- end
29
-
30
- def test_it_delegates_a_move_command_to_robot
31
- @command_double.token = Command::Token::MOVE
32
-
33
- @robot.expect(:move, nil)
34
- @robot_controller.input(@command_double)
35
- @robot.verify
36
- end
37
-
38
- def test_it_delegates_a_left_command_to_robot
39
- @command_double.token = Command::Token::LEFT
40
-
41
- @robot.expect(:left, nil)
42
- @robot_controller.input(@command_double)
43
- @robot.verify
44
- end
45
-
46
- def test_it_delegates_a_right_command_to_robot
47
- @command_double.token = Command::Token::RIGHT
48
-
49
- @robot.expect(:right, nil)
50
- @robot_controller.input(@command_double)
51
- @robot.verify
52
- end
53
-
54
- def test_it_delegates_a_report_command_to_view
55
- @command_double.token = Command::Token::REPORT
56
-
57
- @view.expect(:report, nil)
58
- @robot_controller.input(@command_double)
59
- @view.verify
60
- end
61
- end
62
- end