smalruby-editor 0.1.24 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of smalruby-editor might be problematic. Click here for more details.

Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/Guardfile +9 -0
  3. data/app/assets/javascripts/blocks/hardware.js.coffee.erb +147 -62
  4. data/app/assets/javascripts/blocks/sensing.js.coffee.erb +4 -0
  5. data/app/assets/javascripts/msg/en_us.js +34 -12
  6. data/app/assets/javascripts/msg/ja.js +35 -15
  7. data/app/helpers/editor_helper.rb +2 -1
  8. data/app/models/concerns/ruby_to_block/block/{hardware_button_down_or_up.rb → hardware_button_pressed_or_released.rb} +3 -3
  9. data/app/models/concerns/ruby_to_block/block/{hardware_led_on.rb → hardware_led_turn_off.rb} +2 -2
  10. data/app/models/concerns/ruby_to_block/block/{hardware_led_off.rb → hardware_led_turn_on.rb} +2 -2
  11. data/app/models/concerns/ruby_to_block/block/hardware_operation.rb +2 -0
  12. data/app/models/concerns/ruby_to_block/block/{hardware_rgb_led_on.rb → hardware_rgb_led_set_color.rb} +2 -2
  13. data/app/models/concerns/ruby_to_block/block/{hardware_rgb_led_off.rb → hardware_rgb_led_turn_off.rb} +2 -2
  14. data/app/models/concerns/ruby_to_block/block/hardware_smalrubot_v3_action.rb +22 -0
  15. data/app/models/concerns/ruby_to_block/block/hardware_smalrubot_v3_action_with_sec.rb +24 -0
  16. data/app/models/concerns/ruby_to_block/block/hardware_smalrubot_v3_led_turn_on_or_off.rb +22 -0
  17. data/app/models/concerns/ruby_to_block/block/hardware_smalrubot_v3_light_sensor_value.rb +28 -0
  18. data/app/models/concerns/ruby_to_block/block/hardware_smalrubot_v3_touch_sensor_pressed_or_released.rb +29 -0
  19. data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car_commands.rb +3 -1
  20. data/app/views/editor/_toolbox.html.haml +30 -17
  21. data/app/views/layouts/application.html.erb +3 -1
  22. data/config/locales/en.yml +1 -0
  23. data/config/locales/ja.yml +1 -0
  24. data/lib/smalruby_editor/blockly_message_helper.rb +2 -1
  25. data/lib/smalruby_editor/version.rb +1 -1
  26. data/lib/tasks/release.rake +0 -0
  27. data/smalruby-editor.gemspec +1 -1
  28. data/spec/acceptance/block_mode/blocks/hardware/{button_down_or_up.feature → button_pressed_or_released.feature} +15 -15
  29. data/spec/acceptance/block_mode/blocks/hardware/led_turn_off.feature +67 -0
  30. data/spec/acceptance/block_mode/blocks/hardware/led_turn_on.feature +67 -0
  31. data/spec/acceptance/block_mode/blocks/hardware/rgb_led_set_color.feature +79 -0
  32. data/spec/acceptance/block_mode/blocks/hardware/{button_not_use_pullup.feature → rgb_led_turn_off.feature} +30 -18
  33. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_v3_action.feature +107 -0
  34. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_v3_action_with_sec.feature +151 -0
  35. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_v3_led_turn_on_or_off.feature +73 -0
  36. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_v3_light_sensor_value.feature +92 -0
  37. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_v3_motor_speed.feature +116 -0
  38. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_v3_touch_sensor_pressed_or_released.feature +108 -0
  39. data/spec/models/concerns/ruby_to_block/block/hardware_spec.rb +359 -36
  40. data/spec/models/concerns/ruby_to_block_spec.rb +8 -8
  41. data/spec/steps/block_mode_steps.rb +8 -0
  42. metadata +43 -35
  43. data/app/models/concerns/ruby_to_block/block/hardware_button_not_use_pullup.rb +0 -18
  44. data/app/models/concerns/ruby_to_block/block/hardware_on_button_down_or_up.rb +0 -19
  45. data/app/models/concerns/ruby_to_block/block/hardware_on_sensor_change.rb +0 -17
  46. data/spec/acceptance/block_mode/blocks/hardware/led_off.feature +0 -75
  47. data/spec/acceptance/block_mode/blocks/hardware/led_on.feature +0 -75
  48. data/spec/acceptance/block_mode/blocks/hardware/on_button_down_or_up.feature +0 -87
  49. data/spec/acceptance/block_mode/blocks/hardware/on_sensor_change.feature +0 -81
  50. data/spec/acceptance/block_mode/blocks/hardware/rgb_led_off.feature +0 -81
  51. data/spec/acceptance/block_mode/blocks/hardware/rgb_led_on.feature +0 -87
@@ -10,8 +10,9 @@ module SmalrubyEditor
10
10
  filename = md[1]
11
11
  prefix = filename.slice(%r"app/assets/javascripts/(.*)$", 1)
12
12
  .gsub(/\..*\z/, '')
13
- name = (prefix + name).gsub(/[\/.]/, '_')
13
+ name = prefix + name
14
14
  end
15
+ name = name.gsub(/[\/.]/, '_')
15
16
  "Smalruby.bm('#{name.upcase}')"
16
17
  end
17
18
  end
@@ -1,3 +1,3 @@
1
1
  module SmalrubyEditor
2
- VERSION = '0.1.24'
2
+ VERSION = '0.2.0'
3
3
  end
File without changes
@@ -68,7 +68,7 @@ Gem::Specification.new do |spec|
68
68
  ['mime-types', '~> 1.16'],
69
69
  ['haml-rails'],
70
70
  ['nokogiri'],
71
- ['smalruby', '~> 0.0.32'],
71
+ ['smalruby', '~> 0.1.1'],
72
72
  ]
73
73
  runtime_dependencies << ['therubyracer'] unless is_windows
74
74
  runtime_dependencies.each do |args|
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # language: ja
3
3
  @javascript
4
- 機能: hardware_button_down_or_up - 「条件:ボタン[▼PIN]が[▼押された]」ブロック
4
+ 機能: hardware_button_pressed_or_released - 「条件:ボタン[▼PIN]が[▼押された]」ブロック
5
5
  背景:
6
6
  前提 "ブロック" タブを表示する
7
7
  かつ 次のキャラクターを追加する:
@@ -10,15 +10,15 @@
10
10
 
11
11
  シナリオ: ブロックのみ、キャラクターとブロック、キャラクターとイベントとブロックをそれぞれ配置する
12
12
  # ブロックのみ配置する
13
- もし 次のブロック("hardware_button_down_or_up")を配置する:
13
+ もし 次のブロック("hardware_button_pressed_or_released")を配置する:
14
14
  """
15
15
  %block{:type => "ruby_p", :x => "0", :y => "0", :inline => "true" }
16
16
  %value{:name => "ARG"}
17
- %block{:type => "hardware_button_down_or_up"}
17
+ %block{:type => "hardware_button_pressed_or_released"}
18
18
  %field{:name => "PIN"}<
19
19
  D3
20
- %field{:name => "DOU"}<
21
- down
20
+ %field{:name => "POR"}<
21
+ pressed
22
22
  """
23
23
  かつ ブロックからソースコードを生成する
24
24
 
@@ -31,7 +31,7 @@
31
31
  """
32
32
 
33
33
  # キャラクターとブロックを配置する
34
- もし 次のブロック("hardware_hardware_button_down_or_up")を配置する:
34
+ もし 次のブロック("hardware_hardware_button_pressed_or_released")を配置する:
35
35
  """
36
36
  %block{:type => "character_new", :x => "21", :y => "15"}
37
37
  %field{:name => "NAME"}<
@@ -39,21 +39,21 @@
39
39
  %statement{:name => "DO"}
40
40
  %block{:type => "ruby_p", :x => "0", :y => "0", :inline => "true" }
41
41
  %value{:name => "ARG"}
42
- %block{:type => "hardware_button_down_or_up"}
42
+ %block{:type => "hardware_button_pressed_or_released"}
43
43
  %field{:name => "PIN"}<
44
44
  D3
45
- %field{:name => "DOU"}<
46
- down
45
+ %field{:name => "POR"}<
46
+ pressed
47
47
  """
48
48
  かつ ブロックからソースコードを生成する
49
49
 
50
50
  ならば テキストエディタのプログラムは以下を含むこと:
51
51
  """
52
- p(car1.button("D3").down?)
52
+ p(car1.button("D3").pressed?)
53
53
  """
54
54
 
55
55
  # キャラクターとイベントとブロックを配置する
56
- もし 次のブロック("hardware_hardware_button_down_or_up")を配置する:
56
+ もし 次のブロック("hardware_hardware_button_pressed_or_released")を配置する:
57
57
  """
58
58
  %block{:type => "character_new", :x => "21", :y => "15"}
59
59
  %field{:name => "NAME"}<
@@ -63,17 +63,17 @@
63
63
  %statement{:name => "DO"}
64
64
  %block{:type => "ruby_p", :x => "0", :y => "0", :inline => "true" }
65
65
  %value{:name => "ARG"}
66
- %block{:type => "hardware_button_down_or_up"}
66
+ %block{:type => "hardware_button_pressed_or_released"}
67
67
  %field{:name => "PIN"}<
68
68
  D3
69
- %field{:name => "DOU"}<
70
- up
69
+ %field{:name => "POR"}<
70
+ released
71
71
  """
72
72
  かつ ブロックからソースコードを生成する
73
73
 
74
74
  ならば テキストエディタのプログラムは以下を含むこと:
75
75
  """
76
76
  car1.on(:start) do
77
- p(button("D3").up?)
77
+ p(button("D3").released?)
78
78
  end
79
79
  """
@@ -0,0 +1,67 @@
1
+ # encoding: utf-8
2
+ # language: ja
3
+ @javascript
4
+ 機能: hardware_led_turn_off block
5
+ 背景:
6
+ 前提 "ブロック" タブを表示する
7
+ かつ キャラクターcar1を追加する
8
+
9
+ シナリオ: ブロックのみ配置する
10
+ もし 次のブロックを配置する:
11
+ """
12
+ %block{:type => "hardware_led_turn_off", :x => "0", :y => "0"}
13
+ %field{:name => "PIN"}<
14
+ D13
15
+ """
16
+ かつ ブロックからソースコードを生成する
17
+
18
+ ならば テキストエディタのプログラムは "" であること
19
+
20
+ シナリオ: キャラクターとブロックを配置する
21
+ もし 次のブロックを配置する:
22
+ """
23
+ %block{:type => "character_new", :x => "21", :y => "15"}
24
+ %field{:name => "NAME"}<
25
+ car1
26
+ %statement{:name => "DO"}
27
+ %block{:type => "hardware_led_turn_off", :x => "0", :y => "0"}
28
+ %field{:name => "PIN"}<
29
+ D13
30
+ """
31
+ かつ ブロックからソースコードを生成する
32
+
33
+ ならば テキストエディタのプログラムは以下であること:
34
+ """
35
+ require "smalruby"
36
+
37
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
38
+ car1.led("D13").turn_off
39
+
40
+ """
41
+
42
+ シナリオ: キャラクターとイベントとブロックを配置する
43
+ もし 次のブロックを配置する:
44
+ """
45
+ %block{:type => "character_new", :x => "21", :y => "15"}
46
+ %field{:name => "NAME"}<
47
+ car1
48
+ %statement{:name => "DO"}
49
+ %block{:type => "events_on_start"}
50
+ %statement{:name => "DO"}
51
+ %block{:type => "hardware_led_turn_off", :x => "0", :y => "0"}
52
+ %field{:name => "PIN"}<
53
+ D13
54
+ """
55
+ かつ ブロックからソースコードを生成する
56
+
57
+ ならば テキストエディタのプログラムは以下であること:
58
+ """
59
+ require "smalruby"
60
+
61
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
62
+
63
+ car1.on(:start) do
64
+ led("D13").turn_off
65
+ end
66
+
67
+ """
@@ -0,0 +1,67 @@
1
+ # encoding: utf-8
2
+ # language: ja
3
+ @javascript
4
+ 機能: hardware_led_turn_on block
5
+ 背景:
6
+ 前提 "ブロック" タブを表示する
7
+ かつ キャラクターcar1を追加する
8
+
9
+ シナリオ: ブロックのみ配置する
10
+ もし 次のブロックを配置する:
11
+ """
12
+ %block{:type => "hardware_led_turn_on", :x => "0", :y => "0"}
13
+ %field{:name => "PIN"}<
14
+ D13
15
+ """
16
+ かつ ブロックからソースコードを生成する
17
+
18
+ ならば テキストエディタのプログラムは "" であること
19
+
20
+ シナリオ: キャラクターとブロックを配置する
21
+ もし 次のブロックを配置する:
22
+ """
23
+ %block{:type => "character_new", :x => "21", :y => "15"}
24
+ %field{:name => "NAME"}<
25
+ car1
26
+ %statement{:name => "DO"}
27
+ %block{:type => "hardware_led_turn_on", :x => "0", :y => "0"}
28
+ %field{:name => "PIN"}<
29
+ D13
30
+ """
31
+ かつ ブロックからソースコードを生成する
32
+
33
+ ならば テキストエディタのプログラムは以下であること:
34
+ """
35
+ require "smalruby"
36
+
37
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
38
+ car1.led("D13").turn_on
39
+
40
+ """
41
+
42
+ シナリオ: キャラクターとイベントとブロックを配置する
43
+ もし 次のブロックを配置する:
44
+ """
45
+ %block{:type => "character_new", :x => "21", :y => "15"}
46
+ %field{:name => "NAME"}<
47
+ car1
48
+ %statement{:name => "DO"}
49
+ %block{:type => "events_on_start"}
50
+ %statement{:name => "DO"}
51
+ %block{:type => "hardware_led_turn_on", :x => "0", :y => "0"}
52
+ %field{:name => "PIN"}<
53
+ D13
54
+ """
55
+ かつ ブロックからソースコードを生成する
56
+
57
+ ならば テキストエディタのプログラムは以下であること:
58
+ """
59
+ require "smalruby"
60
+
61
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
62
+
63
+ car1.on(:start) do
64
+ led("D13").turn_on
65
+ end
66
+
67
+ """
@@ -0,0 +1,79 @@
1
+ # encoding: utf-8
2
+ # language: ja
3
+ @javascript
4
+ 機能: hardware_rgb_led_set_color block
5
+ 背景:
6
+ 前提 "ブロック" タブを表示する
7
+ かつ キャラクターcar1を追加する
8
+
9
+ シナリオ: ブロックのみ配置する
10
+ もし 次のブロックを配置する:
11
+ """
12
+ %block{:type => "hardware_rgb_led_set_color", :x => "0", :y => "0"}
13
+ %field{:name => "AC"}<
14
+ anode
15
+ %field{:name => "PIN"}<
16
+ D3
17
+ %field{:name => "COLOUR"}<
18
+ \#808080
19
+ """
20
+ かつ ブロックからソースコードを生成する
21
+
22
+ ならば テキストエディタのプログラムは "" であること
23
+
24
+ シナリオ: キャラクターとブロックを配置する
25
+ もし 次のブロックを配置する:
26
+ """
27
+ %block{:type => "character_new", :x => "21", :y => "15"}
28
+ %field{:name => "NAME"}<
29
+ car1
30
+ %statement{:name => "DO"}
31
+ %block{:type => "hardware_rgb_led_set_color", :x => "0", :y => "0"}
32
+ %field{:name => "AC"}<
33
+ anode
34
+ %field{:name => "PIN"}<
35
+ D3
36
+ %field{:name => "COLOUR"}<
37
+ \#808080
38
+ """
39
+ かつ ブロックからソースコードを生成する
40
+
41
+ ならば テキストエディタのプログラムは以下であること:
42
+ """
43
+ require "smalruby"
44
+
45
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
46
+ car1.rgb_led_anode("D3").color = [128, 128, 128]
47
+
48
+ """
49
+
50
+ シナリオ: キャラクターとイベントとブロックを配置する
51
+ もし 次のブロックを配置する:
52
+ """
53
+ %block{:type => "character_new", :x => "21", :y => "15"}
54
+ %field{:name => "NAME"}<
55
+ car1
56
+ %statement{:name => "DO"}
57
+ %block{:type => "events_on_start"}
58
+ %statement{:name => "DO"}
59
+ %block{:type => "hardware_rgb_led_set_color", :x => "0", :y => "0"}
60
+ %field{:name => "AC"}<
61
+ anode
62
+ %field{:name => "PIN"}<
63
+ D3
64
+ %field{:name => "COLOUR"}<
65
+ \#808080
66
+ """
67
+ かつ ブロックからソースコードを生成する
68
+
69
+ ならば テキストエディタのプログラムは以下であること:
70
+ """
71
+ require "smalruby"
72
+
73
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
74
+
75
+ car1.on(:start) do
76
+ self.rgb_led_anode("D3").color = [128, 128, 128]
77
+ end
78
+
79
+ """
@@ -1,18 +1,17 @@
1
1
  # encoding: utf-8
2
2
  # language: ja
3
3
  @javascript
4
- 機能: hardware_button_not_use_pullup - 「ボタン[▼PIN]のプルアップ抵抗を使わない」ブロック
4
+ 機能: hardware_rgb_led_turn_off block
5
5
  背景:
6
6
  前提 "ブロック" タブを表示する
7
- かつ 次のキャラクターを追加する:
8
- | name | costumes | x | y | angle |
9
- | car1 | car1.png | 0 | 0 | 0 |
7
+ かつ キャラクターcar1を追加する
10
8
 
11
- シナリオ: ブロックのみ、キャラクターとブロック、キャラクターとイベントとブロックをそれぞれ配置する
12
- # ブロックのみ配置する
13
- もし 次のブロック("hardware_button_not_use_pullup")を配置する:
9
+ シナリオ: ブロックのみ配置する
10
+ もし 次のブロックを配置する:
14
11
  """
15
- %block{:type => "hardware_button_not_use_pullup"}
12
+ %block{:type => "hardware_rgb_led_turn_off", :x => "0", :y => "0"}
13
+ %field{:name => "AC"}<
14
+ anode
16
15
  %field{:name => "PIN"}<
17
16
  D3
18
17
  """
@@ -20,26 +19,32 @@
20
19
 
21
20
  ならば テキストエディタのプログラムは "" であること
22
21
 
23
- # キャラクターとブロックを配置する
24
- もし 次のブロック("hardware_hardware_button_not_use_pullup")を配置する:
22
+ シナリオ: キャラクターとブロックを配置する
23
+ もし 次のブロックを配置する:
25
24
  """
26
25
  %block{:type => "character_new", :x => "21", :y => "15"}
27
26
  %field{:name => "NAME"}<
28
27
  car1
29
28
  %statement{:name => "DO"}
30
- %block{:type => "hardware_button_not_use_pullup"}
29
+ %block{:type => "hardware_rgb_led_turn_off", :x => "0", :y => "0"}
30
+ %field{:name => "AC"}<
31
+ anode
31
32
  %field{:name => "PIN"}<
32
33
  D3
33
34
  """
34
35
  かつ ブロックからソースコードを生成する
35
36
 
36
- ならば テキストエディタのプログラムは以下を含むこと:
37
+ ならば テキストエディタのプログラムは以下であること:
37
38
  """
38
- car1.button("D3").not_use_pullup
39
+ require "smalruby"
40
+
41
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
42
+ car1.rgb_led_anode("D3").turn_off
43
+
39
44
  """
40
45
 
41
- # キャラクターとイベントとブロックを配置する
42
- もし 次のブロック("hardware_hardware_button_not_use_pullup")を配置する:
46
+ シナリオ: キャラクターとイベントとブロックを配置する
47
+ もし 次のブロックを配置する:
43
48
  """
44
49
  %block{:type => "character_new", :x => "21", :y => "15"}
45
50
  %field{:name => "NAME"}<
@@ -47,15 +52,22 @@
47
52
  %statement{:name => "DO"}
48
53
  %block{:type => "events_on_start"}
49
54
  %statement{:name => "DO"}
50
- %block{:type => "hardware_button_not_use_pullup"}
55
+ %block{:type => "hardware_rgb_led_turn_off", :x => "0", :y => "0"}
56
+ %field{:name => "AC"}<
57
+ anode
51
58
  %field{:name => "PIN"}<
52
59
  D3
53
60
  """
54
61
  かつ ブロックからソースコードを生成する
55
62
 
56
- ならば テキストエディタのプログラムは以下を含むこと:
63
+ ならば テキストエディタのプログラムは以下であること:
57
64
  """
65
+ require "smalruby"
66
+
67
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
68
+
58
69
  car1.on(:start) do
59
- button("D3").not_use_pullup
70
+ rgb_led_anode("D3").turn_off
60
71
  end
72
+
61
73
  """
@@ -0,0 +1,107 @@
1
+ # encoding: utf-8
2
+ # language: en
3
+ @javascript
4
+ Feature: hardware_smalrubot_v3_action block
5
+ Background:
6
+ Given "ブロック" タブを表示する
7
+ And キャラクターcar1を追加する
8
+
9
+ Scenario: ブロックのみ配置する
10
+ When 次のブロックを配置する:
11
+ """
12
+ %block{:type => "hardware_smalrubot_v3_action", :x => "0", :y => "0"}
13
+ %field{:name => "ACTION"}<
14
+ backward
15
+ """
16
+ And ブロックからソースコードを生成する
17
+
18
+ Then テキストエディタのプログラムは "" であること
19
+
20
+ Scenario: キャラクターとブロックを配置する
21
+ When 次のブロックを配置する:
22
+ """
23
+ %block{:type => "character_new", :x => "21", :y => "15"}
24
+ %field{:name => "NAME"}<
25
+ car1
26
+ %statement{:name => "DO"}
27
+ %block{:type => "hardware_smalrubot_v3_action", :x => "0", :y => "0"}
28
+ %field{:name => "ACTION"}<
29
+ forward
30
+ %next
31
+ %block{:type => "hardware_smalrubot_v3_action", :x => "0", :y => "0"}
32
+ %field{:name => "ACTION"}<
33
+ backward
34
+ %next
35
+ %block{:type => "hardware_smalrubot_v3_action", :x => "0", :y => "0"}
36
+ %field{:name => "ACTION"}<
37
+ turn_left
38
+ %next
39
+ %block{:type => "hardware_smalrubot_v3_action", :x => "0", :y => "0"}
40
+ %field{:name => "ACTION"}<
41
+ turn_right
42
+ %next
43
+ %block{:type => "hardware_smalrubot_v3_action", :x => "0", :y => "0"}
44
+ %field{:name => "ACTION"}<
45
+ stop
46
+ """
47
+ And ブロックからソースコードを生成する
48
+
49
+ Then テキストエディタのプログラムは以下であること:
50
+ """
51
+ require "smalruby"
52
+
53
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
54
+ car1.smalrubot_v3.forward
55
+ car1.smalrubot_v3.backward
56
+ car1.smalrubot_v3.turn_left
57
+ car1.smalrubot_v3.turn_right
58
+ car1.smalrubot_v3.stop
59
+
60
+ """
61
+
62
+ Scenario: キャラクターとイベントとブロックを配置する
63
+ When 次のブロックを配置する:
64
+ """
65
+ %block{:type => "character_new", :x => "21", :y => "15"}
66
+ %field{:name => "NAME"}<
67
+ car1
68
+ %statement{:name => "DO"}
69
+ %block{:type => "events_on_start"}
70
+ %statement{:name => "DO"}
71
+ %block{:type => "hardware_smalrubot_v3_action", :x => "0", :y => "0"}
72
+ %field{:name => "ACTION"}<
73
+ forward
74
+ %next
75
+ %block{:type => "hardware_smalrubot_v3_action", :x => "0", :y => "0"}
76
+ %field{:name => "ACTION"}<
77
+ backward
78
+ %next
79
+ %block{:type => "hardware_smalrubot_v3_action", :x => "0", :y => "0"}
80
+ %field{:name => "ACTION"}<
81
+ turn_left
82
+ %next
83
+ %block{:type => "hardware_smalrubot_v3_action", :x => "0", :y => "0"}
84
+ %field{:name => "ACTION"}<
85
+ turn_right
86
+ %next
87
+ %block{:type => "hardware_smalrubot_v3_action", :x => "0", :y => "0"}
88
+ %field{:name => "ACTION"}<
89
+ stop
90
+ """
91
+ And ブロックからソースコードを生成する
92
+
93
+ Then テキストエディタのプログラムは以下であること:
94
+ """
95
+ require "smalruby"
96
+
97
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
98
+
99
+ car1.on(:start) do
100
+ smalrubot_v3.forward
101
+ smalrubot_v3.backward
102
+ smalrubot_v3.turn_left
103
+ smalrubot_v3.turn_right
104
+ smalrubot_v3.stop
105
+ end
106
+
107
+ """