smalruby-editor 0.1.23-x86-mingw32 → 0.1.24-x86-mingw32

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.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d7f9e3657a17fff32fcd9ac5b73969f9e406f593
4
- data.tar.gz: 9a3e3b072a873403ae7fee32c1bdffaef07161f8
3
+ metadata.gz: 42f6d2af5f4f6c84ae004c8ce00075e298c78d2f
4
+ data.tar.gz: 850e6b965ebdd14beccf80b57e49295dda964d2c
5
5
  SHA512:
6
- metadata.gz: 5da5933e6419273e373c0fb36851607c35726a60a5e858b90ae0dad1f727d0b6f876a1a77c9a6592b2c3436d2e3e9cbbbec43987a9903cd6c77e407986e4b400
7
- data.tar.gz: b822bbc6a28e7b310b6385f1d926417d1478f4277fe0e26b487090f8c879dca050d0ca59efbb8a596a1c9ac93fcb421ca65fa3397a529e923f74cb6bd244df91
6
+ metadata.gz: fadf35fb278a419515c9d8b4ac222d0bbfbf2f82cbb515d1a0619a38b2c4001684aef925ecd702232b4e041f030577a9dc544e191149cffe6879b05c66850fed
7
+ data.tar.gz: 21cb579247d0979cf0be7ce503207f3ba35f2ce42a80b61a9330c320672ed1429722db5d866b44694d2a81a47c7b46d2d933b5c3c91d21de31458d612c879268
data/.rspec CHANGED
@@ -1,4 +1,3 @@
1
1
  --color
2
2
  --format documentation
3
- --drb
4
3
  -r turnip/rspec
data/.rubocop.yml CHANGED
@@ -30,3 +30,7 @@ MethodLength:
30
30
  # デフォルトの100は短すぎる。なんとなく250行とした。
31
31
  ClassLength:
32
32
  Max: 250
33
+
34
+ # LoadErrorなど、rescueブロックを空にすることはよくあるため。
35
+ HandleExceptions:
36
+ Enabled: false
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.1.4
1
+ 2.1.5
data/.travis.yml CHANGED
@@ -3,7 +3,7 @@ language: ruby
3
3
  cache: bundler
4
4
 
5
5
  rvm:
6
- - 2.1.4
6
+ - 2.1.5
7
7
 
8
8
  env:
9
9
  AUDIODEV=null
data/Guardfile ADDED
@@ -0,0 +1,45 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ ## Uncomment and set this to only include directories you want to watch
5
+ # directories %(app lib config test spec feature)
6
+
7
+ ## Uncomment to clear the screen before every task
8
+ # clearing :on
9
+
10
+ group :red_green_refactor, halt_on_fail: true do
11
+ guard :rubocop, all_on_start: false do
12
+ watch(%r{.+\.rb$})
13
+ watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
14
+ end
15
+
16
+ guard :rspec, cmd: 'bundle exec bin/rspec' do
17
+ watch(%r{^spec/.+_spec\.rb$})
18
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
19
+ watch('spec/spec_helper.rb') { "spec" }
20
+
21
+ # Rails example
22
+ watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
23
+ watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
24
+ watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
25
+ watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
26
+ watch('config/routes.rb') { "spec/routing" }
27
+ watch('app/controllers/application_controller.rb') { "spec/controllers" }
28
+
29
+ # Capybara features specs
30
+ watch(%r{^app/views/(.+)/.*\.(erb|haml|slim)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
31
+
32
+ # Turnip features and steps
33
+ watch(%r{^spec/acceptance/(.+)\.feature$})
34
+ watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
35
+ end
36
+ end
37
+
38
+ guard 'livereload' do
39
+ watch(%r{app/views/.+\.(erb|haml|slim)$})
40
+ watch(%r{app/helpers/.+\.rb})
41
+ watch(%r{public/.+\.(css|js|html)})
42
+ watch(%r{config/locales/.+\.yml})
43
+ # Rails Assets Pipeline
44
+ watch(%r{(app|vendor)(/assets/\w+/(.+\.(css|js|html|png|jpg))).*}) { |m| "/assets/#{m[3]}" }
45
+ end
@@ -15,7 +15,6 @@
15
15
  //= require jquery.ui.draggable
16
16
  //= require jquery.ui.droppable
17
17
  //= require jquery.blockUI
18
- //= require turbolinks
19
18
  //= require ace/ace
20
19
  //= require ace/theme-clouds.js
21
20
  //= require ace/mode-ruby.js
@@ -80,7 +80,7 @@ Blockly.Msg.BLOCKS_SENSING_DOWN = Blockly.Msg.BLOCKS_SENSING_PUSH;
80
80
  Blockly.Msg.BLOCKS_SENSING_M_LBUTTON = '左ボタン';
81
81
  Blockly.Msg.BLOCKS_SENSING_M_MBUTTON = '中ボタン';
82
82
  Blockly.Msg.BLOCKS_SENSING_M_RBUTTON = '右ボタン';
83
- Blockly.Msg.BLOCKS_SENSING_UP = '押された';
83
+ Blockly.Msg.BLOCKS_SENSING_UP = '離された';
84
84
  Blockly.Msg.BLOCKS_SENSING_REACH_WALL = '端に触れた';
85
85
  Blockly.Msg.BLOCKS_SENSING_INPUT_KEY_PUSH_OR_DOWN_PREFIX = 'キーボードの';
86
86
  Blockly.Msg.BLOCKS_SENSING_INPUT_KEY_PUSH_OR_DOWN_MIDDLE = 'が';
@@ -27,29 +27,15 @@
27
27
  colors = SmalrubyEditor::COLORS
28
28
 
29
29
  hues = [
30
- colors[:motion],
31
- colors[:motion],
32
- colors[:motion],
33
30
  colors[:motion],
34
31
  colors[:looks],
35
32
  colors[:sound],
36
33
  colors[:pen],
37
34
  colors[:data],
38
- colors[:data],
39
35
  colors[:events],
40
36
  colors[:control],
41
- colors[:control],
42
- colors[:control],
43
- colors[:control],
44
37
  colors[:sensing],
45
- colors[:sensing],
46
- colors[:sensing],
47
- colors[:operators],
48
- colors[:operators],
49
38
  colors[:operators],
50
- colors[:operators],
51
- colors[:etc],
52
- colors[:etc],
53
39
  colors[:etc],
54
40
  ]
55
41
 
@@ -57,11 +43,10 @@
57
43
  [hsv_to_rgb(h, 100, 80), hsv_to_rgb(h, 100, 100)]
58
44
  }
59
45
 
60
- ids = (0..9).to_a + ('a'..'z').to_a
61
46
  colors.each.with_index(1) do |(color, active_color), index|
62
47
  %>
63
48
 
64
- #\:<%= ids[index] %> {
49
+ div[aria-level="1"][aria-posinset="<%= index %>"] {
65
50
  .blocklyTreeRow {
66
51
  margin-bottom: 1px;
67
52
  padding-top: 1px;
@@ -9,16 +9,21 @@ class SourceCodesController < ApplicationController
9
9
  localPrograms: [],
10
10
  demoPrograms: [],
11
11
  }
12
+
13
+ select_and_get_summary = proc { |path|
14
+ s = SourceCode.new(filename: path.basename.to_s, data: path.read)
15
+ next if raspberrypi? && s.include_block?(/^(hardware_|pen_)/)
16
+ s.summary
17
+ }
18
+
12
19
  if standalone?
13
- res[:localPrograms] = local_program_paths.map { |path|
14
- SourceCode.new(filename: path.basename.to_s, data: path.read).summary
15
- }
20
+ res[:localPrograms] =
21
+ local_program_paths.map(&select_and_get_summary).compact
16
22
  end
17
23
 
18
- res[:demoPrograms] = Pathname.glob(Rails.root.join('demos/*.rb.xml')).map {
19
- |path|
20
- SourceCode.new(filename: path.basename.to_s, data: path.read).summary
21
- }
24
+ demo_program_paths = Pathname.glob(Rails.root.join('demos/*.rb.xml'))
25
+ res[:demoPrograms] =
26
+ demo_program_paths.map(&select_and_get_summary).compact
22
27
 
23
28
  render json: res
24
29
  end
@@ -67,7 +67,7 @@ class SourceCode < ActiveRecord::Base
67
67
  # ソースコードの概要を取得する
68
68
  def summary
69
69
  res = {}
70
- if /\.xml\z/ =~ filename
70
+ if xml?
71
71
  res[:filename] = filename.sub(/\.xml\z/, '')
72
72
 
73
73
  doc = Nokogiri::HTML.parse(data)
@@ -84,8 +84,41 @@ class SourceCode < ActiveRecord::Base
84
84
  res
85
85
  end
86
86
 
87
+ # 指定した命令ブロックを含んでいるかどうかを返す
88
+ #
89
+ # @param [String|Regexp] type 命令ブロックの種類
90
+ # @return [Boolean] 命令ブロックを含む場合はtrue、そうでない場合はfalse
91
+ def include_block?(type)
92
+ if xml?
93
+ doc = Nokogiri::HTML.parse(data)
94
+ if type.is_a?(Regexp)
95
+ doc.xpath(%(//block[matches(@type, '#{type.source}')]),
96
+ MatchesXPathFunction.new).length > 0
97
+ else
98
+ doc.xpath(%(//block[@type="#{type}"])).length > 0
99
+ end
100
+ else
101
+ false
102
+ end
103
+ end
104
+
105
+ # ソースコードの種別がXML形式かどうかを返す
106
+ def xml?
107
+ !!(/\.xml\z/ =~ filename)
108
+ end
109
+
87
110
  private
88
111
 
112
+ class MatchesXPathFunction
113
+ def matches(node_set, regex)
114
+ node_set.select { |node|
115
+ node.value =~ /#{regex}/
116
+ }
117
+ end
118
+ end
119
+
120
+ private_constant :MatchesXPathFunction
121
+
89
122
  def validate_filename
90
123
  if File.basename(filename) != filename
91
124
  errors.add(:filename, 'includes directory separator(s)')
@@ -40,10 +40,12 @@
40
40
  = toolbox_number_value('Y', 0)
41
41
 
42
42
  -# 変数:x座標
43
- %block{:type => "#{category}_self_x"}
43
+ - if !raspberrypi?
44
+ %block{:type => "#{category}_self_x"}
44
45
 
45
46
  -# 変数:y座標
46
- %block{:type => "#{category}_self_y"}
47
+ - if !raspberrypi?
48
+ %block{:type => "#{category}_self_y"}
47
49
 
48
50
  %category{:name => t('.motion_rotate')}
49
51
  -# もし端に着いたら、跳ね返る
@@ -77,64 +79,66 @@
77
79
  %block{:type => "#{category}_set_rotation_style"}
78
80
 
79
81
  -# 変数:向き
80
- %block{:type => "#{category}_self_angle"}
81
-
82
- - category = 'hardware'
83
- %category{:name => t('.motion_actuator')}
84
- - subcategory = 'servo'
85
- -# サーボ[▼PIN]を( )度(5~180)にする
86
- %block{:type => "#{category}_#{subcategory}_set_position"}
87
- = toolbox_number_value('POS', 90)
88
-
89
- - subcategory = 'two_wheel_drive_car'
90
- -# 2WD車[▼PIN]を( )秒[▼コマンド]
91
- %block{:type => "#{category}_#{subcategory}_run"}
92
- = toolbox_pin_field('D5')
93
- = toolbox_number_value('SEC', 1)
94
- %value{:name => 'COMMAND'}
95
- %block{:type => "#{category}_#{subcategory}_commands"}
96
-
97
- -# [▼コマンド]
98
- %block{:type => "#{category}_#{subcategory}_commands"}
99
- %field{:name => 'COMMAND'}<
100
- forward
101
-
102
- -# 2WD車[▼PIN]を進める
103
- %block{:type => "#{category}_#{subcategory}_forward"}
104
- = toolbox_pin_field('D5')
105
-
106
- -# 2WD車[▼PIN]をバックさせる
107
- %block{:type => "#{category}_#{subcategory}_backward"}
108
- = toolbox_pin_field('D5')
109
-
110
- -# 2WD車[▼PIN]を左に曲げる
111
- %block{:type => "#{category}_#{subcategory}_turn_left"}
112
- = toolbox_pin_field('D5')
113
-
114
- -# 2WD車[▼PIN]を右に曲げる
115
- %block{:type => "#{category}_#{subcategory}_turn_right"}
116
- = toolbox_pin_field('D5')
117
-
118
- -# 2WD車[▼PIN]を止める
119
- %block{:type => "#{category}_#{subcategory}_stop"}
120
- = toolbox_pin_field('D5')
121
-
122
- -# 2WD車[▼PIN]の[▼LOR]の速度を<SPEED>%にする
123
- %block{:type => "#{category}_#{subcategory}_set_speed"}
124
- = toolbox_pin_field('D5')
125
- = toolbox_number_value('SPEED', 100)
126
-
127
- - subcategory = 'motor_driver'
128
- -# (モータードライバ[▼PIN]で)モーターを[▼正転させる]
129
- %block{:type => "#{category}_#{subcategory}"}
130
- = toolbox_pin_field('D6')
131
- %field{:name => 'METHOD'}<
132
- forward
133
-
134
- -# (モータードライバ[▼PIN]の)モーターの速度を<SPEED>%にする
135
- %block{:type => "#{category}_#{subcategory}_set_speed"}
136
- = toolbox_pin_field('D6')
137
- = toolbox_number_value('SPEED', 100)
82
+ - if !raspberrypi?
83
+ %block{:type => "#{category}_self_angle"}
84
+
85
+ - if !raspberrypi?
86
+ - category = 'hardware'
87
+ %category{:name => t('.motion_actuator')}
88
+ - subcategory = 'servo'
89
+ -# サーボ[▼PIN]を( )度(5~180)にする
90
+ %block{:type => "#{category}_#{subcategory}_set_position"}
91
+ = toolbox_number_value('POS', 90)
92
+
93
+ - subcategory = 'two_wheel_drive_car'
94
+ -# 2WD車[▼PIN]を( )秒[▼コマンド]
95
+ %block{:type => "#{category}_#{subcategory}_run"}
96
+ = toolbox_pin_field('D5')
97
+ = toolbox_number_value('SEC', 1)
98
+ %value{:name => 'COMMAND'}
99
+ %block{:type => "#{category}_#{subcategory}_commands"}
100
+
101
+ -# [▼コマンド]
102
+ %block{:type => "#{category}_#{subcategory}_commands"}
103
+ %field{:name => 'COMMAND'}<
104
+ forward
105
+
106
+ -# 2WD車[▼PIN]を進める
107
+ %block{:type => "#{category}_#{subcategory}_forward"}
108
+ = toolbox_pin_field('D5')
109
+
110
+ -# 2WD車[▼PIN]をバックさせる
111
+ %block{:type => "#{category}_#{subcategory}_backward"}
112
+ = toolbox_pin_field('D5')
113
+
114
+ -# 2WD車[▼PIN]を左に曲げる
115
+ %block{:type => "#{category}_#{subcategory}_turn_left"}
116
+ = toolbox_pin_field('D5')
117
+
118
+ -# 2WD車[▼PIN]を右に曲げる
119
+ %block{:type => "#{category}_#{subcategory}_turn_right"}
120
+ = toolbox_pin_field('D5')
121
+
122
+ -# 2WD車[▼PIN]を止める
123
+ %block{:type => "#{category}_#{subcategory}_stop"}
124
+ = toolbox_pin_field('D5')
125
+
126
+ -# 2WD車[▼PIN]の[▼LOR]の速度を<SPEED>%にする
127
+ %block{:type => "#{category}_#{subcategory}_set_speed"}
128
+ = toolbox_pin_field('D5')
129
+ = toolbox_number_value('SPEED', 100)
130
+
131
+ - subcategory = 'motor_driver'
132
+ -# (モータードライバ[▼PIN]で)モーターを[▼正転させる]
133
+ %block{:type => "#{category}_#{subcategory}"}
134
+ = toolbox_pin_field('D6')
135
+ %field{:name => 'METHOD'}<
136
+ forward
137
+
138
+ -# (モータードライバ[▼PIN]の)モーターの速度を<SPEED>%にする
139
+ %block{:type => "#{category}_#{subcategory}_set_speed"}
140
+ = toolbox_pin_field('D6')
141
+ = toolbox_number_value('SPEED', 100)
138
142
 
139
143
  - category = 'looks'
140
144
  %category{:name => t('.looks')}
@@ -179,35 +183,36 @@
179
183
  -# [▼プリセット画像]
180
184
  -#%block{:type => "#{category}_preset_images"}
181
185
 
182
- - category = 'hardware'
183
- - subcategory = 'led'
184
- -# LED[▼PIN]をオンにする
185
- %block{:type => "#{category}_#{subcategory}_on"}
186
+ - if !raspberrypi?
187
+ - category = 'hardware'
188
+ - subcategory = 'led'
189
+ -# LED[▼PIN]をオンにする
190
+ %block{:type => "#{category}_#{subcategory}_on"}
186
191
 
187
- -# LED[▼PIN]をオフにする
188
- %block{:type => "#{category}_#{subcategory}_off"}
192
+ -# LED[▼PIN]をオフにする
193
+ %block{:type => "#{category}_#{subcategory}_off"}
189
194
 
190
- - subcategory = 'rgb_led'
191
- -# RGB LED[▼アノード]コモン[▼PIN]を[カラー]にする
192
- %block{:type => "#{category}_#{subcategory}_on"}
195
+ - subcategory = 'rgb_led'
196
+ -# RGB LED[▼アノード]コモン[▼PIN]を[カラー]にする
197
+ %block{:type => "#{category}_#{subcategory}_on"}
193
198
 
194
- -# RGB LED[▼アノード]コモン[▼PIN]をオフにする
195
- %block{:type => "#{category}_#{subcategory}_off"}
199
+ -# RGB LED[▼アノード]コモン[▼PIN]をオフにする
200
+ %block{:type => "#{category}_#{subcategory}_off"}
196
201
 
197
- - subcategory = 'seven_segment_display'
198
- -# 7セグディスプレイに[▼0-9]を表示する
199
- %block{:type => "#{category}_#{subcategory}_show"}
202
+ - subcategory = 'seven_segment_display'
203
+ -# 7セグディスプレイに[▼0-9]を表示する
204
+ %block{:type => "#{category}_#{subcategory}_show"}
200
205
 
201
- -# 7セグディスプレイをオフにする
202
- %block{:type => "#{category}_#{subcategory}_off"}
206
+ -# 7セグディスプレイをオフにする
207
+ %block{:type => "#{category}_#{subcategory}_off"}
203
208
 
204
- - subcategory = 'lcd'
205
- -# LCDに( )を表示する
206
- %block{:type => "#{category}_#{subcategory}_puts"}
207
- = toolbox_text_value('TEXT', 'Hello')
209
+ - subcategory = 'lcd'
210
+ -# LCDに( )を表示する
211
+ %block{:type => "#{category}_#{subcategory}_puts"}
212
+ = toolbox_text_value('TEXT', 'Hello')
208
213
 
209
- -# LCDをクリアする
210
- %block{:type => "#{category}_#{subcategory}_clear"}
214
+ -# LCDをクリアする
215
+ %block{:type => "#{category}_#{subcategory}_clear"}
211
216
 
212
217
  - category = 'sound'
213
218
  %category{:name => t('.sound')}
@@ -224,14 +229,15 @@
224
229
 
225
230
  - category = 'pen'
226
231
  %category{:name => t('.pen')}
227
- -# ペンを下ろす
228
- %block{:type => "#{category}_down_pen"}
232
+ - if !raspberrypi?
233
+ -# ペンを下ろす
234
+ %block{:type => "#{category}_down_pen"}
229
235
 
230
- -# ペンを上げる
231
- %block{:type => "#{category}_up_pen"}
236
+ -# ペンを上げる
237
+ %block{:type => "#{category}_up_pen"}
232
238
 
233
- -# ペンの色を[カラー]にする
234
- %block{:type => "#{category}_set_pen_color"}
239
+ -# ペンの色を[カラー]にする
240
+ %block{:type => "#{category}_set_pen_color"}
235
241
 
236
242
  %category{:name => t('.data')}
237
243
  %category{:name => t('.data_variables'), :custom => 'VARIABLE'}
@@ -251,12 +257,13 @@
251
257
  -# [▼キャラクター]にぶつかったとき
252
258
  %block{:type => "#{category}_on_hit"}
253
259
 
254
- - category = 'hardware'
255
- -# センサー[▼PIN]が変化したとき
256
- %block{:type => "#{category}_on_sensor_change"}
260
+ - if !raspberrypi?
261
+ - category = 'hardware'
262
+ -# センサー[▼PIN]が変化したとき
263
+ %block{:type => "#{category}_on_sensor_change"}
257
264
 
258
- -# ボタン[▼PIN]が[▼押された]とき
259
- %block{:type => "#{category}_on_button_down_or_up"}
265
+ -# ボタン[▼PIN]が[▼押された]とき
266
+ %block{:type => "#{category}_on_button_down_or_up"}
260
267
 
261
268
  - category = 'control'
262
269
  %category{:name => t('.control')}
@@ -274,11 +281,12 @@
274
281
  -# 繰り返しから脱出する
275
282
  %block{:type => "#{category}_break"}
276
283
 
277
- -# 次の繰り返しにジャンプする
278
- %block{:type => "#{category}_next"}
284
+ - if !raspberrypi?
285
+ -# 次の繰り返しにジャンプする
286
+ %block{:type => "#{category}_next"}
279
287
 
280
- -# 現在の繰り返しをやり直す
281
- %block{:type => "#{category}_redo"}
288
+ -# 現在の繰り返しをやり直す
289
+ %block{:type => "#{category}_redo"}
282
290
 
283
291
  %category{:name => t('.control_wait')}
284
292
  -# ( )秒待つ
@@ -336,29 +344,31 @@
336
344
  -# 変数:[▼キャラクター]の[▼プロパティ]
337
345
  %block{:type => "#{category}_character_property"}
338
346
 
339
- -# 変数:現在の[▼時]
340
- %block{:type => "#{category}_time_now"}
347
+ - if !raspberrypi?
348
+ -# 変数:現在の[▼時]
349
+ %block{:type => "#{category}_time_now"}
341
350
 
342
- -# 変数:2000年からの日数
343
- -#%block{:type => "#{category}_days_since_2000"}
351
+ -# 変数:2000年からの日数
352
+ %block{:type => "#{category}_days_since_2000"}
344
353
 
345
- - category = 'hardware'
346
- %category{:name => t('.sensing_hardware')}
347
- -# センサー[▼PIN]
348
- %block{:type => "#{category}_sensor_value"}
349
- = toolbox_pin_field('A0')
354
+ - if !raspberrypi?
355
+ - category = 'hardware'
356
+ %category{:name => t('.sensing_hardware')}
357
+ -# センサー[▼PIN]
358
+ %block{:type => "#{category}_sensor_value"}
359
+ = toolbox_pin_field('A0')
350
360
 
351
- -# 条件:ボタン[▼PIN]が[▼押された]
352
- %block{:type => "#{category}_button_down_or_up"}
353
- = toolbox_pin_field('D3')
361
+ -# 条件:ボタン[▼PIN]が[▼押された]
362
+ %block{:type => "#{category}_button_down_or_up"}
363
+ = toolbox_pin_field('D3')
354
364
 
355
- -# 2WD車[▼PIN]の[▼LOR]の速度%
356
- %block{:type => "#{category}_two_wheel_drive_car_speed"}
357
- = toolbox_pin_field('D5')
365
+ -# 2WD車[▼PIN]の[▼LOR]の速度%
366
+ %block{:type => "#{category}_two_wheel_drive_car_speed"}
367
+ = toolbox_pin_field('D5')
358
368
 
359
- -# (モータードライバ[▼PIN]の)モーターの速度(%)
360
- %block{:type => "#{category}_motor_driver_speed"}
361
- = toolbox_pin_field('D6')
369
+ -# (モータードライバ[▼PIN]の)モーターの速度(%)
370
+ %block{:type => "#{category}_motor_driver_speed"}
371
+ = toolbox_pin_field('D6')
362
372
 
363
373
  - category = 'operators'
364
374
  %category{:name => t('.operators')}
@@ -381,19 +391,20 @@
381
391
  = toolbox_number_value('B', 10)
382
392
 
383
393
  -# 変数:( )を( )で割った余り
384
- %block{:type => "#{category}_modulo"}
385
- = toolbox_number_value('A', 5)
386
- = toolbox_number_value('B', 2)
394
+ - if !raspberrypi?
395
+ %block{:type => "#{category}_modulo"}
396
+ = toolbox_number_value('A', 5)
397
+ = toolbox_number_value('B', 2)
387
398
 
388
- -# 変数:( )を丸める
389
- %block{:type => "#{category}_round"}
390
- = toolbox_number_value('A', 0.5)
399
+ -# 変数:( )を丸める
400
+ %block{:type => "#{category}_round"}
401
+ = toolbox_number_value('A', 0.5)
391
402
 
392
- -# 変数:( )の[▼数学関数]
393
- %block{:type => "#{category}_math_method"}
394
- = toolbox_number_value('NUM', 9)
395
- %field{:name => 'METHOD'}<
396
- Math.sqrt(%num%)
403
+ -# 変数:( )の[▼数学関数]
404
+ %block{:type => "#{category}_math_method"}
405
+ = toolbox_number_value('NUM', 9)
406
+ %field{:name => 'METHOD'}<
407
+ Math.sqrt(%num%)
397
408
 
398
409
  -# 数値
399
410
  %block{:type => 'math_number'}
@@ -447,25 +458,26 @@
447
458
  %block{:type => "#{category}_false"}
448
459
 
449
460
  %category{:name => t('.etc')}
450
- - category = 'ruby'
451
- %category{:name => t('.etc_ruby')}
452
- -#
453
- %block{:type => "#{category}_statement"}
461
+ - if !raspberrypi?
462
+ - category = 'ruby'
463
+ %category{:name => t('.etc_ruby')}
464
+ -#
465
+ %block{:type => "#{category}_statement"}
454
466
 
455
- -# 式
456
- %block{:type => "#{category}_expression"}
467
+ -# 式
468
+ %block{:type => "#{category}_expression"}
457
469
 
458
- -# コメント
459
- %block{:type => "#{category}_comment"}
470
+ -# コメント
471
+ %block{:type => "#{category}_comment"}
460
472
 
461
- -# p
462
- %block{:type => "#{category}_p"}
473
+ -# p
474
+ %block{:type => "#{category}_p"}
463
475
 
464
- - category = 'hardware'
465
- %category{:name => t('.etc_hardware')}
466
- -# ハードウェアを準備する
467
- %block{:type => "#{category}_init_hardware"}
476
+ - category = 'hardware'
477
+ %category{:name => t('.etc_hardware')}
478
+ -# ハードウェアを準備する
479
+ %block{:type => "#{category}_init_hardware"}
468
480
 
469
- -# ボタン[▼PIN]のプルアップ抵抗を使わない
470
- %block{:type => "#{category}_button_not_use_pullup"}
471
- = toolbox_pin_field('D3')
481
+ -# ボタン[▼PIN]のプルアップ抵抗を使わない
482
+ %block{:type => "#{category}_button_not_use_pullup"}
483
+ = toolbox_pin_field('D3')
@@ -41,16 +41,16 @@
41
41
  = t('.check')
42
42
  %button#reset-button.btn{class: "btn-primary"}<
43
43
  %i.icon-off
44
- = t('Reset')
44
+ = t('.reset')
45
45
  - if standalone?
46
46
  - if session[:username]
47
47
  %button#signout-button.btn{class: "btn-primary"}<
48
48
  %i.icon-eject
49
- = t('logout')
49
+ = t('.logout')
50
50
  - else
51
51
  %button#signout-button.btn{class: "btn-primary", style: "display: none"}<
52
52
  %i.icon-eject
53
- = t('logout')
53
+ = t('.logout')
54
54
 
55
55
  - else
56
56
  .btn-group
@@ -127,4 +127,4 @@
127
127
 
128
128
  - if raspberrypi?
129
129
  %script{type: "text/javascript"}
130
- $(function() { $('div[id=":7"]').hide(); });
130
+ $(function() { $('div[aria-level="1"][aria-posinset="4"],div[aria-level="1"][aria-posinset="10"]').hide(); });
@@ -10,8 +10,8 @@
10
10
  <meta name="msapplication-square150x150logo" content="square.png" />
11
11
  <meta name="msapplication-wide310x150logo" content="wide.png" />
12
12
  <meta name="msapplication-square310x310logo" content="large.png" />
13
- <%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
14
- <%= javascript_include_tag "application", "data-turbolinks-track" => true %>
13
+ <%= stylesheet_link_tag "application", media: "all" %>
14
+ <%= javascript_include_tag "application" %>
15
15
  <%= javascript_include_tag "blockly/msg/js/#{blockly_message_locale_name}" %>
16
16
  <%= javascript_include_tag "msg/#{blockly_message_locale_name}" %>
17
17
  <%= csrf_meta_tags %>
data/bin/bundle CHANGED
@@ -1,3 +1,3 @@
1
- #!/usr/bin/env ruby.exe
1
+ #!/usr/bin/env ruby
2
2
  ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
3
3
  load Gem.bin_path('bundler', 'bundle')
data/bin/rails CHANGED
@@ -1,4 +1,8 @@
1
- #!/usr/bin/env ruby.exe
1
+ #!/usr/bin/env ruby
2
+ begin
3
+ load File.expand_path('../spring', __FILE__)
4
+ rescue LoadError
5
+ end
2
6
  APP_PATH = File.expand_path('../../config/application', __FILE__)
3
7
  require_relative '../config/boot'
4
8
  require 'rails/commands'
data/bin/rake CHANGED
@@ -1,4 +1,8 @@
1
- #!/usr/bin/env ruby.exe
1
+ #!/usr/bin/env ruby
2
+ begin
3
+ load File.expand_path('../spring', __FILE__)
4
+ rescue LoadError
5
+ end
2
6
  require_relative '../config/boot'
3
7
  require 'rake'
4
8
  Rake.application.run
data/bin/rspec ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ begin
3
+ load File.expand_path('../spring', __FILE__)
4
+ rescue LoadError
5
+ end
6
+ require 'bundler/setup'
7
+ load Gem.bin_path('rspec-core', 'rspec')
data/bin/spring ADDED
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # This file loads spring without using Bundler, in order to be fast
4
+ # It gets overwritten when you run the `spring binstub` command
5
+
6
+ unless defined?(Spring)
7
+ require 'rubygems'
8
+ require 'bundler'
9
+
10
+ re = /^GEM$.*?^ (?: )*spring \((.*?)\)$.*?^$/m
11
+ if (match = Bundler.default_lockfile.read.match(re))
12
+ ENV['GEM_PATH'] =
13
+ ([Bundler.bundle_path.to_s] + Gem.path).join(File::PATH_SEPARATOR)
14
+ ENV['GEM_HOME'] = ''
15
+ Gem.paths = ENV
16
+
17
+ gem 'spring', match[1]
18
+ require 'spring/binstub'
19
+ end
20
+ end
data/bin/teaspoon ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ begin
3
+ load File.expand_path('../spring', __FILE__)
4
+ rescue LoadError
5
+ end
6
+ require 'bundler/setup'
7
+ load Gem.bin_path('teaspoon', 'teaspoon')
@@ -1,3 +1,3 @@
1
- module SmalrubyEditor
2
- VERSION = '0.1.23'
3
- end
1
+ module SmalrubyEditor
2
+ VERSION = '0.1.24'
3
+ end
@@ -61,7 +61,6 @@ Gem::Specification.new do |spec|
61
61
  ['sass-rails', '~> 4.0.0'],
62
62
  ['uglifier', '>= 1.3.0'],
63
63
  ['coffee-rails', '~> 4.0.0'],
64
- ['turbolinks'],
65
64
  ['jbuilder', '~> 2.0'],
66
65
  ['flatstrap-sass'],
67
66
  ['shared-mime-info'],
@@ -77,7 +77,7 @@ describe SourceCode, 'Rubyのソースコードを表現するモデル' do
77
77
  end
78
78
 
79
79
  describe '#summary', 'プログラムの概要を取得する' do
80
- describe 'XML形式'do
80
+ describe 'XML形式' do
81
81
  let(:xml_path) { rb_path + '.xml' }
82
82
  let(:data) { Rails.root.join(xml_path).read }
83
83
  let(:source_code) {
@@ -128,4 +128,91 @@ describe SourceCode, 'Rubyのソースコードを表現するモデル' do
128
128
  end
129
129
  end
130
130
  end
131
+
132
+ describe '#include_block?' do
133
+ describe 'XML形式' do
134
+ let(:data) { Rails.root.join(xml_path).read }
135
+ let(:source_code) {
136
+ SourceCode.new(filename: File.basename(xml_path), data: data)
137
+ }
138
+
139
+ subject { source_code.include_block?(type) }
140
+
141
+ context 'ソースコードにハードウェア関連ブロックを含む場合' do
142
+ let(:xml_path) { 'demos/adjust_2wd_car.rb.xml' }
143
+
144
+ context '引数にhardware_init_hardwareを指定する' do
145
+ let(:type) { 'hardware_init_hardware' }
146
+
147
+ it { should be_true }
148
+ end
149
+
150
+ context '引数にハードウェア関連ブロックを指定する' do
151
+ let(:type) { /^hardware_/ }
152
+
153
+ it { should be_true }
154
+ end
155
+
156
+ context '引数にpen_down_penを指定する' do
157
+ let(:type) { 'pen_down_pen' }
158
+
159
+ it { should be_false }
160
+ end
161
+
162
+ context '引数にペン関連ブロックを指定する' do
163
+ let(:type) { /^pen_/ }
164
+
165
+ it { should be_false }
166
+ end
167
+ end
168
+
169
+ context 'ソースコードにハードウェア関連ブロックを含まない場合' do
170
+ let(:xml_path) { 'demos/star.rb.xml' }
171
+
172
+ context '引数にhardware_init_hardwareを指定する' do
173
+ let(:type) { 'hardware_init_hardware' }
174
+
175
+ it { should be_false }
176
+ end
177
+
178
+ context '引数にハードウェア関連ブロックを指定する' do
179
+ let(:type) { /^hardware_/ }
180
+
181
+ it { should be_false }
182
+ end
183
+
184
+ context '引数にpen_down_penを指定する' do
185
+ let(:type) { 'pen_down_pen' }
186
+
187
+ it { should be_true }
188
+ end
189
+
190
+ context '引数にペン関連ブロックを指定する' do
191
+ let(:type) { /^pen_/ }
192
+
193
+ it { should be_true }
194
+ end
195
+ end
196
+ end
197
+ end
198
+
199
+ describe '#xml?' do
200
+ let(:source_code) {
201
+ SourceCode.new(filename: File.basename(path))
202
+ }
203
+
204
+ subject { source_code.xml? }
205
+
206
+ context 'a' do
207
+ let(:path) { 'car1.rb' }
208
+
209
+ it { should be_false }
210
+ end
211
+
212
+ context 'b' do
213
+ let(:path) { 'car1.rb.xml' }
214
+
215
+ it { should be_true }
216
+ end
217
+ end
131
218
  end
data/spec/spec_helper.rb CHANGED
@@ -1,154 +1,131 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  require 'rubygems'
3
- require 'spork'
4
- # uncomment the following line to use spork with the debugger
5
- # require 'spork/ext/ruby-debug'
6
-
7
- Spork.prefork do
8
- # Loading more in this block will cause your tests to run faster. However,
9
- # if you change any configuration or code from libraries loaded here, you'll
10
- # need to restart spork for it take effect.
11
-
12
- ENV['RAILS_ENV'] ||= 'test'
13
- require File.expand_path('../../config/environment', __FILE__)
14
- require 'rspec/rails'
15
- require 'rspec/autorun'
16
- require 'capybara/dsl'
17
- require 'capybara/rspec'
18
- require 'capybara/poltergeist'
19
- require 'turnip'
20
- require 'turnip/capybara'
21
- require 'simplecov' if ENV['COVERAGE'] || ENV['COVERALLS']
22
-
23
- # Requires supporting ruby files with custom matchers and macros, etc,
24
- # in spec/support/ and its subdirectories.
25
- Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
26
-
27
- # Checks for pending migrations before tests are run.
28
- # If you are not using ActiveRecord, you can remove this line.
29
- ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)
30
-
31
- RSpec.configure do |config|
32
- # ## Mock Framework
33
- #
34
- # If you prefer to use mocha, flexmock or RR, uncomment the
35
- # appropriate line:
36
- #
37
- # config.mock_with :mocha
38
- # config.mock_with :flexmock
39
- # config.mock_with :rr
40
-
41
- # Remove this line if you're not using ActiveRecord or
42
- # ActiveRecord fixtures
43
- config.fixture_path = "#{::Rails.root}/spec/fixtures"
44
-
45
- # If you're not using ActiveRecord, or you'd prefer not to run each of your
46
- # examples within a transaction, remove the following line or assign false
47
- # instead of true.
48
- config.use_transactional_fixtures = false
49
-
50
- # If true, the base class of anonymous controllers will be inferred
51
- # automatically. This will be the default behavior in future versions of
52
- # rspec-rails.
53
- config.infer_base_class_for_anonymous_controllers = false
54
-
55
- # Run specs in random order to surface order dependencies. If you find an
56
- # order dependency and want to debug it, you can fix the order by providing
57
- # the seed, which is printed after each run.
58
- # --seed 1234
59
- config.order = 'random'
60
-
61
- twb = (ENV['TARGET_WEB_BROWZER'] || ENV['TWB']).try(:downcase)
62
- case twb
63
- when 'firefox', 'ie', 'chrome'
64
- Capybara.register_driver :selenium do |app|
65
- opts = { browser: twb.to_sym }
66
-
67
- dir = downloads_dir.to_s
68
- dir.gsub!(File::SEPARATOR, File::ALT_SEPARATOR) if windows?
69
- case twb
70
- when 'firefox'
71
- opts[:profile] = profile = Selenium::WebDriver::Firefox::Profile.new
72
- profile['browser.download.folderList'] = 2 # custom location
73
- profile['browser.download.dir'] = dir
74
- profile['browser.helperApps.neverAsk.saveToDisk'] = 'text/plain'
75
- when 'ie'
76
- opts[:introduce_flakiness_by_ignoring_security_domains] = true
77
- when 'chrome'
78
- FileUtils.mkdir_p(dir)
79
- opts[:prefs] = {
80
- download: {
81
- prompt_for_download: false,
82
- default_directory: dir,
83
- directory_upgrade: true,
84
- }
85
- }
86
-
87
- opts[:switches] =
88
- %w(
89
- --ignore-certificate-errors
90
- --disable-popup-blocking
91
- --disable-translate
92
- )
93
- end
94
3
 
95
- Capybara::Selenium::Driver.new(app, opts)
4
+ ENV['RAILS_ENV'] ||= 'test'
5
+ require File.expand_path('../../config/environment', __FILE__)
6
+ require 'rspec/rails'
7
+ require 'rspec/autorun'
8
+ require 'capybara/dsl'
9
+ require 'capybara/rspec'
10
+ require 'capybara/poltergeist'
11
+ require 'turnip'
12
+ require 'turnip/capybara'
13
+ require 'simplecov' if ENV['COVERAGE'] || ENV['COVERALLS']
14
+
15
+ # Requires supporting ruby files with custom matchers and macros, etc,
16
+ # in spec/support/ and its subdirectories.
17
+ Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
18
+
19
+ # Checks for pending migrations before tests are run.
20
+ # If you are not using ActiveRecord, you can remove this line.
21
+ ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)
22
+
23
+ RSpec.configure do |config|
24
+ # ## Mock Framework
25
+ #
26
+ # If you prefer to use mocha, flexmock or RR, uncomment the
27
+ # appropriate line:
28
+ #
29
+ # config.mock_with :mocha
30
+ # config.mock_with :flexmock
31
+ # config.mock_with :rr
32
+
33
+ # Remove this line if you're not using ActiveRecord or
34
+ # ActiveRecord fixtures
35
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
36
+
37
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
38
+ # examples within a transaction, remove the following line or assign false
39
+ # instead of true.
40
+ config.use_transactional_fixtures = false
41
+
42
+ # If true, the base class of anonymous controllers will be inferred
43
+ # automatically. This will be the default behavior in future versions of
44
+ # rspec-rails.
45
+ config.infer_base_class_for_anonymous_controllers = false
46
+
47
+ # Run specs in random order to surface order dependencies. If you find an
48
+ # order dependency and want to debug it, you can fix the order by providing
49
+ # the seed, which is printed after each run.
50
+ # --seed 1234
51
+ config.order = 'random'
52
+
53
+ twb = (ENV['TARGET_WEB_BROWZER'] || ENV['TWB']).try(:downcase)
54
+ case twb
55
+ when 'firefox', 'ie', 'chrome'
56
+ Capybara.register_driver :selenium do |app|
57
+ opts = { browser: twb.to_sym }
58
+
59
+ dir = downloads_dir.to_s
60
+ dir.gsub!(File::SEPARATOR, File::ALT_SEPARATOR) if windows?
61
+ case twb
62
+ when 'firefox'
63
+ opts[:profile] = profile = Selenium::WebDriver::Firefox::Profile.new
64
+ profile['browser.download.folderList'] = 2 # custom location
65
+ profile['browser.download.dir'] = dir
66
+ profile['browser.helperApps.neverAsk.saveToDisk'] = 'text/plain'
67
+ when 'ie'
68
+ opts[:introduce_flakiness_by_ignoring_security_domains] = true
69
+ when 'chrome'
70
+ FileUtils.mkdir_p(dir)
71
+ opts[:prefs] = {
72
+ download: {
73
+ prompt_for_download: false,
74
+ default_directory: dir,
75
+ directory_upgrade: true,
76
+ }
77
+ }
78
+
79
+ opts[:switches] =
80
+ %w(
81
+ --ignore-certificate-errors
82
+ --disable-popup-blocking
83
+ --disable-translate
84
+ )
96
85
  end
97
- Capybara.javascript_driver = :selenium
98
- else
99
- Capybara.javascript_driver = :poltergeist
100
- Capybara.register_driver(:poltergeist) { |app|
101
- Capybara::Poltergeist::Driver.new(app, timeout: 120)
102
- }
103
- end
104
86
 
105
- config.include JsonSpec::Helpers
106
- config.include ERB::Util, type: :helper
107
- config.include ERB::Util, type: :feature
108
- config.include ActionView::Helpers::JavaScriptHelper, type: :feature
109
-
110
- config.after(javascript: true) do
111
- page.execute_script('window.onbeforeunload = null')
112
- FileUtils.rm_rf(downloads_dir) if selenium?
87
+ Capybara::Selenium::Driver.new(app, opts)
113
88
  end
89
+ Capybara.javascript_driver = :selenium
90
+ else
91
+ Capybara.javascript_driver = :poltergeist
92
+ Capybara.register_driver(:poltergeist) { |app|
93
+ Capybara::Poltergeist::Driver.new(app, timeout: 120)
94
+ }
95
+ end
114
96
 
115
- config.before(javascript: true, standalone: true) do
116
- page.driver.restart
97
+ config.include JsonSpec::Helpers
98
+ config.include ERB::Util, type: :helper
99
+ config.include ERB::Util, type: :feature
100
+ config.include ActionView::Helpers::JavaScriptHelper, type: :feature
117
101
 
118
- @_rails_env = Rails.env
119
- Rails.env = ENV['RAILS_ENV'] = 'standalone'
120
- @_home = ENV['HOME']
121
- @_tmpdir = ENV['HOME'] = Dir.mktmpdir('smalruby-')
122
- end
102
+ config.after(javascript: true) do
103
+ page.execute_script('window.onbeforeunload = null')
104
+ FileUtils.rm_rf(downloads_dir) if selenium?
105
+ end
123
106
 
124
- config.after(javascript: true, standalone: true) do
125
- FileUtils.remove_entry_secure(@_tmpdir)
126
- ENV['HOME'] = @_home
127
- Rails.env = ENV['RAILS_ENV'] = @_rails_env
107
+ config.before(javascript: true, standalone: true) do
108
+ page.driver.restart
128
109
 
129
- page.driver.restart
130
- end
110
+ @_rails_env = Rails.env
111
+ Rails.env = ENV['RAILS_ENV'] = 'standalone'
112
+ @_home = ENV['HOME']
113
+ @_tmpdir = ENV['HOME'] = Dir.mktmpdir('smalruby-')
114
+ end
131
115
 
132
- config.before :suite do
133
- DatabaseRewinder.clean_all
134
- end
116
+ config.after(javascript: true, standalone: true) do
117
+ FileUtils.remove_entry_secure(@_tmpdir)
118
+ ENV['HOME'] = @_home
119
+ Rails.env = ENV['RAILS_ENV'] = @_rails_env
135
120
 
136
- config.after :each do
137
- DatabaseRewinder.clean
138
- end
121
+ page.driver.restart
139
122
  end
140
- end
141
-
142
- Spork.each_run do
143
- # This code will be run each time you run your specs.
144
123
 
145
- # http://penguinlab.jp/blog/post/2256# より
146
- if Spork.using_spork?
147
- # app 下のファイル / locale / routes をリロード
148
- # railties-3.2.3/lib/rails/application/finisher.rb あたりを参考に
149
- Rails.application.reloaders.each { |reloader| reloader.execute_if_updated }
124
+ config.before :suite do
125
+ DatabaseRewinder.clean_all
126
+ end
150
127
 
151
- # machinist gem を利用してる場合、blueprints を再度読み直す
152
- # load "#{File.dirname(__FILE__)}/support/blueprints.rb"
128
+ config.after :each do
129
+ DatabaseRewinder.clean
153
130
  end
154
131
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smalruby-editor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.23
4
+ version: 0.1.24
5
5
  platform: x86-mingw32
6
6
  authors:
7
7
  - Kouji Takao
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-09 00:00:00.000000000 Z
11
+ date: 2015-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -80,20 +80,6 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: 4.0.0
83
- - !ruby/object:Gem::Dependency
84
- name: turbolinks
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: jbuilder
99
85
  requirement: !ruby/object:Gem::Requirement
@@ -252,6 +238,7 @@ files:
252
238
  - ".ruby-version"
253
239
  - ".simplecov"
254
240
  - ".travis.yml"
241
+ - Guardfile
255
242
  - LEGAL
256
243
  - LICENSE
257
244
  - Procfile
@@ -403,7 +390,10 @@ files:
403
390
  - bin/bundle
404
391
  - bin/rails
405
392
  - bin/rake
393
+ - bin/rspec
406
394
  - bin/smalruby-editor
395
+ - bin/spring
396
+ - bin/teaspoon
407
397
  - config.ru
408
398
  - config/application.rb
409
399
  - config/boot.rb
@@ -450,10 +440,10 @@ files:
450
440
  - public/422.html
451
441
  - public/500.html
452
442
  - public/apple-touch-icon.png
453
- - public/assets/application-92fb2e7b8dd198fbfae7f8451c891ba2.css
454
- - public/assets/application-92fb2e7b8dd198fbfae7f8451c891ba2.css.gz
455
- - public/assets/application-e3cd434424f565fcebf7d7d13353536f.js
456
- - public/assets/application-e3cd434424f565fcebf7d7d13353536f.js.gz
443
+ - public/assets/application-d5358d75a2c4e570c749b333c59b55ab.css
444
+ - public/assets/application-d5358d75a2c4e570c749b333c59b55ab.css.gz
445
+ - public/assets/application-fda71a642d958ffbaf90185c471d6e51.js
446
+ - public/assets/application-fda71a642d958ffbaf90185c471d6e51.js.gz
457
447
  - public/assets/blockly/msg/js/en_us-6f7333af29688596ef863fa36a22cb41.js
458
448
  - public/assets/blockly/msg/js/en_us-6f7333af29688596ef863fa36a22cb41.js.gz
459
449
  - public/assets/blockly/msg/js/ja-d2cbf808bda8180571bc5f39141a98fe.js
@@ -474,11 +464,11 @@ files:
474
464
  - public/assets/jquery-ui/ui-icons_888888_256x240-ce584ffa171c3ea9a018cf0d7bec65c8.png
475
465
  - public/assets/jquery-ui/ui-icons_cd0a0a_256x240-747e96029e8dedcabc224e5f7d1f2ede.png
476
466
  - public/assets/loading-e77296be32d066d3e29d3bf9803fa417.gif
477
- - public/assets/manifest-6094ee90554fe1d9bb1a229d8daa16d7.json
467
+ - public/assets/manifest-1a9856df207640ec658271db34b30dbb.json
478
468
  - public/assets/msg/en_us-893d970ff8061fbe7459f009582c4df5.js
479
469
  - public/assets/msg/en_us-893d970ff8061fbe7459f009582c4df5.js.gz
480
- - public/assets/msg/ja-8f29832e96564fb7a0c2280c4d4390b8.js
481
- - public/assets/msg/ja-8f29832e96564fb7a0c2280c4d4390b8.js.gz
470
+ - public/assets/msg/ja-4d22bd0341f464f9d1b9f373121bce6d.js
471
+ - public/assets/msg/ja-4d22bd0341f464f9d1b9f373121bce6d.js.gz
482
472
  - public/assets/progressbar-ee8fb1222f286f625bbf7332844a6a0c.gif
483
473
  - public/blockly/media/1x1.gif
484
474
  - public/blockly/media/click.mp3