smalruby-editor 0.1.6-x86-mingw32 → 0.1.7-x86-mingw32

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 (98) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/blocks/hardware.js.coffee.erb +40 -3
  3. data/app/assets/stylesheets/toolbox.css.scss.erb +1 -6
  4. data/app/controllers/source_codes_controller.rb +5 -1
  5. data/app/models/concerns/ruby_to_block/block/base.rb +251 -0
  6. data/app/models/concerns/ruby_to_block/block/character.rb +42 -0
  7. data/app/models/concerns/ruby_to_block/block/character_event.rb +27 -0
  8. data/app/models/concerns/ruby_to_block/block/character_method_call.rb +29 -0
  9. data/app/models/concerns/ruby_to_block/block/character_new.rb +7 -0
  10. data/app/models/concerns/ruby_to_block/block/character_operation.rb +80 -0
  11. data/app/models/concerns/ruby_to_block/block/control_if.rb +45 -0
  12. data/app/models/concerns/ruby_to_block/block/control_loop.rb +19 -0
  13. data/app/models/concerns/ruby_to_block/block/control_sleep.rb +18 -0
  14. data/app/models/concerns/ruby_to_block/block/do.rb +24 -0
  15. data/app/models/concerns/ruby_to_block/block/else.rb +12 -0
  16. data/app/models/concerns/ruby_to_block/block/end.rb +26 -0
  17. data/app/models/concerns/ruby_to_block/block/events_on_click.rb +14 -0
  18. data/app/models/concerns/ruby_to_block/block/events_on_key_push_or_down.rb +17 -0
  19. data/app/models/concerns/ruby_to_block/block/events_on_start.rb +14 -0
  20. data/app/models/concerns/ruby_to_block/block/hardware_init_hardware.rb +14 -0
  21. data/app/models/concerns/ruby_to_block/block/hardware_led_off.rb +16 -0
  22. data/app/models/concerns/ruby_to_block/block/hardware_led_on.rb +16 -0
  23. data/app/models/concerns/ruby_to_block/block/hardware_on_sensor_change.rb +17 -0
  24. data/app/models/concerns/ruby_to_block/block/hardware_rgb_led_off.rb +18 -0
  25. data/app/models/concerns/ruby_to_block/block/hardware_rgb_led_on.rb +23 -0
  26. data/app/models/concerns/ruby_to_block/block/hardware_sensor_value.rb +23 -0
  27. data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car.rb +26 -0
  28. data/app/models/concerns/ruby_to_block/block/looks_hide.rb +8 -0
  29. data/app/models/concerns/ruby_to_block/block/looks_say.rb +20 -0
  30. data/app/models/concerns/ruby_to_block/block/looks_show.rb +8 -0
  31. data/app/models/concerns/ruby_to_block/block/looks_vanish.rb +8 -0
  32. data/app/models/concerns/ruby_to_block/block/math_number.rb +14 -0
  33. data/app/models/concerns/ruby_to_block/block/motion_change_x_by.rb +20 -0
  34. data/app/models/concerns/ruby_to_block/block/motion_change_y_by.rb +20 -0
  35. data/app/models/concerns/ruby_to_block/block/motion_move.rb +15 -0
  36. data/app/models/concerns/ruby_to_block/block/motion_point_towards_character.rb +24 -0
  37. data/app/models/concerns/ruby_to_block/block/motion_point_towards_mouse.rb +9 -0
  38. data/app/models/concerns/ruby_to_block/block/motion_reach_wall.rb +24 -0
  39. data/app/models/concerns/ruby_to_block/block/motion_rotate_left.rb +20 -0
  40. data/app/models/concerns/ruby_to_block/block/motion_rotate_right.rb +20 -0
  41. data/app/models/concerns/ruby_to_block/block/motion_self_angle.rb +23 -0
  42. data/app/models/concerns/ruby_to_block/block/motion_self_x.rb +23 -0
  43. data/app/models/concerns/ruby_to_block/block/motion_self_y.rb +23 -0
  44. data/app/models/concerns/ruby_to_block/block/motion_set_angle.rb +15 -0
  45. data/app/models/concerns/ruby_to_block/block/motion_set_x.rb +38 -0
  46. data/app/models/concerns/ruby_to_block/block/motion_set_y.rb +15 -0
  47. data/app/models/concerns/ruby_to_block/block/motion_turn.rb +8 -0
  48. data/app/models/concerns/ruby_to_block/block/motion_turn_if_reach_wall.rb +8 -0
  49. data/app/models/concerns/ruby_to_block/block/null.rb +17 -0
  50. data/app/models/concerns/ruby_to_block/block/operators_compare.rb +36 -0
  51. data/app/models/concerns/ruby_to_block/block/operators_false.rb +8 -0
  52. data/app/models/concerns/ruby_to_block/block/operators_true.rb +8 -0
  53. data/app/models/concerns/ruby_to_block/block/require_smalruby.rb +7 -0
  54. data/app/models/concerns/ruby_to_block/block/ruby_comment.rb +16 -0
  55. data/app/models/concerns/ruby_to_block/block/ruby_expression.rb +14 -0
  56. data/app/models/concerns/ruby_to_block/block/ruby_statement.rb +23 -0
  57. data/app/models/concerns/ruby_to_block/block/sensing_hit.rb +23 -0
  58. data/app/models/concerns/ruby_to_block/block/sound_play.rb +15 -0
  59. data/app/models/concerns/ruby_to_block/block/sound_preset_sounds.rb +31 -0
  60. data/app/models/concerns/ruby_to_block/block/text.rb +15 -0
  61. data/app/models/concerns/ruby_to_block/block/value.rb +12 -0
  62. data/app/models/concerns/ruby_to_block/block.rb +97 -0
  63. data/app/models/concerns/ruby_to_block/context.rb +97 -0
  64. data/app/models/concerns/ruby_to_block/formatter.rb +26 -0
  65. data/app/models/concerns/ruby_to_block.rb +17 -360
  66. data/app/models/source_code.rb +3 -1
  67. data/app/views/editor/_toolbox.html.haml +16 -0
  68. data/lib/smalruby_editor/version.rb +3 -3
  69. data/public/assets/{application-64a390efe879c386a5950515064f062d.css → application-28b7bed56c5389dfa372e972c75b6676.css} +17 -10
  70. data/public/assets/application-28b7bed56c5389dfa372e972c75b6676.css.gz +0 -0
  71. data/public/assets/{application-8bfffad1222d4e198f3c7ccc1cbd774f.js → application-4f747690ebc8ec4815ae36021fdb2c44.js} +135 -0
  72. data/public/assets/{application-8bfffad1222d4e198f3c7ccc1cbd774f.js.gz → application-4f747690ebc8ec4815ae36021fdb2c44.js.gz} +0 -0
  73. data/public/assets/manifest-332a5a1668194028b55103e0ea45c054.json +1 -1
  74. data/smalruby-editor.gemspec +1 -1
  75. data/spec/acceptance/block_mode/blocks/hardware/two_wheel_drive_car.feature +69 -0
  76. data/spec/acceptance/ruby_mode/translate.feature +1 -1
  77. data/spec/controllers/source_codes_controller_spec.rb +14 -11
  78. data/spec/models/concerns/ruby_to_block/block/character_method_call_spec.rb +175 -0
  79. data/spec/models/concerns/ruby_to_block/block/control_if_spec.rb +75 -0
  80. data/spec/models/concerns/ruby_to_block/block/control_loop_spec.rb +68 -0
  81. data/spec/models/concerns/ruby_to_block/block/events_on_start_spec.rb +120 -0
  82. data/spec/models/concerns/ruby_to_block/block/hardware_spec.rb +120 -0
  83. data/spec/models/concerns/ruby_to_block/block/looks_say_spec.rb +79 -0
  84. data/spec/models/concerns/ruby_to_block/block/looks_spec.rb +74 -0
  85. data/spec/models/concerns/ruby_to_block/block/motion_move_spec.rb +63 -0
  86. data/spec/models/concerns/ruby_to_block/block/motion_reach_wall_spec.rb +67 -0
  87. data/spec/models/concerns/ruby_to_block/block/motion_spec.rb +392 -0
  88. data/spec/models/concerns/ruby_to_block/block/motion_turn_spec.rb +54 -0
  89. data/spec/models/concerns/ruby_to_block/block/require_smalruby_spec.rb +39 -0
  90. data/spec/models/concerns/ruby_to_block/block/ruby_comment_spec.rb +55 -0
  91. data/spec/models/concerns/ruby_to_block/block/ruby_statement_spec.rb +113 -0
  92. data/spec/models/concerns/ruby_to_block/block/shared/block_examples.rb +44 -0
  93. data/spec/models/concerns/ruby_to_block/block/sound_spec.rb +46 -0
  94. data/spec/models/concerns/ruby_to_block/block_spec.rb +49 -0
  95. data/spec/models/concerns/ruby_to_block_spec.rb +421 -217
  96. data/spec/support/ruby_to_block.rb +10 -0
  97. metadata +108 -10
  98. data/public/assets/application-64a390efe879c386a5950515064f062d.css.gz +0 -0
@@ -0,0 +1,54 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+ require_relative 'shared/block_examples'
4
+
5
+ # rubocop:disable EmptyLines, LineLength
6
+
7
+ describe RubyToBlock::Block::MotionTurn, to_blocks: true do
8
+ _parts = <<-EOS
9
+ turn
10
+ EOS
11
+ describe compact_source_code(_parts), on_start_data: true do
12
+ __parts = _parts
13
+ let(:parts) { __parts }
14
+
15
+ it '結果が正しいこと' do
16
+ should eq_block_xml(<<-XML)
17
+ <block type="motion_turn" />
18
+ XML
19
+ end
20
+ end
21
+
22
+ _parts = <<-EOS
23
+ car1.turn
24
+ EOS
25
+ describe compact_source_code(_parts), character_new_data: true do
26
+ __parts = _parts
27
+ let(:parts) { __parts }
28
+
29
+ it '結果が正しいこと' do
30
+ should eq_block_xml(<<-XML)
31
+ <field name="NAME">car1</field>
32
+ <statement name="DO">
33
+ <block type="motion_turn" />
34
+ </statement>
35
+ XML
36
+ end
37
+ end
38
+
39
+ _parts = <<-EOS
40
+ turn
41
+ EOS
42
+ describe compact_source_code(_parts) do
43
+ __parts = _parts
44
+ let(:data) { __parts }
45
+
46
+ it '結果が正しいこと' do
47
+ should eq_block_xml(<<-XML)
48
+ <block type="ruby_statement">
49
+ <field name="STATEMENT">turn</field>
50
+ </block>
51
+ XML
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,39 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+ require_relative 'shared/block_examples'
4
+
5
+ # rubocop:disable EmptyLines, LineLength
6
+
7
+ describe RubyToBlock::Block::RequireSmalruby, to_blocks: true do
8
+ _data = 'require "smalruby"'
9
+ describe compact_source_code(_data) do
10
+ __data = _data
11
+ let(:data) { __data }
12
+
13
+ it { should eq('') }
14
+ end
15
+
16
+ _data = ' require "smalruby"'
17
+ describe compact_source_code(_data) do
18
+ __data = _data
19
+ let(:data) { __data }
20
+
21
+ it { should eq('') }
22
+ end
23
+
24
+ _data = 'require "smalruby" '
25
+ describe compact_source_code(_data) do
26
+ __data = _data
27
+ let(:data) { __data }
28
+
29
+ it { should eq('') }
30
+ end
31
+
32
+ _data = ' require "smalruby" '
33
+ describe compact_source_code(_data) do
34
+ __data = _data
35
+ let(:data) { __data }
36
+
37
+ it { should eq('') }
38
+ end
39
+ end
@@ -0,0 +1,55 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+ require_relative 'shared/block_examples'
4
+
5
+ # rubocop:disable EmptyLines, LineLength
6
+
7
+ describe RubyToBlock::Block::RubyComment, to_blocks: true do
8
+ _data = <<-EOS
9
+ # 逃げる車
10
+ EOS
11
+ describe compact_source_code(_data) do
12
+ __data = _data
13
+ let(:data) { __data }
14
+
15
+ it '結果が正しいこと' do
16
+ should eq_block_xml(<<-XML)
17
+ <block type="ruby_comment">
18
+ <field name="COMMENT">逃げる車</field>
19
+ </block>
20
+ XML
21
+ end
22
+ end
23
+
24
+ _data = <<-EOS
25
+ # 逃げる車
26
+ EOS
27
+ describe compact_source_code(_data) do
28
+ __data = _data
29
+ let(:data) { __data }
30
+
31
+ it '結果が正しいこと' do
32
+ should eq_block_xml(<<-XML)
33
+ <block type="ruby_comment">
34
+ <field name="COMMENT"> 逃げる車</field>
35
+ </block>
36
+ XML
37
+ end
38
+ end
39
+
40
+ _data = <<-EOS
41
+ #逃げる車
42
+ EOS
43
+ describe compact_source_code(_data) do
44
+ __data = _data
45
+ let(:data) { __data }
46
+
47
+ it '結果が正しいこと' do
48
+ should eq_block_xml(<<-XML)
49
+ <block type="ruby_statement">
50
+ <field name="STATEMENT">#逃げる車</field>
51
+ </block>
52
+ XML
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,113 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+ require_relative 'shared/block_examples'
4
+
5
+ # rubocop:disable EmptyLines, LineLength
6
+
7
+ describe RubyToBlock::Block::RubyStatement, to_blocks: true do
8
+ parts = <<-EOS
9
+ s = :a
10
+ case s
11
+ when :a
12
+ puts "エー"
13
+ when :b
14
+ puts "ビー"
15
+ end
16
+ EOS
17
+ describe compact_source_code(parts), on_start_data: true do
18
+ _parts = parts
19
+ let(:parts) { _parts }
20
+
21
+ it '結果が正しいこと' do
22
+ should eq_block_xml(<<-XML)
23
+ <block type="ruby_statement">
24
+ <field name="STATEMENT">s = :a</field>
25
+ <next>
26
+ <block type="ruby_statement">
27
+ <field name="STATEMENT">case s</field>
28
+ <next>
29
+ <block type="ruby_statement">
30
+ <field name="STATEMENT">when :a</field>
31
+ <next>
32
+ <block type="ruby_statement">
33
+ <field name="STATEMENT"> puts &quot;エー&quot;</field>
34
+ <next>
35
+ <block type="ruby_statement">
36
+ <field name="STATEMENT">when :b</field>
37
+ <next>
38
+ <block type="ruby_statement">
39
+ <field name="STATEMENT"> puts &quot;ビー&quot;</field>
40
+ <next>
41
+ <block type="ruby_statement">
42
+ <field name="STATEMENT">end</field>
43
+ </block>
44
+ </next>
45
+ </block>
46
+ </next>
47
+ </block>
48
+ </next>
49
+ </block>
50
+ </next>
51
+ </block>
52
+ </next>
53
+ </block>
54
+ </next>
55
+ </block>
56
+ XML
57
+ end
58
+ end
59
+
60
+ parts = <<-EOS
61
+ require "smalruby"
62
+
63
+ s = :a
64
+ case s
65
+ when :a
66
+ puts "エー"
67
+ when :b
68
+ puts "ビー"
69
+ end
70
+ EOS
71
+ describe compact_source_code(parts) do
72
+ _parts = parts
73
+ let(:data) { _parts }
74
+
75
+ it '結果が正しいこと' do
76
+ should eq_block_xml(<<-XML)
77
+ <block type="ruby_statement">
78
+ <field name="STATEMENT">s = :a</field>
79
+ <next>
80
+ <block type="ruby_statement">
81
+ <field name="STATEMENT">case s</field>
82
+ <next>
83
+ <block type="ruby_statement">
84
+ <field name="STATEMENT">when :a</field>
85
+ <next>
86
+ <block type="ruby_statement">
87
+ <field name="STATEMENT"> puts &quot;エー&quot;</field>
88
+ <next>
89
+ <block type="ruby_statement">
90
+ <field name="STATEMENT">when :b</field>
91
+ <next>
92
+ <block type="ruby_statement">
93
+ <field name="STATEMENT"> puts &quot;ビー&quot;</field>
94
+ <next>
95
+ <block type="ruby_statement">
96
+ <field name="STATEMENT">end</field>
97
+ </block>
98
+ </next>
99
+ </block>
100
+ </next>
101
+ </block>
102
+ </next>
103
+ </block>
104
+ </next>
105
+ </block>
106
+ </next>
107
+ </block>
108
+ </next>
109
+ </block>
110
+ XML
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,44 @@
1
+ shared_context ':to_blocks', to_blocks: true do
2
+ let(:source_code) { SourceCode.new(data: data) }
3
+
4
+ subject { source_code.to_blocks }
5
+ end
6
+
7
+ shared_context ':character_new_data', character_new_data: true do
8
+ let(:data) {
9
+ <<-EOS.strip_heredoc
10
+ require "smalruby"
11
+
12
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
13
+ #{parts}
14
+ EOS
15
+ }
16
+ end
17
+
18
+ shared_context ':on_start_data', on_start_data: true do
19
+ let(:data) {
20
+ <<-EOS.strip_heredoc
21
+ require "smalruby"
22
+
23
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
24
+
25
+ car1.on(:start) do
26
+ #{parts.lines.join(' ')}
27
+ end
28
+ EOS
29
+ }
30
+ end
31
+
32
+ class EqBlockXml < RSpec::Matchers::BuiltIn::Eq
33
+ def matches?(actual)
34
+ indent = @expected.slice(/\A(\s*).*$/, 1).length
35
+ re = /\A {#{indent},}/
36
+ @actual = actual.lines.select { |l| re.match(l) }.join
37
+ @actual = actual if @actual.empty?
38
+ match(@expected, @actual)
39
+ end
40
+ end
41
+
42
+ def eq_block_xml(xml)
43
+ EqBlockXml.new(xml)
44
+ end
@@ -0,0 +1,46 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+ require_relative 'shared/block_examples'
4
+
5
+ # rubocop:disable EmptyLines, LineLength
6
+
7
+ describe RubyToBlock::Block, '音ジャンル', to_blocks: true do
8
+ parts = <<-EOS
9
+ car1.on(:start) do
10
+ play(name: "piano_do.wav")
11
+ end
12
+ car1.play(name: "piano_do.wav")
13
+ EOS
14
+ describe compact_source_code(parts), character_new_data: true do
15
+ _parts = parts
16
+ let(:parts) { _parts }
17
+
18
+ it '結果が正しいこと' do
19
+ should eq_block_xml(<<-XML)
20
+ <field name="NAME">car1</field>
21
+ <statement name="DO">
22
+ <block type="events_on_start">
23
+ <statement name="DO">
24
+ <block type="sound_play" inline="true">
25
+ <value name="NAME">
26
+ <block type="sound_preset_sounds">
27
+ <field name="NAME">piano_do.wav</field>
28
+ </block>
29
+ </value>
30
+ </block>
31
+ </statement>
32
+ <next>
33
+ <block type="sound_play" inline="true">
34
+ <value name="NAME">
35
+ <block type="sound_preset_sounds">
36
+ <field name="NAME">piano_do.wav</field>
37
+ </block>
38
+ </value>
39
+ </block>
40
+ </next>
41
+ </block>
42
+ </statement>
43
+ XML
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,49 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ # rubocop:disable EmptyLines, LineLength
5
+
6
+ describe RubyToBlock::Block do
7
+ describe '.new' do
8
+ subject { described_class.new(type) }
9
+
10
+ context '引数がruby_statementの場合'do
11
+ let(:type) { 'ruby_statement' }
12
+
13
+ it { should be_instance_of(described_class::RubyStatement) }
14
+ end
15
+ end
16
+
17
+ describe '.statement_regexp' do
18
+ subject { described_class.statement_regexp }
19
+
20
+ it { should be_kind_of(Regexp) }
21
+ it {
22
+ expect(subject.to_s)
23
+ .to match(/#{Regexp.quote('|(?<ruby_statement>^.*$))')}$/)
24
+ }
25
+ its(:names) { should include('ruby_statement') }
26
+ end
27
+
28
+ describe '.value_regexp' do
29
+ subject { described_class.value_regexp }
30
+
31
+ it { should be_kind_of(Regexp) }
32
+ it {
33
+ expect(subject.to_s)
34
+ .to match(/#{Regexp.quote('|(?<ruby_expression>^.*$))')}$/)
35
+ }
36
+ its(:names) { should include('ruby_expression') }
37
+ end
38
+
39
+ describe '.regexp' do
40
+ subject { described_class.regexp(type) }
41
+
42
+ context '引数がruby_statementの場合'do
43
+ let(:type) { 'ruby_statement' }
44
+
45
+ it { should be_kind_of(Regexp) }
46
+ it { should eq(Regexp.new(described_class::RubyStatement.regexp)) }
47
+ end
48
+ end
49
+ end