smalruby-editor 0.1.24 → 0.2.0

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.

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
+ """