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 +4 -4
- data/.rspec +0 -1
- data/.rubocop.yml +4 -0
- data/.ruby-version +1 -1
- data/.travis.yml +1 -1
- data/Guardfile +45 -0
- data/app/assets/javascripts/application.js +0 -1
- data/app/assets/javascripts/msg/ja.js +1 -1
- data/app/assets/stylesheets/toolbox.css.scss.erb +1 -16
- data/app/controllers/source_codes_controller.rb +12 -7
- data/app/models/source_code.rb +34 -1
- data/app/views/editor/_toolbox.html.haml +155 -143
- data/app/views/editor/index.html.haml +4 -4
- data/app/views/layouts/application.html.erb +2 -2
- data/bin/bundle +1 -1
- data/bin/rails +5 -1
- data/bin/rake +5 -1
- data/bin/rspec +7 -0
- data/bin/spring +20 -0
- data/bin/teaspoon +7 -0
- data/lib/smalruby_editor/version.rb +3 -3
- data/smalruby-editor.gemspec +0 -1
- data/spec/models/source_code_spec.rb +88 -1
- data/spec/spec_helper.rb +114 -137
- metadata +13 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 42f6d2af5f4f6c84ae004c8ce00075e298c78d2f
|
4
|
+
data.tar.gz: 850e6b965ebdd14beccf80b57e49295dda964d2c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fadf35fb278a419515c9d8b4ac222d0bbfbf2f82cbb515d1a0619a38b2c4001684aef925ecd702232b4e041f030577a9dc544e191149cffe6879b05c66850fed
|
7
|
+
data.tar.gz: 21cb579247d0979cf0be7ce503207f3ba35f2ce42a80b61a9330c320672ed1429722db5d866b44694d2a81a47c7b46d2d933b5c3c91d21de31458d612c879268
|
data/.rspec
CHANGED
data/.rubocop.yml
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.1.
|
1
|
+
2.1.5
|
data/.travis.yml
CHANGED
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
|
@@ -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
|
-
|
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] =
|
14
|
-
|
15
|
-
}
|
20
|
+
res[:localPrograms] =
|
21
|
+
local_program_paths.map(&select_and_get_summary).compact
|
16
22
|
end
|
17
23
|
|
18
|
-
|
19
|
-
|
20
|
-
|
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
|
data/app/models/source_code.rb
CHANGED
@@ -67,7 +67,7 @@ class SourceCode < ActiveRecord::Base
|
|
67
67
|
# ソースコードの概要を取得する
|
68
68
|
def summary
|
69
69
|
res = {}
|
70
|
-
if
|
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
|
-
|
43
|
+
- if !raspberrypi?
|
44
|
+
%block{:type => "#{category}_self_x"}
|
44
45
|
|
45
46
|
-# 変数:y座標
|
46
|
-
|
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
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
%
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
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
|
-
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
+
- if !raspberrypi?
|
187
|
+
- category = 'hardware'
|
188
|
+
- subcategory = 'led'
|
189
|
+
-# LED[▼PIN]をオンにする
|
190
|
+
%block{:type => "#{category}_#{subcategory}_on"}
|
186
191
|
|
187
|
-
|
188
|
-
|
192
|
+
-# LED[▼PIN]をオフにする
|
193
|
+
%block{:type => "#{category}_#{subcategory}_off"}
|
189
194
|
|
190
|
-
|
191
|
-
|
192
|
-
|
195
|
+
- subcategory = 'rgb_led'
|
196
|
+
-# RGB LED[▼アノード]コモン[▼PIN]を[カラー]にする
|
197
|
+
%block{:type => "#{category}_#{subcategory}_on"}
|
193
198
|
|
194
|
-
|
195
|
-
|
199
|
+
-# RGB LED[▼アノード]コモン[▼PIN]をオフにする
|
200
|
+
%block{:type => "#{category}_#{subcategory}_off"}
|
196
201
|
|
197
|
-
|
198
|
-
|
199
|
-
|
202
|
+
- subcategory = 'seven_segment_display'
|
203
|
+
-# 7セグディスプレイに[▼0-9]を表示する
|
204
|
+
%block{:type => "#{category}_#{subcategory}_show"}
|
200
205
|
|
201
|
-
|
202
|
-
|
206
|
+
-# 7セグディスプレイをオフにする
|
207
|
+
%block{:type => "#{category}_#{subcategory}_off"}
|
203
208
|
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
209
|
+
- subcategory = 'lcd'
|
210
|
+
-# LCDに( )を表示する
|
211
|
+
%block{:type => "#{category}_#{subcategory}_puts"}
|
212
|
+
= toolbox_text_value('TEXT', 'Hello')
|
208
213
|
|
209
|
-
|
210
|
-
|
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
|
-
|
232
|
+
- if !raspberrypi?
|
233
|
+
-# ペンを下ろす
|
234
|
+
%block{:type => "#{category}_down_pen"}
|
229
235
|
|
230
|
-
|
231
|
-
|
236
|
+
-# ペンを上げる
|
237
|
+
%block{:type => "#{category}_up_pen"}
|
232
238
|
|
233
|
-
|
234
|
-
|
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
|
-
-
|
255
|
-
|
256
|
-
|
260
|
+
- if !raspberrypi?
|
261
|
+
- category = 'hardware'
|
262
|
+
-# センサー[▼PIN]が変化したとき
|
263
|
+
%block{:type => "#{category}_on_sensor_change"}
|
257
264
|
|
258
|
-
|
259
|
-
|
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
|
-
|
284
|
+
- if !raspberrypi?
|
285
|
+
-# 次の繰り返しにジャンプする
|
286
|
+
%block{:type => "#{category}_next"}
|
279
287
|
|
280
|
-
|
281
|
-
|
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
|
-
|
347
|
+
- if !raspberrypi?
|
348
|
+
-# 変数:現在の[▼時]
|
349
|
+
%block{:type => "#{category}_time_now"}
|
341
350
|
|
342
|
-
|
343
|
-
|
351
|
+
-# 変数:2000年からの日数
|
352
|
+
%block{:type => "#{category}_days_since_2000"}
|
344
353
|
|
345
|
-
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
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
|
-
|
352
|
-
|
353
|
-
|
361
|
+
-# 条件:ボタン[▼PIN]が[▼押された]
|
362
|
+
%block{:type => "#{category}_button_down_or_up"}
|
363
|
+
= toolbox_pin_field('D3')
|
354
364
|
|
355
|
-
|
356
|
-
|
357
|
-
|
365
|
+
-# 2WD車[▼PIN]の[▼LOR]の速度%
|
366
|
+
%block{:type => "#{category}_two_wheel_drive_car_speed"}
|
367
|
+
= toolbox_pin_field('D5')
|
358
368
|
|
359
|
-
|
360
|
-
|
361
|
-
|
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
|
-
|
385
|
-
|
386
|
-
|
394
|
+
- if !raspberrypi?
|
395
|
+
%block{:type => "#{category}_modulo"}
|
396
|
+
= toolbox_number_value('A', 5)
|
397
|
+
= toolbox_number_value('B', 2)
|
387
398
|
|
388
|
-
|
389
|
-
|
390
|
-
|
399
|
+
-# 変数:( )を丸める
|
400
|
+
%block{:type => "#{category}_round"}
|
401
|
+
= toolbox_number_value('A', 0.5)
|
391
402
|
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
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
|
-
-
|
451
|
-
|
452
|
-
|
453
|
-
|
461
|
+
- if !raspberrypi?
|
462
|
+
- category = 'ruby'
|
463
|
+
%category{:name => t('.etc_ruby')}
|
464
|
+
-# 文
|
465
|
+
%block{:type => "#{category}_statement"}
|
454
466
|
|
455
|
-
|
456
|
-
|
467
|
+
-# 式
|
468
|
+
%block{:type => "#{category}_expression"}
|
457
469
|
|
458
|
-
|
459
|
-
|
470
|
+
-# コメント
|
471
|
+
%block{:type => "#{category}_comment"}
|
460
472
|
|
461
|
-
|
462
|
-
|
473
|
+
-# p
|
474
|
+
%block{:type => "#{category}_p"}
|
463
475
|
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
476
|
+
- category = 'hardware'
|
477
|
+
%category{:name => t('.etc_hardware')}
|
478
|
+
-# ハードウェアを準備する
|
479
|
+
%block{:type => "#{category}_init_hardware"}
|
468
480
|
|
469
|
-
|
470
|
-
|
471
|
-
|
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('
|
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[
|
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"
|
14
|
-
<%= javascript_include_tag "application"
|
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
data/bin/rails
CHANGED
data/bin/rake
CHANGED
data/bin/rspec
ADDED
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
@@ -1,3 +1,3 @@
|
|
1
|
-
module SmalrubyEditor
|
2
|
-
VERSION =
|
3
|
-
end
|
1
|
+
module SmalrubyEditor
|
2
|
+
VERSION = '0.1.24'
|
3
|
+
end
|
data/smalruby-editor.gemspec
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
116
|
-
|
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
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
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
|
-
|
125
|
-
|
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
|
-
|
130
|
-
|
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
|
-
|
133
|
-
|
134
|
-
|
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
|
-
|
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
|
-
|
146
|
-
|
147
|
-
|
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
|
-
|
152
|
-
|
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.
|
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-
|
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-
|
454
|
-
- public/assets/application-
|
455
|
-
- public/assets/application-
|
456
|
-
- public/assets/application-
|
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-
|
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-
|
481
|
-
- public/assets/msg/ja-
|
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
|