smalruby-editor 0.3.5 → 0.4.0

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.

Files changed (366) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -0
  3. data/.rspec +0 -0
  4. data/.rubocop.yml +1 -0
  5. data/.simplecov +7 -7
  6. data/.travis.yml +0 -0
  7. data/Guardfile +1 -1
  8. data/LICENSE +0 -0
  9. data/Procfile +1 -1
  10. data/Rakefile +0 -0
  11. data/app/assets/images/.keep +0 -0
  12. data/app/assets/images/favicon.ico +0 -0
  13. data/app/assets/javascripts/blocks/blockly.js.coffee.erb +0 -0
  14. data/app/assets/javascripts/blocks/character.js.coffee.erb +3 -0
  15. data/app/assets/javascripts/blocks/data.js.coffee.erb +0 -0
  16. data/app/assets/javascripts/blocks/etc.js.coffee.erb +0 -0
  17. data/app/assets/javascripts/blocks/field_character.js.coffee.erb +13 -1
  18. data/app/assets/javascripts/blocks/field_costume.js.coffee.erb +84 -0
  19. data/app/assets/javascripts/blocks/hardware.js.coffee.erb +26 -0
  20. data/app/assets/javascripts/blocks/looks.js.coffee.erb +32 -0
  21. data/app/assets/javascripts/collections/.keep +0 -0
  22. data/app/assets/javascripts/collections/character_set.js.coffee +0 -0
  23. data/app/assets/javascripts/generators/ruby.js.coffee.erb +10 -1
  24. data/app/assets/javascripts/models/.keep +0 -0
  25. data/app/assets/javascripts/models/character.js.coffee +45 -6
  26. data/app/assets/javascripts/models/scene.js.coffee +0 -0
  27. data/app/assets/javascripts/msg/en_us.js +4 -0
  28. data/app/assets/javascripts/msg/ja.js +4 -0
  29. data/app/assets/javascripts/routers/.keep +0 -0
  30. data/app/assets/javascripts/smalruby.js.coffee.erb +5 -1
  31. data/app/assets/javascripts/views/.keep +0 -0
  32. data/app/assets/javascripts/views/character_modal_view.js.coffee.erb +357 -0
  33. data/app/assets/javascripts/views/character_selector_view.js.coffee +2 -0
  34. data/app/assets/stylesheets/editor.css.scss +201 -16
  35. data/app/assets/stylesheets/flatstrap-custom.css.scss +0 -0
  36. data/app/assets/stylesheets/load-modal.css.scss +0 -0
  37. data/app/assets/templates/.keep +0 -0
  38. data/app/controllers/application_controller.rb +8 -2
  39. data/app/controllers/concerns/.keep +0 -0
  40. data/app/controllers/costumes_controller.rb +58 -0
  41. data/app/controllers/editor_controller.rb +2 -0
  42. data/app/helpers/costumes_helper.rb +2 -0
  43. data/app/helpers/editor_helper.rb +0 -0
  44. data/app/helpers/sessions_helper.rb +0 -4
  45. data/app/mailers/.keep +0 -0
  46. data/app/models/.keep +0 -0
  47. data/app/models/concerns/.keep +0 -0
  48. data/app/models/concerns/ruby_to_block.rb +0 -0
  49. data/app/models/concerns/ruby_to_block/block.rb +0 -0
  50. data/app/models/concerns/ruby_to_block/block/base.rb +2 -0
  51. data/app/models/concerns/ruby_to_block/block/character.rb +32 -11
  52. data/app/models/concerns/ruby_to_block/block/character_event.rb +0 -0
  53. data/app/models/concerns/ruby_to_block/block/character_method_call.rb +0 -0
  54. data/app/models/concerns/ruby_to_block/block/character_new.rb +0 -0
  55. data/app/models/concerns/ruby_to_block/block/character_operation.rb +0 -0
  56. data/app/models/concerns/ruby_to_block/block/control_beark.rb +0 -0
  57. data/app/models/concerns/ruby_to_block/block/control_if.rb +0 -0
  58. data/app/models/concerns/ruby_to_block/block/control_loop.rb +0 -0
  59. data/app/models/concerns/ruby_to_block/block/control_sleep.rb +0 -0
  60. data/app/models/concerns/ruby_to_block/block/do.rb +0 -0
  61. data/app/models/concerns/ruby_to_block/block/else.rb +0 -0
  62. data/app/models/concerns/ruby_to_block/block/end.rb +0 -0
  63. data/app/models/concerns/ruby_to_block/block/events_on_click.rb +0 -0
  64. data/app/models/concerns/ruby_to_block/block/events_on_key_push_or_down.rb +0 -0
  65. data/app/models/concerns/ruby_to_block/block/events_on_start.rb +0 -0
  66. data/app/models/concerns/ruby_to_block/block/hardware_button_pressed_or_released.rb +0 -0
  67. data/app/models/concerns/ruby_to_block/block/hardware_init_hardware.rb +0 -0
  68. data/app/models/concerns/ruby_to_block/block/hardware_led_turn_off.rb +0 -0
  69. data/app/models/concerns/ruby_to_block/block/hardware_led_turn_on.rb +0 -0
  70. data/app/models/concerns/ruby_to_block/block/hardware_motor_driver.rb +0 -0
  71. data/app/models/concerns/ruby_to_block/block/hardware_motor_driver_set_speed.rb +0 -0
  72. data/app/models/concerns/ruby_to_block/block/hardware_motor_driver_speed.rb +0 -0
  73. data/app/models/concerns/ruby_to_block/block/hardware_neo_pixel_set_rgb.rb +31 -0
  74. data/app/models/concerns/ruby_to_block/block/hardware_rgb_led_set_color.rb +0 -0
  75. data/app/models/concerns/ruby_to_block/block/hardware_rgb_led_turn_off.rb +0 -0
  76. data/app/models/concerns/ruby_to_block/block/hardware_sensor_value.rb +0 -0
  77. data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car.rb +0 -0
  78. data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car_commands.rb +0 -0
  79. data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car_run.rb +0 -0
  80. data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car_set_speed.rb +0 -0
  81. data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car_speed.rb +0 -0
  82. data/app/models/concerns/ruby_to_block/block/looks_hide.rb +0 -0
  83. data/app/models/concerns/ruby_to_block/block/looks_next_costume.rb +12 -0
  84. data/app/models/concerns/ruby_to_block/block/looks_say.rb +0 -0
  85. data/app/models/concerns/ruby_to_block/block/looks_show.rb +0 -0
  86. data/app/models/concerns/ruby_to_block/block/looks_switch_costume.rb +22 -0
  87. data/app/models/concerns/ruby_to_block/block/looks_vanish.rb +0 -0
  88. data/app/models/concerns/ruby_to_block/block/math_number.rb +0 -0
  89. data/app/models/concerns/ruby_to_block/block/motion_change_x_by.rb +0 -0
  90. data/app/models/concerns/ruby_to_block/block/motion_change_y_by.rb +0 -0
  91. data/app/models/concerns/ruby_to_block/block/motion_go_to_character.rb +0 -0
  92. data/app/models/concerns/ruby_to_block/block/motion_go_to_mouse.rb +0 -0
  93. data/app/models/concerns/ruby_to_block/block/motion_move.rb +0 -0
  94. data/app/models/concerns/ruby_to_block/block/motion_point_towards_character.rb +0 -0
  95. data/app/models/concerns/ruby_to_block/block/motion_point_towards_mouse.rb +0 -0
  96. data/app/models/concerns/ruby_to_block/block/motion_rotate_left.rb +0 -0
  97. data/app/models/concerns/ruby_to_block/block/motion_rotate_right.rb +0 -0
  98. data/app/models/concerns/ruby_to_block/block/motion_self_angle.rb +0 -0
  99. data/app/models/concerns/ruby_to_block/block/motion_self_x.rb +0 -0
  100. data/app/models/concerns/ruby_to_block/block/motion_self_y.rb +0 -0
  101. data/app/models/concerns/ruby_to_block/block/motion_set_angle.rb +0 -0
  102. data/app/models/concerns/ruby_to_block/block/motion_set_x.rb +0 -0
  103. data/app/models/concerns/ruby_to_block/block/motion_set_x_y.rb +0 -0
  104. data/app/models/concerns/ruby_to_block/block/motion_set_y.rb +0 -0
  105. data/app/models/concerns/ruby_to_block/block/motion_turn.rb +0 -0
  106. data/app/models/concerns/ruby_to_block/block/motion_turn_if_reach_wall.rb +0 -0
  107. data/app/models/concerns/ruby_to_block/block/motion_turn_xy.rb +0 -0
  108. data/app/models/concerns/ruby_to_block/block/null.rb +0 -0
  109. data/app/models/concerns/ruby_to_block/block/operators_compare.rb +0 -0
  110. data/app/models/concerns/ruby_to_block/block/operators_false.rb +0 -0
  111. data/app/models/concerns/ruby_to_block/block/operators_true.rb +0 -0
  112. data/app/models/concerns/ruby_to_block/block/require_smalruby.rb +0 -0
  113. data/app/models/concerns/ruby_to_block/block/ruby_comment.rb +0 -0
  114. data/app/models/concerns/ruby_to_block/block/ruby_expression.rb +0 -0
  115. data/app/models/concerns/ruby_to_block/block/ruby_p.rb +0 -0
  116. data/app/models/concerns/ruby_to_block/block/ruby_statement.rb +0 -0
  117. data/app/models/concerns/ruby_to_block/block/sensing_hit.rb +0 -0
  118. data/app/models/concerns/ruby_to_block/block/sensing_reach_wall.rb +0 -0
  119. data/app/models/concerns/ruby_to_block/block/sound_play.rb +0 -0
  120. data/app/models/concerns/ruby_to_block/block/sound_preset_sounds.rb +0 -0
  121. data/app/models/concerns/ruby_to_block/block/text.rb +0 -0
  122. data/app/models/concerns/ruby_to_block/block/value.rb +0 -0
  123. data/app/models/concerns/ruby_to_block/context.rb +0 -0
  124. data/app/models/concerns/ruby_to_block/formatter.rb +0 -0
  125. data/app/models/costume.rb +67 -0
  126. data/app/models/source_code.rb +9 -1
  127. data/app/models/user.rb +7 -0
  128. data/app/views/costumes/index.html.haml +19 -0
  129. data/app/views/editor/_character_modal.html.haml +35 -7
  130. data/app/views/editor/_toolbox_default.html.haml +9 -0
  131. data/app/views/editor/demo.html.erb +0 -0
  132. data/app/views/editor/index.html.haml +1 -0
  133. data/bin/smalruby-editor +1 -0
  134. data/bin/spring +7 -9
  135. data/config.ru +0 -0
  136. data/config/boot.rb +0 -0
  137. data/config/database.yml.mysql2 +0 -0
  138. data/config/database.yml.sqlite3 +0 -0
  139. data/config/database.yml.travis +0 -0
  140. data/config/environment.rb +0 -0
  141. data/config/environments/development.rb +0 -0
  142. data/config/environments/production.rb +0 -0
  143. data/config/environments/standalone.rb +0 -0
  144. data/config/environments/test.rb +0 -0
  145. data/config/initializers/backtrace_silencers.rb +0 -0
  146. data/config/initializers/filter_parameter_logging.rb +0 -0
  147. data/config/initializers/inflections.rb +0 -0
  148. data/config/initializers/mime_types.rb +0 -0
  149. data/config/initializers/secret_token.rb +0 -0
  150. data/config/initializers/session_store.rb +0 -0
  151. data/config/initializers/teaspoon.rb +0 -0
  152. data/config/initializers/wrap_parameters.rb +0 -0
  153. data/config/locales/en.yml +10 -1
  154. data/config/locales/ja.yml +10 -0
  155. data/config/routes.rb +2 -0
  156. data/config/unicorn.rb +23 -23
  157. data/db/migrate/20131216121603_create_source_codes.rb +0 -0
  158. data/db/migrate/20131219045113_add_filename_to_source_code.rb +0 -0
  159. data/db/migrate/20150513061250_add_index_name_on_users.rb +1 -1
  160. data/db/migrate/20150607012053_create_costumes.rb +12 -0
  161. data/db/migrate/20150607012707_add_indexes_on_costumes.rb +13 -0
  162. data/db/migrate/20150607034013_acts_as_taggable_on_migration.acts_as_taggable_on_engine.rb +31 -0
  163. data/db/migrate/20150607034014_add_missing_unique_indices.acts_as_taggable_on_engine.rb +21 -0
  164. data/db/migrate/20150607034015_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb +15 -0
  165. data/db/migrate/20150607034016_add_missing_taggable_index.acts_as_taggable_on_engine.rb +10 -0
  166. data/db/migrate/20150607034017_change_collation_for_tag_names.acts_as_taggable_on_engine.rb +12 -0
  167. data/db/migrate/20150607034018_insert_preset_costumes.rb +9 -0
  168. data/db/schema.rb +35 -2
  169. data/db/seeds.rb +2 -0
  170. data/demos/car_chase.rb.xml +128 -128
  171. data/demos/pong.rb.xml +379 -379
  172. data/demos/star.rb.xml +115 -115
  173. data/lib/assets/.keep +0 -0
  174. data/lib/smalruby_editor/version.rb +1 -1
  175. data/lib/tasks/.keep +0 -0
  176. data/lib/tasks/gem.rake +0 -0
  177. data/lib/tasks/rspec.rake +0 -0
  178. data/lib/tasks/rubocop.rake +0 -0
  179. data/log/.keep +0 -0
  180. data/public/404.html +0 -0
  181. data/public/422.html +0 -0
  182. data/public/500.html +0 -0
  183. data/public/apple-touch-icon.png +0 -0
  184. data/public/blockly/media/1x1.gif +0 -0
  185. data/public/blockly/media/click.mp3 +0 -0
  186. data/public/blockly/media/click.ogg +0 -0
  187. data/public/blockly/media/click.wav +0 -0
  188. data/public/blockly/media/delete.mp3 +0 -0
  189. data/public/blockly/media/delete.ogg +0 -0
  190. data/public/blockly/media/delete.wav +0 -0
  191. data/public/blockly/media/handopen.cur +0 -0
  192. data/public/blockly/media/quote0.png +0 -0
  193. data/public/blockly/media/quote1.png +0 -0
  194. data/public/browserconfig.xml +0 -0
  195. data/public/fonts/FontAwesome.otf +0 -0
  196. data/public/fonts/fontawesome-webfont.eot +0 -0
  197. data/public/fonts/fontawesome-webfont.ttf +0 -0
  198. data/public/fonts/fontawesome-webfont.woff +0 -0
  199. data/public/large.png +0 -0
  200. data/public/robots.txt +0 -0
  201. data/public/smalruby/assets/ball1.png +0 -0
  202. data/public/smalruby/assets/ball2.png +0 -0
  203. data/public/smalruby/assets/ball3.png +0 -0
  204. data/public/smalruby/assets/ball4.png +0 -0
  205. data/public/smalruby/assets/ball5.png +0 -0
  206. data/public/smalruby/assets/ball6.png +0 -0
  207. data/public/smalruby/assets/car1.png +0 -0
  208. data/public/smalruby/assets/car2.png +0 -0
  209. data/public/smalruby/assets/car3.png +0 -0
  210. data/public/smalruby/assets/car4.png +0 -0
  211. data/public/smalruby/assets/cat1.png +0 -0
  212. data/public/smalruby/assets/cat2.png +0 -0
  213. data/public/smalruby/assets/cat3.png +0 -0
  214. data/public/smalruby/assets/frog1.png +0 -0
  215. data/public/smalruby/assets/piano_do.wav +0 -0
  216. data/public/smalruby/assets/piano_do_2.wav +0 -0
  217. data/public/smalruby/assets/piano_fa.wav +0 -0
  218. data/public/smalruby/assets/piano_mi.wav +0 -0
  219. data/public/smalruby/assets/piano_ra.wav +0 -0
  220. data/public/smalruby/assets/piano_re.wav +0 -0
  221. data/public/smalruby/assets/piano_si.wav +0 -0
  222. data/public/smalruby/assets/piano_so.wav +0 -0
  223. data/public/smalruby/assets/ryu1.png +0 -0
  224. data/public/smalruby/assets/ryu2.png +0 -0
  225. data/public/smalruby/assets/taichi1.png +0 -0
  226. data/public/smalruby/assets/taichi2.png +0 -0
  227. data/public/square.png +0 -0
  228. data/public/tiny.png +0 -0
  229. data/public/wide.png +0 -0
  230. data/smalruby-editor.gemspec +2 -1
  231. data/spec/acceptance/block_mode/blocks/character/new.feature +5 -5
  232. data/spec/acceptance/block_mode/blocks/control/await.feature +2 -2
  233. data/spec/acceptance/block_mode/blocks/control/await_until.feature +3 -3
  234. data/spec/acceptance/block_mode/blocks/control/break.feature +0 -0
  235. data/spec/acceptance/block_mode/blocks/control/if.feature +0 -0
  236. data/spec/acceptance/block_mode/blocks/control/if_else.feature +0 -0
  237. data/spec/acceptance/block_mode/blocks/control/loop.feature +0 -0
  238. data/spec/acceptance/block_mode/blocks/control/next.feature +0 -0
  239. data/spec/acceptance/block_mode/blocks/control/redo.feature +0 -0
  240. data/spec/acceptance/block_mode/blocks/control/sleep.feature +0 -0
  241. data/spec/acceptance/block_mode/blocks/control/times.feature +0 -0
  242. data/spec/acceptance/block_mode/blocks/control/until.feature +0 -0
  243. data/spec/acceptance/block_mode/blocks/events/on_click.feature +2 -2
  244. data/spec/acceptance/block_mode/blocks/events/on_hit.feature +4 -4
  245. data/spec/acceptance/block_mode/blocks/events/on_key_push_or_down.feature +4 -4
  246. data/spec/acceptance/block_mode/blocks/events/on_start.feature +2 -2
  247. data/spec/acceptance/block_mode/blocks/hardware/init_hardware.feature +1 -1
  248. data/spec/acceptance/block_mode/blocks/hardware/led_turn_off.feature +2 -2
  249. data/spec/acceptance/block_mode/blocks/hardware/led_turn_on.feature +2 -2
  250. data/spec/acceptance/block_mode/blocks/hardware/motor_driver.feature +0 -0
  251. data/spec/acceptance/block_mode/blocks/hardware/motor_driver_speed.feature +0 -0
  252. data/spec/acceptance/block_mode/blocks/hardware/neo_pixel_set_rgb.feature +100 -0
  253. data/spec/acceptance/block_mode/blocks/hardware/rgb_led_set_color.feature +0 -0
  254. data/spec/acceptance/block_mode/blocks/hardware/rgb_led_turn_off.feature +0 -0
  255. data/spec/acceptance/block_mode/blocks/hardware/sensor_value.feature +0 -0
  256. data/spec/acceptance/block_mode/blocks/hardware/servo_set_position.feature +0 -0
  257. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_s1_action_with_sec.feature +1 -1
  258. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_s1_led_turn_on_or_off.feature +1 -1
  259. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_v3_action_with_sec.feature +1 -1
  260. data/spec/acceptance/block_mode/blocks/hardware/two_wheel_drive_car.feature +0 -0
  261. data/spec/acceptance/block_mode/blocks/hardware/two_wheel_drive_car_speed.feature +0 -0
  262. data/spec/acceptance/block_mode/blocks/looks/hide.feature +2 -2
  263. data/spec/acceptance/block_mode/blocks/looks/next_costume.feature +56 -0
  264. data/spec/acceptance/block_mode/blocks/looks/say.feature +3 -3
  265. data/spec/acceptance/block_mode/blocks/looks/show.feature +2 -2
  266. data/spec/acceptance/block_mode/blocks/looks/vanish.feature +2 -2
  267. data/spec/acceptance/block_mode/blocks/motion/change_x_by.feature +2 -2
  268. data/spec/acceptance/block_mode/blocks/motion/change_y_by.feature +2 -2
  269. data/spec/acceptance/block_mode/blocks/motion/move.feature +2 -2
  270. data/spec/acceptance/block_mode/blocks/motion/reach_wall.feature +2 -2
  271. data/spec/acceptance/block_mode/blocks/motion/rotate_left.feature +2 -2
  272. data/spec/acceptance/block_mode/blocks/motion/rotate_right.feature +2 -2
  273. data/spec/acceptance/block_mode/blocks/motion/self_angle.feature +2 -2
  274. data/spec/acceptance/block_mode/blocks/motion/self_x.feature +2 -2
  275. data/spec/acceptance/block_mode/blocks/motion/self_y.feature +2 -2
  276. data/spec/acceptance/block_mode/blocks/motion/set_angle.feature +2 -2
  277. data/spec/acceptance/block_mode/blocks/motion/set_x.feature +2 -2
  278. data/spec/acceptance/block_mode/blocks/motion/set_x_y.feature +2 -2
  279. data/spec/acceptance/block_mode/blocks/motion/set_y.feature +2 -2
  280. data/spec/acceptance/block_mode/blocks/motion/turn.feature +2 -2
  281. data/spec/acceptance/block_mode/blocks/motion/turn_if_reach_wall.feature +2 -2
  282. data/spec/acceptance/block_mode/blocks/operators/and_or.feature +0 -0
  283. data/spec/acceptance/block_mode/blocks/operators/four_arithmetic_and_compares.feature +0 -0
  284. data/spec/acceptance/block_mode/blocks/operators/index_of.feature +0 -0
  285. data/spec/acceptance/block_mode/blocks/operators/length.feature +0 -0
  286. data/spec/acceptance/block_mode/blocks/operators/math_method.feature +0 -0
  287. data/spec/acceptance/block_mode/blocks/operators/negate.feature +0 -0
  288. data/spec/acceptance/block_mode/blocks/operators/rand.feature +0 -0
  289. data/spec/acceptance/block_mode/blocks/operators/round.feature +0 -0
  290. data/spec/acceptance/block_mode/blocks/operators/text.feature +0 -0
  291. data/spec/acceptance/block_mode/blocks/operators/true_false.feature +0 -0
  292. data/spec/acceptance/block_mode/blocks/ruby/expression.feature +0 -0
  293. data/spec/acceptance/block_mode/blocks/ruby/p.feature +0 -0
  294. data/spec/acceptance/block_mode/blocks/ruby/statement_comment.feature +0 -0
  295. data/spec/acceptance/block_mode/blocks/sensing/character_property.feature +2 -2
  296. data/spec/acceptance/block_mode/blocks/sensing/hit.feature +6 -6
  297. data/spec/acceptance/block_mode/blocks/sensing/input_key_push_or_down.feature +0 -0
  298. data/spec/acceptance/block_mode/blocks/sensing/input_mouse_pos_x.feature +0 -0
  299. data/spec/acceptance/block_mode/blocks/sensing/input_mouse_pos_y.feature +0 -0
  300. data/spec/acceptance/block_mode/blocks/sensing/input_mouse_push_or_down.feature +0 -0
  301. data/spec/acceptance/block_mode/blocks/sensing/reach_wall.feature +2 -2
  302. data/spec/acceptance/block_mode/blocks/sensing/time_now.feature +0 -0
  303. data/spec/acceptance/block_mode/blocks/sound/play.feature +2 -2
  304. data/spec/acceptance/block_mode/character_modal_view.feature +164 -0
  305. data/spec/acceptance/block_mode/demo.feature +2 -2
  306. data/spec/acceptance/block_mode/translate.feature +0 -0
  307. data/spec/acceptance/readme.md +0 -0
  308. data/spec/acceptance/ruby_mode/check.feature +0 -0
  309. data/spec/acceptance/ruby_mode/load.feature +0 -0
  310. data/spec/acceptance/ruby_mode/translate.feature +2 -2
  311. data/spec/acceptance/standalone/preference.feature +8 -8
  312. data/spec/acceptance/standalone/run.feature +0 -0
  313. data/spec/acceptance/standalone/save.feature +1 -1
  314. data/spec/acceptance/standalone/signin.feature +1 -1
  315. data/spec/controllers/source_codes_controller_spec.rb +0 -0
  316. data/spec/fixtures/files/01.rb +0 -0
  317. data/spec/fixtures/files/01.rb.xml +0 -0
  318. data/spec/fixtures/files/01_remix.rb +0 -0
  319. data/spec/fixtures/files/01_remix02.rb +0 -0
  320. data/spec/fixtures/files/01_remix10.rb.xml +0 -0
  321. data/spec/fixtures/files/extra_car.png +0 -0
  322. data/spec/fixtures/files/favicon.ico +0 -0
  323. data/spec/helpers/editor_helper_spec.rb +0 -0
  324. data/spec/javascripts/collections/character_set_spec.coffee +0 -0
  325. data/spec/javascripts/models/character_spec.coffee +2 -14
  326. data/spec/javascripts/models/scene_spec.coffee +0 -0
  327. data/spec/javascripts/spec_helper.js +0 -0
  328. data/spec/lib/smalruby_editor_spec.rb +0 -0
  329. data/spec/models/concerns/ruby_to_block/block/character_method_call_spec.rb +0 -0
  330. data/spec/models/concerns/ruby_to_block/block/character_spec.rb +71 -0
  331. data/spec/models/concerns/ruby_to_block/block/control_if_spec.rb +0 -0
  332. data/spec/models/concerns/ruby_to_block/block/control_loop_spec.rb +0 -0
  333. data/spec/models/concerns/ruby_to_block/block/events_on_start_spec.rb +6 -6
  334. data/spec/models/concerns/ruby_to_block/block/hardware__neo_pixel_spec.rb +77 -0
  335. data/spec/models/concerns/ruby_to_block/block/looks_say_spec.rb +0 -0
  336. data/spec/models/concerns/ruby_to_block/block/looks_spec.rb +26 -2
  337. data/spec/models/concerns/ruby_to_block/block/motion_move_spec.rb +0 -0
  338. data/spec/models/concerns/ruby_to_block/block/motion_spec.rb +0 -0
  339. data/spec/models/concerns/ruby_to_block/block/motion_turn_spec.rb +0 -0
  340. data/spec/models/concerns/ruby_to_block/block/motion_turn_xy_spec.rb +0 -0
  341. data/spec/models/concerns/ruby_to_block/block/require_smalruby_spec.rb +0 -0
  342. data/spec/models/concerns/ruby_to_block/block/ruby_comment_spec.rb +0 -0
  343. data/spec/models/concerns/ruby_to_block/block/ruby_statement_spec.rb +0 -0
  344. data/spec/models/concerns/ruby_to_block/block/sensing_reach_wall_spec.rb +0 -0
  345. data/spec/models/concerns/ruby_to_block/block/shared/block_examples.rb +2 -2
  346. data/spec/models/concerns/ruby_to_block/block/sound_spec.rb +0 -0
  347. data/spec/models/concerns/ruby_to_block/block/text_spec.rb +0 -0
  348. data/spec/models/concerns/ruby_to_block/block_spec.rb +0 -0
  349. data/spec/models/concerns/ruby_to_block_spec.rb +0 -0
  350. data/spec/spec_helper.rb +21 -10
  351. data/spec/steps/block_mode_steps.rb +0 -0
  352. data/spec/steps/fix_turnip.rb +0 -0
  353. data/spec/steps/global_variable.rb +0 -0
  354. data/spec/steps/standalone_steps.rb +3 -3
  355. data/spec/steps/then_steps.rb +28 -0
  356. data/spec/steps/when_steps.rb +15 -18
  357. data/spec/support/capybara.rb +0 -0
  358. data/spec/support/env.rb +0 -0
  359. data/spec/support/ruby_to_block.rb +0 -0
  360. data/spec/teaspoon_env.rb +0 -0
  361. data/spec/turnip_helper.rb +0 -0
  362. data/vendor/assets/javascripts/.keep +0 -0
  363. data/vendor/assets/javascripts/jquery.blockUI.js +0 -0
  364. data/vendor/assets/stylesheets/.keep +0 -0
  365. metadata +56 -14
  366. data/app/assets/javascripts/views/character_modal_view.js.coffee +0 -194
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,67 @@
1
+ class Costume < ActiveRecord::Base
2
+ acts_as_taggable
3
+
4
+ PRESET_COSTUME_SETTINGS = [
5
+ { name: "car1", tag_list: %w(Preset Car) },
6
+ { name: "car2", tag_list: %w(Preset Car) },
7
+ { name: "car3", tag_list: %w(Preset Car) },
8
+ { name: "car4", tag_list: %w(Preset Car) },
9
+ { name: "cat1", tag_list: %w(Preset Animal Cat) },
10
+ { name: "cat2", tag_list: %w(Preset Animal Cat) },
11
+ { name: "cat3", tag_list: %w(Preset Animal Cat) },
12
+ { name: "frog1", tag_list: %w(Preset Aminal Frog) },
13
+ { name: "ball1", tag_list: %w(Preset Ball) },
14
+ { name: "ball2", tag_list: %w(Preset Ball) },
15
+ { name: "ball3", tag_list: %w(Preset Ball) },
16
+ { name: "ball4", tag_list: %w(Preset Ball) },
17
+ { name: "ball5", tag_list: %w(Preset Ball) },
18
+ { name: "ball6", tag_list: %w(Preset Ball) },
19
+ { name: "ryu1", tag_list: %w(Preset Human Ninja) },
20
+ { name: "ryu2", tag_list: %w(Preset Human Ninja) },
21
+ { name: "taichi1", tag_list: %w(Preset Animal Ninja) },
22
+ { name: "taichi2", tag_list: %w(Preset Animal Ninja) },
23
+ ]
24
+
25
+ belongs_to :user
26
+
27
+ scope :presets, -> { where(preset: true) }
28
+ scope :default_order, -> { order(preset: :asc, position: :asc) }
29
+
30
+ class << self
31
+ def create_presets
32
+ PRESET_COSTUME_SETTINGS.each.with_index do |setting, index|
33
+ costume = Costume.find_or_create_by(name: setting[:name],
34
+ position: index,
35
+ preset: true)
36
+ costume.tag_list = setting[:tag_list]
37
+ costume.save!
38
+ end
39
+ end
40
+
41
+ def destroy_presets
42
+ names = PRESET_COSTUME_SETTINGS.map { |s| s[:name] }
43
+ where(name: names, preset: true).destroy_all
44
+ end
45
+ end
46
+
47
+ def url
48
+ "/smalruby/assets/#{basename}"
49
+ end
50
+
51
+ def path
52
+ if preset?
53
+ Rails.root.join("public/smalruby/assets/#{basename}")
54
+ else
55
+ s = "~/#{user.name}/__assets__/#{basename}"
56
+ Pathname(s).expand_path
57
+ end
58
+ end
59
+
60
+ def basename=(val)
61
+ self.name = val.sub(/\.png$/, "")
62
+ end
63
+
64
+ def basename
65
+ "#{name}.png"
66
+ end
67
+ end
@@ -73,7 +73,15 @@ class SourceCode < ActiveRecord::Base
73
73
 
74
74
  doc = Nokogiri::HTML.parse(data)
75
75
  if (attr = doc.xpath('//character[1]/@costumes').first)
76
- res[:imageUrl] = "/smalruby/assets/#{attr.value}"
76
+ costumes = attr.value.split(",").map { |s|
77
+ s.sub(/^[^:]*:/, "")
78
+ }
79
+ if (attr = doc.xpath('//character[1]/@costume_index').first)
80
+ costume_index = attr.value.to_i
81
+ else
82
+ costume_index = 0
83
+ end
84
+ res[:imageUrl] = "/smalruby/assets/#{costumes[costume_index]}"
77
85
  end
78
86
  text = doc.xpath('//block[@type="ruby_comment"][1]' +
79
87
  '/field[@name="COMMENT"]/text()').first
data/app/models/user.rb CHANGED
@@ -1,6 +1,13 @@
1
1
  class User < ActiveRecord::Base
2
2
  serialize :preferences
3
3
 
4
+ has_many :costumes do
5
+ def with_preset
6
+ condition = where(costumes: { preset: true }).where_values.reduce(:or)
7
+ except(:where).where(condition)
8
+ end
9
+ end
10
+
4
11
  before_save do
5
12
  preferences.each do |key, value|
6
13
  case key
@@ -0,0 +1,19 @@
1
+ #character-modal-costume-selector
2
+ .row-fluid
3
+ %ul.thumbnails
4
+ - @costumes.each do |costume|
5
+ %li
6
+ %a.thumbnail
7
+ %img{src: "#{costume.url}", alt: "#{costume.basename}"}
8
+ - if !costume.preset?
9
+ %a.remove-button{"data-url" => "#{costume_path(costume)}", "data-message" => "#{t(".confirm_to_delete_costume")}"}
10
+ %i.icon-remove
11
+
12
+ - if signed_in?
13
+ %li
14
+ %a#character-modal-upload-costume
15
+ %i.icon-plus-sign-alt
16
+ %br
17
+ = t('.upload_costume')
18
+ = form_tag(costumes_path, id: "character-modal-upload-costume-form", method: "post", multipart: true) do
19
+ %input#character-modal-upload-costume-file{type: "file", name: "costume[file]", style: "display: none"}
@@ -2,13 +2,27 @@
2
2
  :role => 'dialog', :'aria-hidden' => 'true'}
3
3
  .modal-body
4
4
  #character-modal-right-pane{:class => 'right-pane'}
5
- #character-modal-costume-selector
6
- .row-fluid
7
- %ul.thumbnails
8
- - %w(car1 car2 car3 car4 cat1 cat2 cat3 frog1 ball1 ball2 ball3 ball4 ball5 ball6 ryu1 ryu2 taichi1 taichi2).each do |name|
9
- %li
10
- %a.thumbnail
11
- %img{:src => "/smalruby/assets/#{name}.png", :alt => "#{name}.png"}
5
+ #character-modal-right-pane-inner
6
+ #character-modal-right-pane-inner-right-pane{:class => 'right-pane'}
7
+ %form#character-modal-costume-form{:class => 'form-horizontal'}
8
+ .control-group{for: "costume[name]"}
9
+ %label.control-label{for: "costume_name"}<
10
+ = t('.costume_name')
11
+ .controls
12
+ %input#costume_name.input-large{name: "costume[name]", type: "text", placeholder: t('.msg_input_costume_name')}
13
+
14
+ #character-modal-costume-selector
15
+
16
+ #character-modal-right-pane-inner-left-pane{:class => 'left-pane'}
17
+ #character-modal-costume-set-header
18
+ = t('.costumes')
19
+ #character-modal-costume-set-container
20
+ #character-modal-costume-set
21
+ #character-modal-add-costume.item
22
+ %a#character-modal-add-costume-button.costume
23
+ %i.icon-plus-sign-alt
24
+ %br
25
+ = t('.new_costume')
12
26
 
13
27
  #character-modal-left-pane{:class => 'left-pane'}
14
28
  #character-modal-preview
@@ -60,3 +74,17 @@
60
74
  %button#character-modal-ok-button{:class => 'btn btn-primary'}<
61
75
  %i.icon-circle-blank
62
76
  = t('common.ok')
77
+
78
+ %script#character-modal-costume-template{:type => 'text/template'}
79
+ .item
80
+ .item-info
81
+ .name
82
+ {{- name }}
83
+ .attributes
84
+ {{- index }}
85
+
86
+ %a.remove-button
87
+ %i.icon-remove
88
+
89
+ %a.costume
90
+ %img{src: '{{- path }}', alt: '{{- basename }}'}
@@ -194,6 +194,9 @@
194
194
  -# 消滅する
195
195
  %block{:type => "#{category}_vanish"}
196
196
 
197
+ %block{:type => "#{category}_next_costume"}
198
+ %block{:type => "#{category}_switch_costume"}
199
+
197
200
  -# 大きさを( )%ずつ変える
198
201
  -#%block{:type => "#{category}_change_scale_by"}
199
202
  -# = toolbox_number_value('SCALE', 10)
@@ -217,6 +220,12 @@
217
220
  -# LED[▼PIN]をオフにする
218
221
  %block{:type => "#{category}_#{subcategory}_turn_off"}
219
222
 
223
+ - subcategory = 'neo_pixel'
224
+ %block{:type => "#{category}_#{subcategory}_set_rgb"}
225
+ = toolbox_number_value('RED', 0)
226
+ = toolbox_number_value('GREEN', 0)
227
+ = toolbox_number_value('BLUE', 0)
228
+
220
229
  - subcategory = 'rgb_led'
221
230
  -# RGB LED[▼アノード]コモン[▼PIN]を[カラー]にする
222
231
  %block{:type => "#{category}_#{subcategory}_set_color"}
File without changes
@@ -51,6 +51,7 @@
51
51
  .btn-group
52
52
  %a#submenu-button{:class => "dropdown-toggle btn btn-primary", :"data-toggle" => "dropdown", :href => "#"}
53
53
  %i.icon-reorder
54
+ = t('.menu')
54
55
  %ul#submenu.dropdown-menu{:class => "pull-right"}
55
56
  %li
56
57
  - if standalone?
data/bin/smalruby-editor CHANGED
@@ -3,6 +3,7 @@
3
3
 
4
4
  require 'pathname'
5
5
  require 'socket'
6
+ require 'timeout'
6
7
 
7
8
  ENV['RAILS_ENV'] = 'standalone'
8
9
  ENV['SMALRUBY_EDITOR_HOME'] ||= Pathname('~/.smalruby-editor').expand_path.to_s
data/bin/spring CHANGED
@@ -4,17 +4,15 @@
4
4
  # It gets overwritten when you run the `spring binstub` command
5
5
 
6
6
  unless defined?(Spring)
7
- require 'rubygems'
8
- require 'bundler'
7
+ require "rubygems"
8
+ require "bundler"
9
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'] = ''
10
+ if match = Bundler.default_lockfile.read.match(/^GEM$.*?^ (?: )*spring \((.*?)\)$.*?^$/m)
11
+ ENV["GEM_PATH"] = ([Bundler.bundle_path.to_s] + Gem.path).join(File::PATH_SEPARATOR)
12
+ ENV["GEM_HOME"] = ""
15
13
  Gem.paths = ENV
16
14
 
17
- gem 'spring', match[1]
18
- require 'spring/binstub'
15
+ gem "spring", match[1]
16
+ require "spring/binstub"
19
17
  end
20
18
  end
data/config.ru CHANGED
File without changes
data/config/boot.rb CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -37,6 +37,7 @@ en:
37
37
  index:
38
38
  block: "Block"
39
39
  msg_input_program_name: "Input your program name(ex:01.rb)"
40
+ menu: "Menu"
40
41
  run: "Run"
41
42
  download: "Download"
42
43
  load: "Load"
@@ -49,7 +50,7 @@ en:
49
50
 
50
51
  block_tab:
51
52
  character: "Character"
52
- new_character: "New Character"
53
+ new_character: "New character"
53
54
  direction_parameter: "Dir:"
54
55
  stage: "Stage"
55
56
 
@@ -74,6 +75,10 @@ en:
74
75
  y_position: "Y"
75
76
  msg_input_name: "car1 and ball1 etc..."
76
77
  direction: "Dir"
78
+ costumes: "Costumes:"
79
+ new_costume: "New costume"
80
+ costume_name: "Costume name"
81
+ msg_input_costume_name: "costume1 etc..."
77
82
 
78
83
  load_modal:
79
84
  preset_programs: "Preset programs"
@@ -92,6 +97,10 @@ en:
92
97
  message: "Input your name<br>not to mix with other people's program."
93
98
  username_placeholder: "username, ID, nickname, etc..."
94
99
 
100
+ costumes:
101
+ index:
102
+ upload_costume: "Upload costume..."
103
+
95
104
  users:
96
105
  preferences:
97
106
  toolbox: "Toolbox"
@@ -38,6 +38,7 @@ ja:
38
38
  index:
39
39
  block: "ブロック"
40
40
  msg_input_program_name: "プログラムの名前を入れてね(例:01.rb)"
41
+ menu: "メニュー"
41
42
  run: "実行"
42
43
  download: "ダウンロード"
43
44
  load: "ロード"
@@ -75,6 +76,10 @@ ja:
75
76
  y_position: "Y座標"
76
77
  msg_input_name: "car1やball1など"
77
78
  direction: "向き"
79
+ costumes: "コスチューム:"
80
+ new_costume: "新しいコスチューム"
81
+ costume_name: "コスチュームの名前"
82
+ msg_input_costume_name: "costume1など"
78
83
 
79
84
  load_modal:
80
85
  preset_programs: "いろいろなプログラム"
@@ -93,6 +98,11 @@ ja:
93
98
  message: "あなたの名前をいれて、<br />ほかの人のプログラムとまざらないようにしよう♪"
94
99
  username_placeholder: "名前、生徒番号、ニックネームなど"
95
100
 
101
+ costumes:
102
+ index:
103
+ upload_costume: "新しい画像"
104
+ confirm_to_delete_costume: "登録した画像を削除します。本当にいいですか?"
105
+
96
106
  users:
97
107
  preferences:
98
108
  toolbox: "ツールボックス"
data/config/routes.rb CHANGED
@@ -11,6 +11,8 @@ SmalrubyEditor::Application.routes.draw do
11
11
  match '/signout', to: 'sessions#destroy', via: 'delete'
12
12
 
13
13
  resources :users, only: [:update]
14
+ resources :costumes, only: [:index, :create, :destroy]
15
+ get "/smalruby/assets/:basename", to: "costumes#show"
14
16
 
15
17
  resources :source_codes, only: [:create, :index]
16
18
  post 'source_codes/check'
data/config/unicorn.rb CHANGED
@@ -1,23 +1,23 @@
1
- worker_processes Integer(ENV['WEB_CONCURRENCY'] || 3)
2
- timeout 15
3
- preload_app true
4
-
5
- # rubocop:disable Output
6
- before_fork do |server, worker|
7
- Signal.trap 'TERM' do
8
- puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
9
- Process.kill 'QUIT', Process.pid
10
- end
11
-
12
- defined?(ActiveRecord::Base) && ActiveRecord::Base.connection.disconnect!
13
- end
14
-
15
- after_fork do |server, worker|
16
- Signal.trap 'TERM' do
17
- puts 'Unicorn worker intercepting TERM and doing nothing.' \
18
- ' Wait for master to send QUIT'
19
- end
20
-
21
- defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection
22
- end
23
- # rubocop:enable Output
1
+ worker_processes Integer(ENV['WEB_CONCURRENCY'] || 3)
2
+ timeout 15
3
+ preload_app true
4
+
5
+ # rubocop:disable Output
6
+ before_fork do |server, worker|
7
+ Signal.trap 'TERM' do
8
+ puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
9
+ Process.kill 'QUIT', Process.pid
10
+ end
11
+
12
+ defined?(ActiveRecord::Base) && ActiveRecord::Base.connection.disconnect!
13
+ end
14
+
15
+ after_fork do |server, worker|
16
+ Signal.trap 'TERM' do
17
+ puts 'Unicorn worker intercepting TERM and doing nothing.' \
18
+ ' Wait for master to send QUIT'
19
+ end
20
+
21
+ defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection
22
+ end
23
+ # rubocop:enable Output
File without changes
@@ -1,6 +1,6 @@
1
1
  class AddIndexNameOnUsers < ActiveRecord::Migration
2
2
  def up
3
- add_index :users, :name, :unique
3
+ add_index :users, :name, unique: true
4
4
  end
5
5
 
6
6
  def down