smalruby-editor 0.1.5-x86-mingw32 → 0.1.6-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of smalruby-editor might be problematic. Click here for more details.

Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.rubocop.yml +8 -0
  4. data/README.rdoc +3 -0
  5. data/app/assets/javascripts/application.js +0 -1
  6. data/app/assets/javascripts/models/source_code.js.coffee +5 -2
  7. data/app/assets/javascripts/smalruby.js.coffee +18 -11
  8. data/app/assets/javascripts/views/main_menu_view.js.coffee +139 -81
  9. data/app/controllers/source_codes_controller.rb +7 -0
  10. data/app/models/concerns/ruby_to_block.rb +391 -0
  11. data/app/models/source_code.rb +3 -2
  12. data/app/views/editor/demo.html.erb +1 -1
  13. data/app/views/editor/index.html.haml +2 -2
  14. data/config/routes.rb +1 -0
  15. data/{app/assets/demos → demos}/default.xml +0 -0
  16. data/{app/assets/demos → demos}/rgb_led_anode.xml +82 -82
  17. data/lib/smalruby_editor/version.rb +3 -3
  18. data/lib/tasks/release.rake +0 -4
  19. data/public/assets/{application-0047adbc0fb7a529ef7a41b5e0e7d097.js → application-8bfffad1222d4e198f3c7ccc1cbd774f.js} +179 -144
  20. data/public/assets/{application-0047adbc0fb7a529ef7a41b5e0e7d097.js.gz → application-8bfffad1222d4e198f3c7ccc1cbd774f.js.gz} +0 -0
  21. data/public/assets/manifest-332a5a1668194028b55103e0ea45c054.json +1 -1
  22. data/smalruby-editor.gemspec +0 -6
  23. data/spec/acceptance/base.feature +119 -0
  24. data/spec/acceptance/block_mode/translate.feature +14 -0
  25. data/spec/acceptance/ruby_mode/translate.feature +65 -0
  26. data/spec/acceptance/standalone/run.feature +14 -1
  27. data/spec/controllers/source_codes_controller_spec.rb +22 -0
  28. data/{public/assets/default-5d1886100d7c8961e9962bbc4bb0c714.xml → spec/fixtures/files/01.rb.xml} +0 -0
  29. data/spec/models/concerns/ruby_to_block_spec.rb +329 -0
  30. data/spec/steps/base_steps.rb +230 -0
  31. data/spec/steps/block_mode_steps.rb +9 -1
  32. data/spec/steps/fix_turnip.rb +28 -0
  33. data/spec/steps/text_editor_steps.rb +52 -193
  34. metadata +19 -97
  35. data/app/assets/javascripts/ruby_mode.js.coffee.erb +0 -12
  36. data/public/assets/rgb_led_anode-91225bef2a8b97f1cefee862a0619b91.xml +0 -83
  37. data/spec/acceptance/ruby_mode/base.feature +0 -33
  38. data/spec/steps/ace_steps.rb +0 -77
@@ -1 +1 @@
1
- {"files":{"default-5d1886100d7c8961e9962bbc4bb0c714.xml":{"logical_path":"default.xml","mtime":"2014-02-14T01:28:48+09:00","size":5017,"digest":"5d1886100d7c8961e9962bbc4bb0c714"},"rgb_led_anode-91225bef2a8b97f1cefee862a0619b91.xml":{"logical_path":"rgb_led_anode.xml","mtime":"2014-02-11T14:17:03+09:00","size":3805,"digest":"91225bef2a8b97f1cefee862a0619b91"},"favicon-a37c90b368fd8ed436cb8f9e9396465c.ico":{"logical_path":"favicon.ico","mtime":"2014-01-21T03:18:02+09:00","size":5430,"digest":"a37c90b368fd8ed436cb8f9e9396465c"},"application-735e172a0df828da16d22f5d3c26671f.js":{"logical_path":"application.js","mtime":"2014-02-19T18:22:09+09:00","size":1440213,"digest":"735e172a0df828da16d22f5d3c26671f"},"application-64a390efe879c386a5950515064f062d.css":{"logical_path":"application.css","mtime":"2014-02-19T14:32:55+09:00","size":119186,"digest":"64a390efe879c386a5950515064f062d"},"jquery-ui/animated-overlay-c48c87b7a95316f4698484e3b85ee4aa.gif":{"logical_path":"jquery-ui/animated-overlay.gif","mtime":"2014-02-04T09:35:48+09:00","size":1738,"digest":"c48c87b7a95316f4698484e3b85ee4aa"},"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-58b63faadd031ca3db096dfdffd90224.png":{"logical_path":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png","mtime":"2014-02-04T09:35:48+09:00","size":180,"digest":"58b63faadd031ca3db096dfdffd90224"},"jquery-ui/ui-bg_flat_75_ffffff_40x100-937399e8b369d64aa075d13a82c00112.png":{"logical_path":"jquery-ui/ui-bg_flat_75_ffffff_40x100.png","mtime":"2014-02-04T09:35:48+09:00","size":178,"digest":"937399e8b369d64aa075d13a82c00112"},"jquery-ui/ui-bg_glass_55_fbf9ee_1x400-a8c503e0f42a081a92a473b0d30ac6cf.png":{"logical_path":"jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":120,"digest":"a8c503e0f42a081a92a473b0d30ac6cf"},"jquery-ui/ui-bg_glass_65_ffffff_1x400-ddcbfe385abc3947937caa0b44e2f5d2.png":{"logical_path":"jquery-ui/ui-bg_glass_65_ffffff_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":105,"digest":"ddcbfe385abc3947937caa0b44e2f5d2"},"jquery-ui/ui-bg_glass_75_dadada_1x400-14dd4a9ad1f21d8c4c7e673ddfb0806f.png":{"logical_path":"jquery-ui/ui-bg_glass_75_dadada_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":111,"digest":"14dd4a9ad1f21d8c4c7e673ddfb0806f"},"jquery-ui/ui-bg_glass_75_e6e6e6_1x400-a43dfabb23b0a987b567b282bad68346.png":{"logical_path":"jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":110,"digest":"a43dfabb23b0a987b567b282bad68346"},"jquery-ui/ui-bg_glass_95_fef1ec_1x400-31c0c791a756266043ee8ea61dacb36a.png":{"logical_path":"jquery-ui/ui-bg_glass_95_fef1ec_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":119,"digest":"31c0c791a756266043ee8ea61dacb36a"},"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-33edbdb0d2fcebd2a65c2041a28533da.png":{"logical_path":"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png","mtime":"2014-02-04T09:35:48+09:00","size":101,"digest":"33edbdb0d2fcebd2a65c2041a28533da"},"jquery-ui/ui-icons_222222_256x240-890385424135de1513f00cbecfb7f990.png":{"logical_path":"jquery-ui/ui-icons_222222_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"890385424135de1513f00cbecfb7f990"},"jquery-ui/ui-icons_2e83ff_256x240-824705ca4aa2610434a358fe4018c9c6.png":{"logical_path":"jquery-ui/ui-icons_2e83ff_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"824705ca4aa2610434a358fe4018c9c6"},"jquery-ui/ui-icons_454545_256x240-254e054f6df453dfac49efbc8b78f79d.png":{"logical_path":"jquery-ui/ui-icons_454545_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"254e054f6df453dfac49efbc8b78f79d"},"jquery-ui/ui-icons_888888_256x240-57c441f87c4289a5372823f506c1182d.png":{"logical_path":"jquery-ui/ui-icons_888888_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"57c441f87c4289a5372823f506c1182d"},"jquery-ui/ui-icons_cd0a0a_256x240-261647ac915575f3981ded254ae8d43e.png":{"logical_path":"jquery-ui/ui-icons_cd0a0a_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"261647ac915575f3981ded254ae8d43e"},"loading-e8e6dd7833131c92a6c3b9c8ccc6a6ac.gif":{"logical_path":"loading.gif","mtime":"2014-01-03T14:44:55+09:00","size":3897,"digest":"e8e6dd7833131c92a6c3b9c8ccc6a6ac"},"progressbar-82023a146fba2a0f6d925629ed2b09c5.gif":{"logical_path":"progressbar.gif","mtime":"2014-01-03T14:44:55+09:00","size":3323,"digest":"82023a146fba2a0f6d925629ed2b09c5"},"application-0047adbc0fb7a529ef7a41b5e0e7d097.js":{"logical_path":"application.js","mtime":"2014-02-20T03:12:12+09:00","size":1441568,"digest":"0047adbc0fb7a529ef7a41b5e0e7d097"}},"assets":{"default.xml":"default-5d1886100d7c8961e9962bbc4bb0c714.xml","rgb_led_anode.xml":"rgb_led_anode-91225bef2a8b97f1cefee862a0619b91.xml","favicon.ico":"favicon-a37c90b368fd8ed436cb8f9e9396465c.ico","application.js":"application-0047adbc0fb7a529ef7a41b5e0e7d097.js","application.css":"application-64a390efe879c386a5950515064f062d.css","jquery-ui/animated-overlay.gif":"jquery-ui/animated-overlay-c48c87b7a95316f4698484e3b85ee4aa.gif","jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-58b63faadd031ca3db096dfdffd90224.png","jquery-ui/ui-bg_flat_75_ffffff_40x100.png":"jquery-ui/ui-bg_flat_75_ffffff_40x100-937399e8b369d64aa075d13a82c00112.png","jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png":"jquery-ui/ui-bg_glass_55_fbf9ee_1x400-a8c503e0f42a081a92a473b0d30ac6cf.png","jquery-ui/ui-bg_glass_65_ffffff_1x400.png":"jquery-ui/ui-bg_glass_65_ffffff_1x400-ddcbfe385abc3947937caa0b44e2f5d2.png","jquery-ui/ui-bg_glass_75_dadada_1x400.png":"jquery-ui/ui-bg_glass_75_dadada_1x400-14dd4a9ad1f21d8c4c7e673ddfb0806f.png","jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png":"jquery-ui/ui-bg_glass_75_e6e6e6_1x400-a43dfabb23b0a987b567b282bad68346.png","jquery-ui/ui-bg_glass_95_fef1ec_1x400.png":"jquery-ui/ui-bg_glass_95_fef1ec_1x400-31c0c791a756266043ee8ea61dacb36a.png","jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png":"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-33edbdb0d2fcebd2a65c2041a28533da.png","jquery-ui/ui-icons_222222_256x240.png":"jquery-ui/ui-icons_222222_256x240-890385424135de1513f00cbecfb7f990.png","jquery-ui/ui-icons_2e83ff_256x240.png":"jquery-ui/ui-icons_2e83ff_256x240-824705ca4aa2610434a358fe4018c9c6.png","jquery-ui/ui-icons_454545_256x240.png":"jquery-ui/ui-icons_454545_256x240-254e054f6df453dfac49efbc8b78f79d.png","jquery-ui/ui-icons_888888_256x240.png":"jquery-ui/ui-icons_888888_256x240-57c441f87c4289a5372823f506c1182d.png","jquery-ui/ui-icons_cd0a0a_256x240.png":"jquery-ui/ui-icons_cd0a0a_256x240-261647ac915575f3981ded254ae8d43e.png","loading.gif":"loading-e8e6dd7833131c92a6c3b9c8ccc6a6ac.gif","progressbar.gif":"progressbar-82023a146fba2a0f6d925629ed2b09c5.gif"}}
1
+ {"files":{"default-5d1886100d7c8961e9962bbc4bb0c714.xml":{"logical_path":"default.xml","mtime":"2014-02-14T01:28:48+09:00","size":5017,"digest":"5d1886100d7c8961e9962bbc4bb0c714"},"rgb_led_anode-91225bef2a8b97f1cefee862a0619b91.xml":{"logical_path":"rgb_led_anode.xml","mtime":"2014-02-11T14:17:03+09:00","size":3805,"digest":"91225bef2a8b97f1cefee862a0619b91"},"favicon-a37c90b368fd8ed436cb8f9e9396465c.ico":{"logical_path":"favicon.ico","mtime":"2014-01-21T03:18:02+09:00","size":5430,"digest":"a37c90b368fd8ed436cb8f9e9396465c"},"application-735e172a0df828da16d22f5d3c26671f.js":{"logical_path":"application.js","mtime":"2014-02-19T18:22:09+09:00","size":1440213,"digest":"735e172a0df828da16d22f5d3c26671f"},"application-64a390efe879c386a5950515064f062d.css":{"logical_path":"application.css","mtime":"2014-02-19T14:32:55+09:00","size":119186,"digest":"64a390efe879c386a5950515064f062d"},"jquery-ui/animated-overlay-c48c87b7a95316f4698484e3b85ee4aa.gif":{"logical_path":"jquery-ui/animated-overlay.gif","mtime":"2014-02-04T09:35:48+09:00","size":1738,"digest":"c48c87b7a95316f4698484e3b85ee4aa"},"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-58b63faadd031ca3db096dfdffd90224.png":{"logical_path":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png","mtime":"2014-02-04T09:35:48+09:00","size":180,"digest":"58b63faadd031ca3db096dfdffd90224"},"jquery-ui/ui-bg_flat_75_ffffff_40x100-937399e8b369d64aa075d13a82c00112.png":{"logical_path":"jquery-ui/ui-bg_flat_75_ffffff_40x100.png","mtime":"2014-02-04T09:35:48+09:00","size":178,"digest":"937399e8b369d64aa075d13a82c00112"},"jquery-ui/ui-bg_glass_55_fbf9ee_1x400-a8c503e0f42a081a92a473b0d30ac6cf.png":{"logical_path":"jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":120,"digest":"a8c503e0f42a081a92a473b0d30ac6cf"},"jquery-ui/ui-bg_glass_65_ffffff_1x400-ddcbfe385abc3947937caa0b44e2f5d2.png":{"logical_path":"jquery-ui/ui-bg_glass_65_ffffff_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":105,"digest":"ddcbfe385abc3947937caa0b44e2f5d2"},"jquery-ui/ui-bg_glass_75_dadada_1x400-14dd4a9ad1f21d8c4c7e673ddfb0806f.png":{"logical_path":"jquery-ui/ui-bg_glass_75_dadada_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":111,"digest":"14dd4a9ad1f21d8c4c7e673ddfb0806f"},"jquery-ui/ui-bg_glass_75_e6e6e6_1x400-a43dfabb23b0a987b567b282bad68346.png":{"logical_path":"jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":110,"digest":"a43dfabb23b0a987b567b282bad68346"},"jquery-ui/ui-bg_glass_95_fef1ec_1x400-31c0c791a756266043ee8ea61dacb36a.png":{"logical_path":"jquery-ui/ui-bg_glass_95_fef1ec_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":119,"digest":"31c0c791a756266043ee8ea61dacb36a"},"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-33edbdb0d2fcebd2a65c2041a28533da.png":{"logical_path":"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png","mtime":"2014-02-04T09:35:48+09:00","size":101,"digest":"33edbdb0d2fcebd2a65c2041a28533da"},"jquery-ui/ui-icons_222222_256x240-890385424135de1513f00cbecfb7f990.png":{"logical_path":"jquery-ui/ui-icons_222222_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"890385424135de1513f00cbecfb7f990"},"jquery-ui/ui-icons_2e83ff_256x240-824705ca4aa2610434a358fe4018c9c6.png":{"logical_path":"jquery-ui/ui-icons_2e83ff_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"824705ca4aa2610434a358fe4018c9c6"},"jquery-ui/ui-icons_454545_256x240-254e054f6df453dfac49efbc8b78f79d.png":{"logical_path":"jquery-ui/ui-icons_454545_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"254e054f6df453dfac49efbc8b78f79d"},"jquery-ui/ui-icons_888888_256x240-57c441f87c4289a5372823f506c1182d.png":{"logical_path":"jquery-ui/ui-icons_888888_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"57c441f87c4289a5372823f506c1182d"},"jquery-ui/ui-icons_cd0a0a_256x240-261647ac915575f3981ded254ae8d43e.png":{"logical_path":"jquery-ui/ui-icons_cd0a0a_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"261647ac915575f3981ded254ae8d43e"},"loading-e8e6dd7833131c92a6c3b9c8ccc6a6ac.gif":{"logical_path":"loading.gif","mtime":"2014-01-03T14:44:55+09:00","size":3897,"digest":"e8e6dd7833131c92a6c3b9c8ccc6a6ac"},"progressbar-82023a146fba2a0f6d925629ed2b09c5.gif":{"logical_path":"progressbar.gif","mtime":"2014-01-03T14:44:55+09:00","size":3323,"digest":"82023a146fba2a0f6d925629ed2b09c5"},"application-0047adbc0fb7a529ef7a41b5e0e7d097.js":{"logical_path":"application.js","mtime":"2014-02-20T03:12:12+09:00","size":1441568,"digest":"0047adbc0fb7a529ef7a41b5e0e7d097"},"application-42aa660a3233c7738b7578d30ba040b3.js":{"logical_path":"application.js","mtime":"2014-02-22T15:25:11+09:00","size":1441708,"digest":"42aa660a3233c7738b7578d30ba040b3"},"application-66b65154e7b5dcfe67fa164db6fc5f51.js":{"logical_path":"application.js","mtime":"2014-02-23T21:53:43+09:00","size":1441898,"digest":"66b65154e7b5dcfe67fa164db6fc5f51"},"application-8bfffad1222d4e198f3c7ccc1cbd774f.js":{"logical_path":"application.js","mtime":"2014-02-27T01:28:32+09:00","size":1442504,"digest":"8bfffad1222d4e198f3c7ccc1cbd774f"}},"assets":{"default.xml":"default-5d1886100d7c8961e9962bbc4bb0c714.xml","rgb_led_anode.xml":"rgb_led_anode-91225bef2a8b97f1cefee862a0619b91.xml","favicon.ico":"favicon-a37c90b368fd8ed436cb8f9e9396465c.ico","application.js":"application-8bfffad1222d4e198f3c7ccc1cbd774f.js","application.css":"application-64a390efe879c386a5950515064f062d.css","jquery-ui/animated-overlay.gif":"jquery-ui/animated-overlay-c48c87b7a95316f4698484e3b85ee4aa.gif","jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-58b63faadd031ca3db096dfdffd90224.png","jquery-ui/ui-bg_flat_75_ffffff_40x100.png":"jquery-ui/ui-bg_flat_75_ffffff_40x100-937399e8b369d64aa075d13a82c00112.png","jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png":"jquery-ui/ui-bg_glass_55_fbf9ee_1x400-a8c503e0f42a081a92a473b0d30ac6cf.png","jquery-ui/ui-bg_glass_65_ffffff_1x400.png":"jquery-ui/ui-bg_glass_65_ffffff_1x400-ddcbfe385abc3947937caa0b44e2f5d2.png","jquery-ui/ui-bg_glass_75_dadada_1x400.png":"jquery-ui/ui-bg_glass_75_dadada_1x400-14dd4a9ad1f21d8c4c7e673ddfb0806f.png","jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png":"jquery-ui/ui-bg_glass_75_e6e6e6_1x400-a43dfabb23b0a987b567b282bad68346.png","jquery-ui/ui-bg_glass_95_fef1ec_1x400.png":"jquery-ui/ui-bg_glass_95_fef1ec_1x400-31c0c791a756266043ee8ea61dacb36a.png","jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png":"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-33edbdb0d2fcebd2a65c2041a28533da.png","jquery-ui/ui-icons_222222_256x240.png":"jquery-ui/ui-icons_222222_256x240-890385424135de1513f00cbecfb7f990.png","jquery-ui/ui-icons_2e83ff_256x240.png":"jquery-ui/ui-icons_2e83ff_256x240-824705ca4aa2610434a358fe4018c9c6.png","jquery-ui/ui-icons_454545_256x240.png":"jquery-ui/ui-icons_454545_256x240-254e054f6df453dfac49efbc8b78f79d.png","jquery-ui/ui-icons_888888_256x240.png":"jquery-ui/ui-icons_888888_256x240-57c441f87c4289a5372823f506c1182d.png","jquery-ui/ui-icons_cd0a0a_256x240.png":"jquery-ui/ui-icons_cd0a0a_256x240-261647ac915575f3981ded254ae8d43e.png","loading.gif":"loading-e8e6dd7833131c92a6c3b9c8ccc6a6ac.gif","progressbar.gif":"progressbar-82023a146fba2a0f6d925629ed2b09c5.gif"}}
@@ -61,19 +61,13 @@ 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
- ['jquery-rails'],
65
64
  ['turbolinks'],
66
65
  ['jbuilder', '~> 2.0'],
67
- ['ace-rails-ap'],
68
66
  ['flatstrap-sass'],
69
- ['jquery-fileupload-rails'],
70
67
  ['shared-mime-info'],
71
68
  ['launchy'],
72
69
  ['mime-types', '~> 1.16'],
73
70
  ['haml-rails'],
74
- ['jquery-ui-rails'],
75
- ['eco-source', '>= 1.1.0.rc.1'],
76
- ['backbone-on-rails'],
77
71
  ['smalruby'],
78
72
  ]
79
73
  runtime_dependencies << ['therubyracer'] unless is_windows
@@ -0,0 +1,119 @@
1
+ # encoding: utf-8
2
+ # language: ja
3
+ @javascript
4
+ 機能: Base - 基本
5
+ シナリオ: トップページにアクセスする
6
+ もし "トップページ" にアクセスする
7
+
8
+ ならば "ブロックタブ" が表示されていること
9
+ かつ "プログラム名の入力欄" が表示されていること
10
+ かつ "ダウンロードボタン" が表示されていること
11
+
12
+ シナリオ: ブロックモードでブロックを配置後にページを遷移する
13
+ 前提 "ブロック" タブを表示する
14
+
15
+ もし 次のブロック("ruby_statement")を配置する:
16
+ """
17
+ %block{:type => "ruby_statement", :x => "0", :y => "0"}
18
+ %field{:name => "STATEMENT"}<
19
+ stage1 = Stage.new(color: "white")
20
+ """
21
+ かつ プログラムの名前に "01.rb" を指定する
22
+ かつ ページをリロードする
23
+ かつ 警告ダイアログの "dismiss" ボタンをクリックする
24
+
25
+ ならば 次のXMLと同等のブロックが配置されていること:
26
+ """
27
+ <xml>
28
+ <block type="ruby_statement" x="0" y="0">
29
+ <field name="STATEMENT">stage1 = Stage.new(color: "white")</field>
30
+ </block>
31
+ </xml>
32
+ """
33
+ かつ "プログラム名の入力欄" は "01.rb" であること
34
+
35
+ シナリオ: プログラムを変更していない状態でブロックモードからRubyモードに切り替えてページを遷移する
36
+ 前提 "ブロック" タブを表示する
37
+ かつ "files/01.rb.xml" をロードする
38
+ かつ JavaScriptによるリクエストが終わるまで待つ
39
+
40
+ もし "Rubyタブ" にタブを切り替える
41
+ かつ JavaScriptによるリクエストが終わるまで待つ
42
+ かつ ページをリロードする
43
+
44
+ ならば 次のXMLと同等のブロックが配置されていること:
45
+ """
46
+ <xml></xml>
47
+ """
48
+ かつ "プログラム名の入力欄" は "" であること
49
+
50
+ シナリオ: プログラムを変更した状態でブロックモードからRubyモードに切り替えてページを遷移する
51
+ 前提 "ブロック" タブを表示する
52
+ かつ 次のブロック("ruby_statement")を配置する:
53
+ """
54
+ %block{:type => "ruby_statement", :x => "0", :y => "0"}
55
+ %field{:name => "STATEMENT"}<
56
+ stage1 = Stage.new(color: "white")
57
+ """
58
+ かつ プログラムの名前に "01.rb" を指定する
59
+
60
+ もし "Rubyタブ" にタブを切り替える
61
+ かつ JavaScriptによるリクエストが終わるまで待つ
62
+ かつ ページをリロードする
63
+
64
+ ならば 次のXMLと同等のブロックが配置されていること:
65
+ """
66
+ <xml>
67
+ <block type="ruby_statement" x="0" y="0">
68
+ <field name="STATEMENT">stage1 = Stage.new(color: "white")</field>
69
+ </block>
70
+ </xml>
71
+ """
72
+ かつ "プログラム名の入力欄" は "01.rb" であること
73
+
74
+ シナリオ: エディタ画面を表示してRubyタブに切り替える
75
+ 前提 "トップページ" にアクセスする
76
+
77
+ もし "Rubyタブ" にタブを切り替える
78
+
79
+ ならば "Rubyタブ" が表示されていること
80
+ かつ "テキストエディタ" が表示されていること
81
+ かつ "プログラム名の入力欄" が表示されていること
82
+ かつ "ダウンロードボタン" が表示されていること
83
+ かつ テキストエディタにフォーカスがあること
84
+ かつ テキストエディタの 0 行目の 0 文字目にカーソルがあること
85
+
86
+ シナリオ: Rubyモードでプログラムを入力後にページを遷移する
87
+ もし "Ruby" タブを表示する
88
+ かつ テキストエディタに "puts 'Hello, World!'" を入力済みである
89
+ かつ プログラムの名前に "01.rb" を指定する
90
+ かつ ページをリロードする
91
+ かつ 警告ダイアログの "dismiss" ボタンをクリックする
92
+
93
+ ならば テキストエディタのプログラムは "puts 'Hello, World!'" であること
94
+ かつ "プログラム名の入力欄" は "01.rb" であること
95
+
96
+ シナリオ: プログラムを変更していない状態でRubyモードからブロックモードに切り替えてページを遷移する
97
+ 前提 "Ruby" タブを表示する
98
+ かつ "files/01.rb" をロードする
99
+ かつ JavaScriptによるリクエストが終わるまで待つ
100
+
101
+ もし "ブロックタブ" にタブを切り替える
102
+ かつ JavaScriptによるリクエストが終わるまで待つ
103
+ かつ ページをリロードする
104
+
105
+ ならば テキストエディタのプログラムは "" であること
106
+ かつ "プログラム名の入力欄" は "" であること
107
+
108
+ シナリオ: プログラムを変更した状態でRubyモードからブロックモードに切り替えてページを遷移する
109
+ 前提 "Ruby" タブを表示する
110
+ かつ テキストエディタに "puts 'Hello, World!'" を入力済みである
111
+ かつ プログラムの名前に "01.rb" を指定する
112
+
113
+ もし "ブロックタブ" にタブを切り替える
114
+ かつ JavaScriptによるリクエストが終わるまで待つ
115
+ かつ ページをリロードする
116
+ かつ 警告ダイアログの "dismiss" ボタンをクリックする
117
+
118
+ ならば テキストエディタのプログラムは "puts 'Hello, World!'" であること
119
+ かつ "プログラム名の入力欄" は "01.rb" であること
@@ -0,0 +1,14 @@
1
+ # encoding: utf-8
2
+ # language: ja
3
+ @javascript
4
+ 機能: Translate - ブロックからRubyのソースコードに変換できる
5
+ 背景:
6
+ 前提 "ブロック" タブを表示する
7
+
8
+ シナリオ: ブロックを配置していない状態でRubyのソースコードに変換する
9
+ 前提 すべてのブロックをクリアする
10
+ かつ テキストエディタに "puts 'Hello, World!'" を入力済みである
11
+
12
+ もし "Rubyタブ" にタブを切り替える
13
+
14
+ ならば テキストエディタのプログラムは "" であること
@@ -0,0 +1,65 @@
1
+ # encoding: utf-8
2
+ # language: ja
3
+ @javascript
4
+ 機能: Translate - Rubyのソースコードからブロックに変換できる
5
+ 背景:
6
+ 前提 "Ruby" タブを表示する
7
+ かつ すべてのブロックをクリアする
8
+
9
+ シナリオ: Rubyのソースコードからブロックに変換する
10
+ 前提 テキストエディタにプログラムを入力済みである:
11
+ """
12
+ require "smalruby"
13
+
14
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
15
+
16
+ car1.on(:start) do
17
+ loop do
18
+ move(10)
19
+ turn_if_reach_wall
20
+ end
21
+ end
22
+
23
+ """
24
+
25
+ もし "ブロックタブ" にタブを切り替える
26
+ かつ JavaScriptによるリクエストが終わるまで待つ
27
+
28
+ ならば 次のXMLと同等のブロックが配置されていること:
29
+ """
30
+ <xml>
31
+ <character x="0" y="0" name="car1" costumes="car1.png" angle="0"></character>
32
+ <block type="character_new" x="4" y="4">
33
+ <field name="NAME">car1</field>
34
+ <statement name="DO">
35
+ <block type="events_on_start">
36
+ <statement name="DO">
37
+ <block type="control_loop">
38
+ <statement name="DO">
39
+ <block type="motion_move" inline="true">
40
+ <value name="STEP">
41
+ <block type="math_number">
42
+ <field name="NUM">10</field>
43
+ </block>
44
+ </value>
45
+ <next>
46
+ <block type="motion_turn_if_reach_wall"></block>
47
+ </next>
48
+ </block>
49
+ </statement>
50
+ </block>
51
+ </statement>
52
+ </block>
53
+ </statement>
54
+ </block>
55
+ </xml>
56
+ """
57
+
58
+ シナリオ: Rubyのソースコードからブロックへの変換に失敗する
59
+ 前提 テキストエディタに "__FAIL__" を入力済みである
60
+
61
+ もし "ブロックタブ" にタブを切り替える
62
+ かつ JavaScriptによるリクエストが終わるまで待つ
63
+
64
+ ならば ブロックが配置されていないこと
65
+ かつ テキストエディタのプログラムは "__FAIL__" であること
@@ -3,11 +3,12 @@
3
3
  @javascript
4
4
  @standalone
5
5
  機能: Run - プログラムの実行(standaloneモード)
6
- シナリオ: 実行前にプログラムのシンタックスエラーをチェックできる
6
+ 背景:
7
7
  前提 "Ruby" タブを表示する
8
8
  かつ プログラムの名前に "01.rb" を指定する
9
9
  かつ テキストエディタに "puts Hello, World!'" を入力済みである
10
10
 
11
+ シナリオ: 実行前にプログラムのシンタックスエラーをチェックできる
11
12
  もし "実行ボタン" をクリックする
12
13
  かつ JavaScriptによるリクエストが終わるまで待つ
13
14
 
@@ -15,3 +16,15 @@
15
16
  かつ "メッセージ" に "プログラムを実行できませんでした" を含むこと
16
17
  かつ "メッセージ" に "1行、19文字: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('" を含むこと
17
18
  かつ "メッセージ" に "1行: unterminated string meets end of file" を含むこと
19
+
20
+ シナリオ: 既存のファイルがある状態でプログラムを実行し、上書き保存をキャンセルする
21
+ 前提 ホームディレクトリに "n = 0" という内容の "01.rb" が存在する
22
+ かつ 確認ダイアログをキャンセルするようにしておく
23
+
24
+ もし "実行ボタン" をクリックする
25
+ かつ JavaScriptによるリクエストが終わるまで待つ
26
+ かつ JavaScriptによるリクエストが終わるまで待つ
27
+
28
+ ならば 確認メッセージ "前に01.rbという名前でセーブしているけど本当にセーブしますか?\nセーブすると前に作成したプログラムは消えてしまうよ!" を表示すること
29
+ かつ "メッセージ" に "プログラムの実行をキャンセルしました" を含むこと
30
+ かつ ホームディレクトリの "01.rb" の内容が "n = 0" であること
@@ -466,4 +466,26 @@ describe SourceCodesController do
466
466
  end
467
467
  end
468
468
  end
469
+
470
+ describe 'プログラムをXML形式のブロックに変換する (POST to_blocks)' do
471
+ before do
472
+ post :to_blocks, source_code: { data: data }
473
+ end
474
+
475
+ describe '動作確認用のモックアップ' do
476
+ context '成功する場合' do
477
+ let(:data) { SourceCode::SUCCESS_DATA_MOCK }
478
+
479
+ it 'XML形式のブロックを返すこと' do
480
+ expect(response.body).to eq(SourceCode::SUCCESS_XML_MOCK)
481
+ end
482
+ end
483
+
484
+ context '失敗する場合' do
485
+ let(:data) { '__FAIL__' }
486
+
487
+ it { expect(response.status).to eq(400) }
488
+ end
489
+ end
490
+ end
469
491
  end
@@ -0,0 +1,329 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ def compact_source_code(source_code)
5
+ source_code.lines.map(&:strip).reject(&:empty?).join(';')[0...80]
6
+ end
7
+
8
+ # rubocop:disable EmptyLines, LineLength
9
+
10
+ describe RubyToBlock do
11
+ describe '#to_blocks' do
12
+ let(:source_code) { SourceCode.new(data: data) }
13
+
14
+ subject { source_code.to_blocks }
15
+
16
+ _data = <<-EOS.strip_heredoc
17
+ require "smalruby"
18
+ EOS
19
+ describe compact_source_code(_data) do
20
+ __data = _data
21
+ let(:data) { __data }
22
+
23
+ it { should eq('') }
24
+ end
25
+
26
+ _data = <<-EOS.strip_heredoc
27
+ require "smalruby"
28
+
29
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
30
+
31
+ car1.on(:start) do
32
+
33
+ end
34
+ EOS
35
+ describe compact_source_code(_data) do
36
+ __data = _data
37
+ let(:data) { __data }
38
+
39
+ it '結果が正しいこと' do
40
+ should eq(<<-XML.strip_heredoc)
41
+ <xml xmlns="http://www.w3.org/1999/xhtml">
42
+ <character name="car1" x="0" y="0" angle="0" costumes="car1.png" />
43
+ <block type="character_new">
44
+ <field name="NAME">car1</field>
45
+ <statement name="DO">
46
+ <block type="events_on_start" />
47
+ </statement>
48
+ </block>
49
+ </xml>
50
+ XML
51
+ end
52
+ end
53
+
54
+ _data = <<-EOS.strip_heredoc
55
+ require "smalruby"
56
+
57
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
58
+ cat1 = Character.new(costume: "cat1.png", x: 200, y: 150, angle: 90)
59
+
60
+ car1.on(:start) do
61
+
62
+ end
63
+
64
+ car1.on(:start) do
65
+
66
+ end
67
+
68
+
69
+ cat1.on(:start) do
70
+
71
+ end
72
+ EOS
73
+ describe compact_source_code(_data) do
74
+ __data = _data
75
+ let(:data) { __data }
76
+
77
+ it '結果が正しいこと' do
78
+ should eq(<<-XML.strip_heredoc)
79
+ <xml xmlns="http://www.w3.org/1999/xhtml">
80
+ <character name="car1" x="0" y="0" angle="0" costumes="car1.png" />
81
+ <character name="cat1" x="200" y="150" angle="90" costumes="cat1.png" />
82
+ <block type="character_new">
83
+ <field name="NAME">car1</field>
84
+ <statement name="DO">
85
+ <block type="events_on_start">
86
+ <next>
87
+ <block type="events_on_start" />
88
+ </next>
89
+ </block>
90
+ </statement>
91
+ </block>
92
+ <block type="character_new">
93
+ <field name="NAME">cat1</field>
94
+ <statement name="DO">
95
+ <block type="events_on_start" />
96
+ </statement>
97
+ </block>
98
+ </xml>
99
+ XML
100
+ end
101
+ end
102
+
103
+ _data = <<-EOS.strip_heredoc
104
+ require "smalruby"
105
+
106
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
107
+ cat1 = Character.new(costume: "cat1.png", x: 200, y: 150, angle: 90)
108
+
109
+ car1.on(:start) do
110
+
111
+ cat1.on(:start) do
112
+
113
+ end
114
+ end
115
+ EOS
116
+ describe compact_source_code(_data) do
117
+ __data = _data
118
+ let(:data) { __data }
119
+
120
+ it '結果が正しいこと' do
121
+ should eq(<<-XML.strip_heredoc)
122
+ <xml xmlns="http://www.w3.org/1999/xhtml">
123
+ <character name="car1" x="0" y="0" angle="0" costumes="car1.png" />
124
+ <character name="cat1" x="200" y="150" angle="90" costumes="cat1.png" />
125
+ <block type="character_new">
126
+ <field name="NAME">car1</field>
127
+ <statement name="DO">
128
+ <block type="events_on_start">
129
+ <statement name="DO">
130
+ <block type="character_new">
131
+ <field name="NAME">cat1</field>
132
+ <statement name="DO">
133
+ <block type="events_on_start" />
134
+ </statement>
135
+ </block>
136
+ </statement>
137
+ </block>
138
+ </statement>
139
+ </block>
140
+ </xml>
141
+ XML
142
+ end
143
+ end
144
+
145
+ _data = <<-EOS.strip_heredoc
146
+ require "smalruby"
147
+
148
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
149
+
150
+ car1.on(:start) do
151
+
152
+ on(:start) do
153
+
154
+ end
155
+ end
156
+ EOS
157
+ describe compact_source_code(_data) do
158
+ __data = _data
159
+ let(:data) { __data }
160
+
161
+ it '結果が正しいこと' do
162
+ should eq(<<-XML.strip_heredoc)
163
+ <xml xmlns="http://www.w3.org/1999/xhtml">
164
+ <character name="car1" x="0" y="0" angle="0" costumes="car1.png" />
165
+ <block type="character_new">
166
+ <field name="NAME">car1</field>
167
+ <statement name="DO">
168
+ <block type="events_on_start">
169
+ <statement name="DO">
170
+ <block type="events_on_start" />
171
+ </statement>
172
+ </block>
173
+ </statement>
174
+ </block>
175
+ </xml>
176
+ XML
177
+ end
178
+ end
179
+
180
+ _data = <<-EOS.strip_heredoc
181
+ require "smalruby"
182
+
183
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
184
+
185
+ car1.on(:start) do
186
+
187
+ s = 'a'
188
+ if s == 'a'
189
+ puts 'エー'
190
+ elsif s == 'b'
191
+ puts 'ビー'
192
+ else
193
+ puts 'その他'
194
+ end
195
+ end
196
+ EOS
197
+ describe compact_source_code(_data) do
198
+ __data = _data
199
+ let(:data) { __data }
200
+
201
+ it '結果が正しいこと' do
202
+ should eq(<<-XML.strip_heredoc)
203
+ <xml xmlns="http://www.w3.org/1999/xhtml">
204
+ <character name="car1" x="0" y="0" angle="0" costumes="car1.png" />
205
+ <block type="character_new">
206
+ <field name="NAME">car1</field>
207
+ <statement name="DO">
208
+ <block type="events_on_start">
209
+ <statement name="DO">
210
+ <block type="ruby_statement">
211
+ <field name="STATEMENT">s = &apos;a&apos;</field>
212
+ <next>
213
+ <block type="ruby_statement">
214
+ <field name="STATEMENT">if s == &apos;a&apos;</field>
215
+ <next>
216
+ <block type="ruby_statement">
217
+ <field name="STATEMENT"> puts &apos;エー&apos;</field>
218
+ <next>
219
+ <block type="ruby_statement">
220
+ <field name="STATEMENT">elsif s == &apos;b&apos;</field>
221
+ <next>
222
+ <block type="ruby_statement">
223
+ <field name="STATEMENT"> puts &apos;ビー&apos;</field>
224
+ <next>
225
+ <block type="ruby_statement">
226
+ <field name="STATEMENT">else</field>
227
+ <next>
228
+ <block type="ruby_statement">
229
+ <field name="STATEMENT"> puts &apos;その他&apos;</field>
230
+ <next>
231
+ <block type="ruby_statement">
232
+ <field name="STATEMENT">end</field>
233
+ </block>
234
+ </next>
235
+ </block>
236
+ </next>
237
+ </block>
238
+ </next>
239
+ </block>
240
+ </next>
241
+ </block>
242
+ </next>
243
+ </block>
244
+ </next>
245
+ </block>
246
+ </next>
247
+ </block>
248
+ </statement>
249
+ </block>
250
+ </statement>
251
+ </block>
252
+ </xml>
253
+ XML
254
+ end
255
+ end
256
+
257
+ _data = <<-EOS.strip_heredoc
258
+ require "smalruby"
259
+
260
+ s = :a
261
+ case s
262
+ when :a
263
+ puts "エー"
264
+ when :b
265
+ puts "ビー"
266
+ end
267
+ EOS
268
+ describe compact_source_code(_data) do
269
+ __data = _data
270
+ let(:data) { __data }
271
+
272
+ it '結果が正しいこと' do
273
+ should eq(<<-XML.strip_heredoc)
274
+ <xml xmlns="http://www.w3.org/1999/xhtml">
275
+ <block type="ruby_statement">
276
+ <field name="STATEMENT">s = :a</field>
277
+ <next>
278
+ <block type="ruby_statement">
279
+ <field name="STATEMENT">case s</field>
280
+ <next>
281
+ <block type="ruby_statement">
282
+ <field name="STATEMENT">when :a</field>
283
+ <next>
284
+ <block type="ruby_statement">
285
+ <field name="STATEMENT"> puts &quot;エー&quot;</field>
286
+ <next>
287
+ <block type="ruby_statement">
288
+ <field name="STATEMENT">when :b</field>
289
+ <next>
290
+ <block type="ruby_statement">
291
+ <field name="STATEMENT"> puts &quot;ビー&quot;</field>
292
+ <next>
293
+ <block type="ruby_statement">
294
+ <field name="STATEMENT">end</field>
295
+ </block>
296
+ </next>
297
+ </block>
298
+ </next>
299
+ </block>
300
+ </next>
301
+ </block>
302
+ </next>
303
+ </block>
304
+ </next>
305
+ </block>
306
+ </next>
307
+ </block>
308
+ </xml>
309
+ XML
310
+ end
311
+ end
312
+
313
+ describe '動作確認用のモックアップ' do
314
+ context '成功する場合' do
315
+ let(:data) { SourceCode::SUCCESS_DATA_MOCK }
316
+
317
+ it 'XML形式のブロックを返すこと' do
318
+ should eq(SourceCode::SUCCESS_XML_MOCK)
319
+ end
320
+ end
321
+
322
+ context '失敗する場合' do
323
+ let(:data) { '__FAIL__' }
324
+
325
+ it { expect { subject }.to raise_error }
326
+ end
327
+ end
328
+ end
329
+ end