smalruby-editor 0.1.23-x86-mingw32 → 0.1.24-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.

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