toyrobot 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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