crystal 0.0.10 → 0.0.12

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.
Files changed (419) hide show
  1. data/Rakefile +25 -0
  2. data/lib/crystal/controller/abstract_controller/micelaneous.rb +31 -0
  3. data/lib/crystal/controller/abstract_controller/render.rb +133 -0
  4. data/lib/crystal/controller/abstract_controller/responder.rb +17 -0
  5. data/lib/crystal/controller/abstract_controller.rb +60 -0
  6. data/lib/crystal/controller/controller_context.rb +7 -0
  7. data/lib/crystal/controller/http_controller.rb +43 -0
  8. data/lib/crystal/controller/processors/controller_caller.rb +40 -0
  9. data/lib/crystal/controller/processors/controller_error_handling.rb +53 -0
  10. data/lib/crystal/controller/processors/controller_logger.rb +13 -0
  11. data/lib/crystal/controller.rb +28 -0
  12. data/lib/crystal/conveyor/conveyor.rb +74 -0
  13. data/lib/crystal/conveyor/conveyors.rb +20 -0
  14. data/lib/crystal/conveyor/params.rb +22 -0
  15. data/lib/crystal/conveyor/processor.rb +68 -0
  16. data/lib/crystal/conveyor/processors/conveyor_logger.rb +24 -0
  17. data/lib/crystal/conveyor/workspace.rb +36 -0
  18. data/lib/crystal/conveyor.rb +29 -0
  19. data/lib/crystal/environment/config.rb +118 -0
  20. data/lib/crystal/environment/dependency_resolver.rb +107 -0
  21. data/lib/crystal/environment/environment.rb +5 -0
  22. data/lib/crystal/environment/files_helper.rb +42 -0
  23. data/lib/crystal/environment/logger.rb +21 -0
  24. data/lib/crystal/environment.rb +52 -0
  25. data/lib/crystal/html/controller_helpers/controller_url_helper.rb +52 -0
  26. data/lib/crystal/html/controller_helpers/flash_helper.rb +5 -0
  27. data/lib/crystal/html/flash.rb +40 -0
  28. data/lib/crystal/html/include_into_controller.rb +24 -0
  29. data/lib/crystal/html/processors/prepare_flash.rb +26 -0
  30. data/lib/crystal/html/processors/scoped_params.rb +30 -0
  31. data/lib/crystal/html/view_helpers/basic_html_helper.rb +83 -0
  32. data/lib/crystal/html/view_helpers/form_helper.rb +104 -0
  33. data/lib/crystal/html/view_helpers/javascript_helper.rb +18 -0
  34. data/lib/crystal/html/view_helpers/model_helper.rb +119 -0
  35. data/lib/crystal/html/view_helpers/view_url_helper.rb +66 -0
  36. data/lib/crystal/html.rb +28 -0
  37. data/lib/crystal/http/http.rb +21 -0
  38. data/lib/crystal/http/http_adapter.rb +30 -0
  39. data/lib/crystal/http/middleware/static_files.rb +20 -0
  40. data/lib/crystal/http/processors/evaluate_format.rb +22 -0
  41. data/lib/crystal/http/processors/http_logger.rb +15 -0
  42. data/lib/crystal/http/processors/http_writer.rb +48 -0
  43. data/lib/crystal/http/processors/prepare_params.rb +24 -0
  44. data/lib/crystal/http/rack_config.rb +15 -0
  45. data/lib/crystal/http/support/rack/rack_adapter.rb +65 -0
  46. data/lib/crystal/http/support/rack/request.rb +12 -0
  47. data/lib/crystal/http/support/rack/response.rb +39 -0
  48. data/lib/crystal/http.rb +47 -0
  49. data/lib/crystal/mailer/mail.rb +7 -0
  50. data/lib/crystal/mailer.rb +13 -0
  51. data/lib/crystal/profiles/web.rb +69 -0
  52. data/lib/crystal/profiles/web_require.rb +5 -0
  53. data/lib/crystal/remote/processors/remote_caller.rb +54 -0
  54. data/lib/crystal/remote/processors/remote_logger.rb +13 -0
  55. data/lib/crystal/remote/remote.rb +15 -0
  56. data/lib/crystal/remote.rb +9 -0
  57. data/lib/crystal/router/configurator.rb +23 -0
  58. data/lib/crystal/router/default_format_processor.rb +12 -0
  59. data/lib/crystal/router/default_router.rb +23 -0
  60. data/lib/crystal/router/named_router.rb +63 -0
  61. data/lib/crystal/router/processors/router.rb +22 -0
  62. data/lib/crystal/router/router.rb +218 -0
  63. data/lib/crystal/router/routing_helper.rb +17 -0
  64. data/lib/crystal/router.rb +19 -0
  65. data/lib/crystal/spec/controller.rb +15 -0
  66. data/lib/crystal/spec/environment.rb +41 -0
  67. data/lib/crystal/spec/http.rb +67 -0
  68. data/lib/crystal/spec/mail.rb +20 -0
  69. data/lib/crystal/spec/remote.rb +9 -0
  70. data/lib/crystal/spec/view.rb +10 -0
  71. data/lib/crystal/spec/xhtml.rb +33 -0
  72. data/lib/crystal/spec.rb +8 -0
  73. data/lib/crystal/support/active_support/micelaneous.rb +2 -0
  74. data/lib/crystal/support/active_support.rb +37 -28
  75. data/lib/crystal/support/addressable.rb +45 -0
  76. data/lib/crystal/support/buffered_logger.rb +38 -0
  77. data/lib/crystal/support/callbacks.rb +155 -0
  78. data/lib/crystal/support/exception.rb +21 -0
  79. data/lib/crystal/support/filters.rb +34 -0
  80. data/lib/crystal/support/format.rb +9 -0
  81. data/lib/crystal/support/gems.rb +12 -0
  82. data/lib/crystal/support/micon.rb +16 -0
  83. data/lib/crystal/support/mime.rb +11 -0
  84. data/lib/crystal/support/module.rb +44 -0
  85. data/lib/crystal/support/rson.rb +53 -0
  86. data/lib/crystal/support/ruby_ext_with_active_support.rb +4 -0
  87. data/lib/crystal/support/safe_hash.rb +135 -0
  88. data/lib/crystal/support/string.rb +26 -0
  89. data/lib/crystal/support.rb +42 -0
  90. data/lib/crystal/template/support/tilt.rb +68 -0
  91. data/lib/crystal/template/template.rb +244 -0
  92. data/lib/crystal/template/template_context.rb +57 -0
  93. data/lib/crystal/template.rb +21 -0
  94. data/lib/views/crystal_default_templates/development/error.html.erb +11 -0
  95. data/lib/views/crystal_default_templates/development/error.js.erb +1 -0
  96. data/readme.md +9 -5
  97. data/spec/_mailer/basic_spec.rb +110 -0
  98. data/spec/_mailer/helper.rb +6 -0
  99. data/spec/controller/abstract_controller_spec/views/OperationsOrderSpec/action.erb +1 -0
  100. data/spec/controller/abstract_controller_spec/views/ViewVariablesSpec/action.erb +10 -0
  101. data/spec/controller/abstract_controller_spec.rb +138 -0
  102. data/spec/controller/controller_context_spec/views/ItemSpec/actions.erb +4 -0
  103. data/spec/controller/controller_context_spec/views/ItemSpec/show.erb +0 -0
  104. data/spec/controller/controller_context_spec/views/ItemSpec/update.erb +0 -0
  105. data/spec/controller/controller_context_spec/views/NamespaceSpec/ClassSpec/show.erb +0 -0
  106. data/spec/controller/controller_context_spec/views/PageSpec/actions.erb +3 -0
  107. data/spec/controller/controller_context_spec/views/PageSpec/show.erb +0 -0
  108. data/spec/controller/controller_context_spec/views/namespace_spec/class_spec/update.erb +0 -0
  109. data/spec/controller/controller_context_spec.rb +123 -0
  110. data/spec/controller/controller_helper_spec/views/HelperMethodSpec/action.erb +1 -0
  111. data/spec/controller/controller_helper_spec/views/HelperSpec/action.erb +1 -0
  112. data/spec/controller/controller_helper_spec.rb +58 -0
  113. data/spec/controller/controller_render_spec/views/AlreadyRenderedSpec/action.erb +1 -0
  114. data/spec/controller/controller_render_spec/views/AlreadyRenderedSpec/custom_template.erb +1 -0
  115. data/spec/controller/controller_render_spec/views/AnotherActionSpec/another_action.erb +1 -0
  116. data/spec/controller/controller_render_spec/views/AnotherLayout/action.erb +1 -0
  117. data/spec/controller/controller_render_spec/views/ExplicitRenderSpec/action.erb +1 -0
  118. data/spec/controller/controller_render_spec/views/ExplicitRenderSpec/another_action.erb +1 -0
  119. data/spec/controller/controller_render_spec/views/ForbidPartialAsActionSpec/_action.erb +1 -0
  120. data/spec/controller/controller_render_spec/views/FormatSpec/action.html.erb +1 -0
  121. data/spec/controller/controller_render_spec/views/FormatSpec/action.js.erb +1 -0
  122. data/spec/controller/controller_render_spec/views/LayoutFiltersSpec/action_with_layout.erb +1 -0
  123. data/spec/controller/controller_render_spec/views/LayoutFiltersSpec/action_without_layout.erb +1 -0
  124. data/spec/controller/controller_render_spec/views/LayoutSpec/action.erb +1 -0
  125. data/spec/controller/controller_render_spec/views/layouts/admin.erb +1 -0
  126. data/spec/controller/controller_render_spec/views/layouts/app.html.erb +1 -0
  127. data/spec/controller/controller_render_spec/views/layouts/app.js.erb +1 -0
  128. data/spec/controller/controller_render_spec/views/some_template.erb +1 -0
  129. data/spec/controller/controller_render_spec/views/standalone.html.erb +1 -0
  130. data/spec/controller/controller_render_spec.rb +192 -0
  131. data/spec/controller/error_handling_spec/views/diferrent_error_handling_spec/a.erb +1 -0
  132. data/spec/controller/error_handling_spec/views/diferrent_error_handling_spec/b.erb +1 -0
  133. data/spec/controller/error_handling_spec/views/diferrent_error_handling_spec/c.erb +1 -0
  134. data/spec/controller/error_handling_spec.rb +97 -0
  135. data/spec/controller/helper.rb +21 -0
  136. data/spec/controller/http_controller_spec.rb +90 -0
  137. data/spec/conveyor/conveyor_spec.rb +124 -0
  138. data/spec/conveyor/helper.rb +8 -0
  139. data/spec/environment/_dependency_resolver_spec.rb +50 -0
  140. data/spec/environment/environment_spec/app/app_plugin/config/ec_layout +1 -0
  141. data/spec/environment/environment_spec/app/app_plugin/ec_some_file +1 -0
  142. data/spec/environment/environment_spec/app/config/config.test.yml +1 -0
  143. data/spec/environment/environment_spec/app/config/config.yml +2 -0
  144. data/spec/environment/environment_spec/gem_plugin/config/ec_layout +1 -0
  145. data/spec/environment/environment_spec.rb +87 -0
  146. data/spec/environment/helper.rb +4 -0
  147. data/spec/environment/logger_spec.rb +20 -0
  148. data/spec/environment/minimal_app_spec/app.rb +3 -0
  149. data/spec/environment/minimal_app_spec.rb +29 -0
  150. data/spec/environment/standard_app_spec.rb +65 -0
  151. data/spec/environment/standard_app_spec_data/config/init.rb +18 -0
  152. data/spec/environment/standard_app_spec_data/plugin_a/plugin_a.rb +7 -0
  153. data/spec/html/basic_html_helper_spec.rb +30 -0
  154. data/spec/html/flash_spec.rb +185 -0
  155. data/spec/html/form_helper_spec.rb +57 -0
  156. data/spec/html/helper.rb +31 -0
  157. data/spec/html/javascript_helper_spec.rb +16 -0
  158. data/spec/html/model_helper_spec.rb +66 -0
  159. data/spec/html/scoped_params_spec.rb +18 -0
  160. data/spec/html/url_helper_spec.rb +152 -0
  161. data/spec/http/helper.rb +9 -0
  162. data/spec/http/http_spec.rb +57 -0
  163. data/spec/http/http_spec_data/config/init.rb +7 -0
  164. data/spec/http/http_spec_data/plugin_b/plugin_b.rb +6 -0
  165. data/spec/integration/basic_spec/views/smoke_test_spec/action.erb +1 -0
  166. data/spec/integration/basic_spec.rb +83 -0
  167. data/spec/integration/helper.rb +10 -0
  168. data/spec/remote/helper.rb +20 -0
  169. data/spec/remote/remote_spec.rb +76 -0
  170. data/spec/router/basic_spec.rb +131 -0
  171. data/spec/router/configurator_spec.rb +30 -0
  172. data/spec/router/helper.rb +23 -0
  173. data/spec/router/integration_spec.rb +43 -0
  174. data/spec/support/callbacks_spec.rb +155 -0
  175. data/spec/support/filters_spec.rb +61 -0
  176. data/spec/support/helper.rb +7 -0
  177. data/spec/support/safe_hash_spec.rb +84 -0
  178. data/spec/template/helper.rb +8 -0
  179. data/spec/template/template_spec/file.erb +1 -0
  180. data/spec/template/template_spec/views/basic/custom_context.erb +1 -0
  181. data/spec/template/template_spec/views/basic/extension.erb +1 -0
  182. data/spec/template/template_spec/views/basic/general.html.erb +5 -0
  183. data/spec/template/template_spec/views/basic/non_existing_format.html.erb +0 -0
  184. data/spec/template/template_spec/views/format/format.erb +1 -0
  185. data/spec/template/template_spec/views/format/format.html.erb +1 -0
  186. data/spec/template/template_spec/views/format/format.js.erb +1 -0
  187. data/spec/template/template_spec/views/layout/basic/content.erb +1 -0
  188. data/spec/template/template_spec/views/layout/basic/layout.erb +1 -0
  189. data/spec/template/template_spec/views/layout/content_for/content.erb +3 -0
  190. data/spec/template/template_spec/views/layout/content_for/layout.erb +3 -0
  191. data/spec/template/template_spec/views/layout/format/content.html.erb +1 -0
  192. data/spec/template/template_spec/views/layout/format/content.js.erb +1 -0
  193. data/spec/template/template_spec/views/layout/format/layout.html.erb +1 -0
  194. data/spec/template/template_spec/views/layout/format/layout.js.erb +1 -0
  195. data/spec/template/template_spec/views/layout/nested_yield/a.erb +1 -0
  196. data/spec/template/template_spec/views/layout/nested_yield/layout.erb +1 -0
  197. data/spec/template/template_spec/views/layout/nested_yield/layout_b.erb +1 -0
  198. data/spec/template/template_spec/views/layout/same_context/a.erb +1 -0
  199. data/spec/template/template_spec/views/layout/same_context/b.erb +1 -0
  200. data/spec/template/template_spec/views/layout/same_context/layout.erb +1 -0
  201. data/spec/template/template_spec/views/nested/format/a.erb +1 -0
  202. data/spec/template/template_spec/views/nested/format/b.erb +1 -0
  203. data/spec/template/template_spec/views/nested/relative/a.erb +1 -0
  204. data/spec/template/template_spec/views/nested/relative/b.erb +1 -0
  205. data/spec/template/template_spec/views/nested/relative/c.erb +1 -0
  206. data/spec/template/template_spec/views/nested/shared/c.erb +1 -0
  207. data/spec/template/template_spec/views/nesting_format/_dialog.html.erb +1 -0
  208. data/spec/template/template_spec/views/nesting_format/_form.html.erb +1 -0
  209. data/spec/template/template_spec/views/nesting_format/dialog.js.erb +1 -0
  210. data/spec/template/template_spec/views/other/template.erb +1 -0
  211. data/spec/template/template_spec/views/prefixes/_underscored.erb +1 -0
  212. data/spec/template/template_spec/views/prefixes/without_prefix.erb +1 -0
  213. data/spec/template/template_spec.rb +190 -0
  214. data/spec/template/tilt_spec/views/concat_and_capture.erb +1 -0
  215. data/spec/template/tilt_spec/views/concat_and_capture.haml +3 -0
  216. data/spec/template/tilt_spec/views/errors.erb +3 -0
  217. data/spec/template/tilt_spec/views/errors.haml +3 -0
  218. data/spec/template/tilt_spec/views/mixed_templates/broken_erb_concat_erb.erb +4 -0
  219. data/spec/template/tilt_spec/views/mixed_templates/broken_erb_concat_haml.haml +1 -0
  220. data/spec/template/tilt_spec/views/mixed_templates/broken_haml_concat_erb.erb +1 -0
  221. data/spec/template/tilt_spec/views/mixed_templates/broken_haml_concat_haml.haml +2 -0
  222. data/spec/template/tilt_spec/views/nested_capture_and_concat.haml +3 -0
  223. data/spec/template/tilt_spec/views/ugly.haml +3 -0
  224. data/spec/template/tilt_spec/views/yield.erb +1 -0
  225. data/spec/template/tilt_spec.rb +97 -0
  226. metadata +345 -205
  227. data/.git/COMMIT_EDITMSG +0 -1
  228. data/.git/FETCH_HEAD +0 -1
  229. data/.git/HEAD +0 -1
  230. data/.git/ORIG_HEAD +0 -1
  231. data/.git/config +0 -12
  232. data/.git/description +0 -1
  233. data/.git/hooks/applypatch-msg.sample +0 -15
  234. data/.git/hooks/commit-msg.sample +0 -24
  235. data/.git/hooks/post-commit.sample +0 -8
  236. data/.git/hooks/post-receive.sample +0 -15
  237. data/.git/hooks/post-update.sample +0 -8
  238. data/.git/hooks/pre-applypatch.sample +0 -14
  239. data/.git/hooks/pre-commit.sample +0 -46
  240. data/.git/hooks/pre-rebase.sample +0 -169
  241. data/.git/hooks/prepare-commit-msg.sample +0 -36
  242. data/.git/hooks/update.sample +0 -128
  243. data/.git/index +0 -0
  244. data/.git/info/exclude +0 -6
  245. data/.git/logs/HEAD +0 -21
  246. data/.git/logs/refs/heads/master +0 -21
  247. data/.git/logs/refs/remotes/origin/master +0 -19
  248. data/.git/objects/00/c26dc781c8997ed2bfa61f03b323466a3860d1 +0 -0
  249. data/.git/objects/04/03ee94b34a5760c46616cd13c317e69cb90d56 +0 -0
  250. data/.git/objects/04/6f30de5fd9fe81fd558c58091c38a57b6be727 +0 -0
  251. data/.git/objects/05/78d884154d5a74143844a4373121e8d9fa6abd +0 -0
  252. data/.git/objects/06/8c594d16214cbee3ad8e9f4eae9c78f6a9ddf1 +0 -3
  253. data/.git/objects/08/8b766b31125f7c4ae34a8fc50b23842cd3d329 +0 -0
  254. data/.git/objects/09/66c6b45bacaae9282463b9b4c0ce8488bbcee5 +0 -2
  255. data/.git/objects/09/a40c814899fcdadc2bd5665e892a7db26a3677 +0 -2
  256. data/.git/objects/0c/eac702c4548a2748f50793ea5108cfd4937568 +0 -0
  257. data/.git/objects/0d/03131f9fbc3e2fb1f8f9b616ac273d05f3a7f5 +0 -0
  258. data/.git/objects/0e/50f691a65b41ba9e7df9d6738ff9f333089b34 +0 -0
  259. data/.git/objects/11/72a42d5efc6cb442f877bef4427321a216990a +0 -1
  260. data/.git/objects/12/3a3f6e3c82bb8df88e242085deef1aa150039c +0 -0
  261. data/.git/objects/14/6253750089fd522535155630344c8ff2a60830 +0 -0
  262. data/.git/objects/15/3d7375df50713dd61152db972492405e5475e0 +0 -0
  263. data/.git/objects/15/f5669d470665c6bd28b5ab7b65431e199c36e9 +0 -0
  264. data/.git/objects/1b/d4b59edc03948d15434e9eb882c769ab779ba6 +0 -0
  265. data/.git/objects/1c/abe7402ff0ea8bbf7a63cee7a61dec7578dae9 +0 -0
  266. data/.git/objects/20/fb67fdc8a63361a3d317d3c873462fd5a338d0 +0 -0
  267. data/.git/objects/21/4bb3dd51d883243c744ee3d668e09a0c1cc293 +0 -0
  268. data/.git/objects/23/9d84cdccd97f779f60c08f88ab635f4c236e87 +0 -0
  269. data/.git/objects/27/510002446b0a1405c1e7f14634c28407dffa76 +0 -0
  270. data/.git/objects/28/4db1992e17d1d5fc9280dc4e79799958a9cbac +0 -0
  271. data/.git/objects/28/69649fc37831734b82493fe980f9dc65dfd935 +0 -0
  272. data/.git/objects/28/a3d1b3c79d0e59b8359ecd75e4ec0d62f60468 +0 -2
  273. data/.git/objects/29/53f684e47235f5b14b4beb0b0bb61c8e520dd8 +0 -0
  274. data/.git/objects/2c/b339709e1fb005a3e3006e76558d2e45333008 +0 -0
  275. data/.git/objects/2d/077a401db466ea0b1f062eac15293879293439 +0 -0
  276. data/.git/objects/2e/2f635a49a032cb37d69af4862181bb37bfa0fa +0 -0
  277. data/.git/objects/31/0f7c970910eced673e858c197f6ee418e97545 +0 -0
  278. data/.git/objects/34/7475671d8fbc0e870ce9ec1c6f275ddd90f1db +0 -0
  279. data/.git/objects/36/479605ef7fc62ec68841284083e171bcb3b2c2 +0 -2
  280. data/.git/objects/37/1221704ea1da5a27626855e82076565fb58cac +0 -0
  281. data/.git/objects/38/3af6cb155addf818eb9396229892743112dbc3 +0 -0
  282. data/.git/objects/3a/97679c02b93c246d359a6f663b513691e37991 +0 -0
  283. data/.git/objects/3b/101bd6fccf79321048448c8384029c8768ec01 +0 -0
  284. data/.git/objects/3d/4a702963039cf32ac2ca91c37669e78625f92b +0 -0
  285. data/.git/objects/40/55426e988e151ac26792ec17bf31d04c606377 +0 -0
  286. data/.git/objects/42/828defbc95389daf9bfa11c8b2341f98303ee7 +0 -0
  287. data/.git/objects/44/b6d8df4e1f924caeb7de56135c251ce24998fd +0 -0
  288. data/.git/objects/46/42a59703e31a105aa67c4511be5e41402d08af +0 -0
  289. data/.git/objects/49/22dc7ff543c31059ef3979c51ab36cdf74367e +0 -0
  290. data/.git/objects/49/3a5d4dfc291e68321e15120dd9ca15388817ff +0 -0
  291. data/.git/objects/4a/787ce4e048fe15df728e9b5e9170f087b0bcde +0 -4
  292. data/.git/objects/4b/f9324fefa911db32f9d75461842e3420254e7f +0 -0
  293. data/.git/objects/4d/ada0b46f7aedd3da02dbec0daef667b3903765 +0 -0
  294. data/.git/objects/50/dfa247b62156c4eb6371c8a68054c63aa1f075 +0 -2
  295. data/.git/objects/53/ae2a3872c30d9242b5ea4a609165c02da18392 +0 -0
  296. data/.git/objects/56/43b861a644b727a8b54ae003977151d975f360 +0 -0
  297. data/.git/objects/57/5fdffb0b6f624c9d2676964603788264ed7b28 +0 -0
  298. data/.git/objects/5a/53898e77d291396aeb2b7255d97d185b92cad2 +0 -0
  299. data/.git/objects/5c/bb5fbba6c1b72af9e412047c50e8629c681d72 +0 -1
  300. data/.git/objects/5e/11ba5e0794a914747bae95b942b2dbeb5c36c3 +0 -0
  301. data/.git/objects/5e/22424fba117a89e563604e2e55fca82ef7547a +0 -0
  302. data/.git/objects/5e/90e483ed4782b9a2a834280c6ad5e7711462fa +0 -0
  303. data/.git/objects/5e/f6eb87941331580ede445399654f199a9a6156 +0 -0
  304. data/.git/objects/5f/2b8b8c9f16877c91fda9a177e235698103c4c9 +0 -0
  305. data/.git/objects/61/8d3d8348db1739ba171f7db3effb3c7244bf3b +0 -2
  306. data/.git/objects/62/b4bbd793a5a9ad8b0f24ef657b973afbfcf3cf +0 -0
  307. data/.git/objects/62/fa8ffcffcedc680a953c2e01ca9312e60807b0 +0 -0
  308. data/.git/objects/63/82b66d637e3d04e78a6272e25d3e212de90a10 +0 -0
  309. data/.git/objects/65/b8ba705a4a439a8b26df539f10b97d6ca4988d +0 -1
  310. data/.git/objects/66/aa791f24ea2ed8717abe3d1c74da4ad544723d +0 -0
  311. data/.git/objects/68/02f5c496f00787242a9fa1a81eb9847071e076 +0 -0
  312. data/.git/objects/69/b1b39f438eb902f68ddd438119d2e74633d16f +0 -0
  313. data/.git/objects/6c/a1abc3f9fe344fddcedb7163848fe6111717ae +0 -0
  314. data/.git/objects/6d/003cf32b629086b5714d3ba0cb6b3ae296ff4e +0 -0
  315. data/.git/objects/6e/4e5c95547a5e088db2d6a9d3b52c446cfec1fb +0 -0
  316. data/.git/objects/6f/2b5882b4cb9c2ef42902433076b58ef5ce44b9 +0 -0
  317. data/.git/objects/71/d7d7da97da36d9899873715ccd080c2793cbe9 +0 -0
  318. data/.git/objects/7a/64ac4146eb137a2667085fbddfea97cc727bb7 +0 -2
  319. data/.git/objects/7b/47a3e0c3fb6407567185df38e031cb54179c6e +0 -0
  320. data/.git/objects/7c/34481a926b48e49767828aa8a3bbeeeb26643e +0 -0
  321. data/.git/objects/7c/4fb1fb0dfa094010b07e489dd6feaa0b15c316 +0 -0
  322. data/.git/objects/7d/97e0e697055b4fbf915cc3d662d4599b3b1477 +0 -0
  323. data/.git/objects/7f/0673a63b426d7025b0a11de29083490264b350 +0 -0
  324. data/.git/objects/81/031da1db90c4cd43fe27336054d76564dbe64c +0 -3
  325. data/.git/objects/81/1ad37e54ba756ff8d3acbbad733e43631c2de8 +0 -3
  326. data/.git/objects/81/f505f109391e66ba3de39165c66c41b8e5e0bb +0 -0
  327. data/.git/objects/82/1912a397a9029beb4d74f407a6ad4b8e36f2f2 +0 -0
  328. data/.git/objects/85/8d7587d219e75ac4eda5bc7b6d28e74d545146 +0 -0
  329. data/.git/objects/86/738c97b0d7ac8443a25cbcd0c4e147bcdb152e +0 -0
  330. data/.git/objects/86/edc0909929d735fe5e1cf8f8b46ad7fa2c1d60 +0 -0
  331. data/.git/objects/8b/722287d6667e73e07eab685f7bd7b32dbecb04 +0 -0
  332. data/.git/objects/8b/ef303f65e1da2f9054b8912cb952718ef99bba +0 -0
  333. data/.git/objects/8c/572af4f04bcafb3c226a669fbc4dc508aed651 +0 -0
  334. data/.git/objects/8d/a995e65577a82011df060b13a498f0a738d017 +0 -0
  335. data/.git/objects/8e/1980f27fbc85de9d530e3946ad9f4e78b96107 +0 -0
  336. data/.git/objects/8e/5b69ea615859da8ee6d7848ca754d8cca5ffc5 +0 -0
  337. data/.git/objects/90/cfb8df76866f20a0c9c4adfb6d5d1faebad9d3 +0 -0
  338. data/.git/objects/9f/e781c5e0fe8f889aefb163da0b52f9cf25ec1f +0 -2
  339. data/.git/objects/a4/fd740f28646783c68d1db592fa65a983d73e7b +0 -0
  340. data/.git/objects/a7/618ca140c7c16536cdbd864c8264d4e738d508 +0 -0
  341. data/.git/objects/a9/38b272a1a743d7e30caa05b5513760195ec0a8 +0 -4
  342. data/.git/objects/a9/4c0880d370e61595adda4af6e91209437265aa +0 -0
  343. data/.git/objects/aa/2420e96b6dcb848de2a8ea393c28a0314eda6e +0 -2
  344. data/.git/objects/aa/ddfc59430a3fb268bd5c97a088ea4bfdb2db07 +0 -0
  345. data/.git/objects/ac/3226f3722e8ea60a4ddcbc5b4a30d305fbdf50 +0 -0
  346. data/.git/objects/ad/8ddf80de972b932bc955c672c29e21f948367f +0 -0
  347. data/.git/objects/ad/994f9b41e5bc6fd188de9aa8adefe6b5515ed6 +0 -3
  348. data/.git/objects/af/606f60f63c31341fd75ec557e073435327cf82 +0 -0
  349. data/.git/objects/b1/244bb3652d56ebe4b465468e214d1a1fa87ebb +0 -1
  350. data/.git/objects/b2/1be06405e5a7e2db12e03d6a781c759b305a72 +0 -0
  351. data/.git/objects/b2/a45e92c20d09897c984186472f616c0af6b5d3 +0 -2
  352. data/.git/objects/b3/39ab5d14998e1bb098eb0b807fb9b53ecc790b +0 -0
  353. data/.git/objects/b3/838491c1c451ff8680fe25a7288d79e22c5ee9 +0 -1
  354. data/.git/objects/b4/e715329ba853104d19112487b1188571bca659 +0 -0
  355. data/.git/objects/b5/010cc435a10af9518f125b67851576c1e74835 +0 -0
  356. data/.git/objects/b5/9d6a5f9325cbd5a7ce3b351b51db1f1b6d58f9 +0 -0
  357. data/.git/objects/b6/e185313a1e82513d52144e80d97c4e7217a6b0 +0 -0
  358. data/.git/objects/b8/bd01ebc6defac18710776615168beb4e251e87 +0 -2
  359. data/.git/objects/b8/ca44e136c1392f27f617801a9ea908eaf45d0b +0 -0
  360. data/.git/objects/ba/c39f505b90f6e64cff088337293912161a4ca5 +0 -0
  361. data/.git/objects/bb/c21a34b3d2ddd51f3e39ddef3c6811aaa26305 +0 -0
  362. data/.git/objects/bf/1e07cd3085bed5be7f3ca1860ec8c14d0fdebb +0 -0
  363. data/.git/objects/bf/4d123f34ecf86a041a5d8df32beb6e1b24dfed +0 -0
  364. data/.git/objects/c0/aa97f36a0fdf80be4ca530ecf0ff7ec23fc313 +0 -0
  365. data/.git/objects/c2/759026a46887f199c46ee60ef9764fed87c7af +0 -0
  366. data/.git/objects/c3/6838a35e7acdbe40a8e762aa92e143d6be8376 +0 -0
  367. data/.git/objects/c5/73778609d449286e4eb5177d34e3c77b0cf520 +0 -0
  368. data/.git/objects/c5/945ab6909de8dd7f9e192a67fe72db2a7f5740 +0 -0
  369. data/.git/objects/c5/ef2f6ac4ee5779fa79f7afb54a458191352e86 +0 -0
  370. data/.git/objects/c6/c08bf8bd35fcf7fc9127a482badd7a9ff48ba2 +0 -0
  371. data/.git/objects/c6/c8485326187c9c872dedc68d71a2fe3ad15446 +0 -0
  372. data/.git/objects/cc/0b74e32ae045d3208839aa91d0dc94f5ea4c09 +0 -0
  373. data/.git/objects/cc/dd62a9a3a9e16e487495294c19ac64da9516d0 +0 -3
  374. data/.git/objects/cf/8ccc732db70ccfb4e185f78dc03512b04fb4f6 +0 -0
  375. data/.git/objects/d2/6b6bac449e70757e718bf023bd3c327b3f231c +0 -0
  376. data/.git/objects/d3/b4580aaa3c069e320b941dd23f56a474cd6caa +0 -3
  377. data/.git/objects/d4/5dffe5792c4d873de1cc233ec8992e9a9f8df5 +0 -0
  378. data/.git/objects/d7/ea5d3d4b7fdcc93771304fee8d5261f6469f28 +0 -0
  379. data/.git/objects/d8/53eba81fc4b75fbc90cf8c39f4b1344deddc9f +0 -0
  380. data/.git/objects/d8/de40b222d79af7bdb2b1ae59944fc3b0dd0f05 +0 -0
  381. data/.git/objects/df/39c68e0de1bee1b87beeb44170f52db5da2317 +0 -0
  382. data/.git/objects/df/e23416f16c0bb6c98ca2a0b1d02d803ff53831 +0 -0
  383. data/.git/objects/df/ee793cf3fd89820e5a9a4481d35000d75040d9 +0 -0
  384. data/.git/objects/e0/f7b971a634e34d7976676a4d575c654746a5f8 +0 -0
  385. data/.git/objects/e2/6ee4ee0aae4b71ab0fae46952e858050eb6380 +0 -0
  386. data/.git/objects/e5/134d62f67ad64eb79b139bb86ed8af711704d4 +0 -0
  387. data/.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
  388. data/.git/objects/e8/2061e7bc928cd8df2a4ac34848bd670d7cb29c +0 -0
  389. data/.git/objects/e8/2e9ddde8094f4d6f4871abe19f82acce46cafe +0 -0
  390. data/.git/objects/e9/0b6867602c5754080219c30aee275f3aa10b49 +0 -0
  391. data/.git/objects/e9/8264a4555c2b9436f7c8633575eb5cea338e35 +0 -0
  392. data/.git/objects/eb/86cc8e7187bdb75267a4e5ba1c5d4d4b200c98 +0 -0
  393. data/.git/objects/ee/282c9448793de0bd2df8348e0f4fd6cb1b8f2f +0 -0
  394. data/.git/objects/f0/2d1b4f22ec5df7fc658d4616cac5e5250e033b +0 -0
  395. data/.git/objects/f3/8245046bfe9c478a502c58b1c1434f382800d3 +0 -0
  396. data/.git/objects/f3/e1d5f3bc635974bf9410cb87d21bb3ad29da6b +0 -0
  397. data/.git/objects/f6/3c2e6d83a07cf107ff63a6b92a72a0ac5e9e3f +0 -0
  398. data/.git/objects/f8/a51fe3b4da3e5616ee4606fc71ef1915162853 +0 -0
  399. data/.git/objects/fb/0a0717fd1a64bfe6de89e84ce2f320e9bca527 +0 -0
  400. data/.git/objects/fc/794047fc246572581a7fdce016e1be6b8ab61a +0 -0
  401. data/.git/objects/fe/d4da51927e4d0b97d071611a3cb0c7c484938d +0 -0
  402. data/.git/objects/ff/db1bde1735cee2b62d80bf8151ae98515069b4 +0 -0
  403. data/.git/refs/heads/master +0 -1
  404. data/.git/refs/remotes/origin/master +0 -1
  405. data/.gitignore +0 -3
  406. data/bin/crystal_console +0 -45
  407. data/bin/crystal_new +0 -3
  408. data/bin/crystal_server +0 -6
  409. data/lib/crystal/core/config.rb +0 -52
  410. data/lib/crystal/core/crystal.rb +0 -40
  411. data/lib/crystal/core/remote.rb +0 -8
  412. data/lib/crystal/core/router.rb +0 -39
  413. data/lib/crystal/core/scopes.rb +0 -4
  414. data/lib/crystal/rack/adapter.rb +0 -57
  415. data/lib/crystal/rack/middleware/static_files.rb +0 -27
  416. data/lib/crystal/rack/rack_app.rb +0 -96
  417. data/lib/crystal/rack/support.rb +0 -55
  418. data/lib/crystal.rb +0 -37
  419. data/rakefile +0 -70
@@ -0,0 +1,192 @@
1
+ require 'rspec_ext'
2
+ require "#{__FILE__.dirname}/helper"
3
+
4
+ describe "Controller render" do
5
+ with_environment :test
6
+ with_abstract_controller_spec
7
+
8
+ before :all do
9
+ @dir = "#{File.expand_path(File.dirname(__FILE__))}/controller_render_spec"
10
+ $LOAD_PATH << @dir
11
+ AbstractController = Crystal::AbstractController
12
+ end
13
+
14
+ after :all do
15
+ $LOAD_PATH.delete @dir
16
+ remove_constants %w(
17
+ LayoutFiltersSpec
18
+ LayoutSpec
19
+ AnotherLayout
20
+ ExplicitRenderSpec
21
+ RenderInsideOfControllerSpec
22
+ ForbidPartialAsActionSpec
23
+ FormatSpec
24
+ AlreadyRenderedSpec
25
+ SpecialFormatSpec
26
+ AnotherActionSpec
27
+ InlineRenderSpec
28
+ AbstractController
29
+ )
30
+ end
31
+
32
+ describe 'layout' do
33
+ it "should use :except and :only in layout" do
34
+ class ::LayoutFiltersSpec
35
+ inherit AbstractController
36
+ layout '/layouts/app', :only => :action_with_layout
37
+
38
+ def action_with_layout; end
39
+ def action_without_layout; end
40
+ end
41
+
42
+ ccall(LayoutFiltersSpec, :action_with_layout).content.should == "Layout html, content"
43
+ ccall(LayoutFiltersSpec, :action_without_layout).content.should == "content"
44
+ end
45
+
46
+ it "should apply formats to layout" do
47
+ class LayoutSpec
48
+ inherit AbstractController
49
+ layout '/layouts/app'
50
+
51
+ def action; end
52
+ end
53
+
54
+ ccall(LayoutSpec, :action, :format => :html).content.should == "Layout html, content"
55
+ ccall(LayoutSpec, :action, :format => :js).content.should == "Layout js, content"
56
+ end
57
+
58
+ it "should take :layout => false or :layout => '/another_layout'" do
59
+ class AnotherLayout
60
+ inherit AbstractController
61
+ layout '/layout/app'
62
+
63
+ def action; end
64
+
65
+ def without_layout
66
+ render :action => 'action', :layout => false
67
+ end
68
+
69
+ def another_layout
70
+ render :action => 'action', :layout => '/layouts/admin'
71
+ end
72
+ end
73
+
74
+ ccall(AnotherLayout, :without_layout).content.should == "action"
75
+ ccall(AnotherLayout, :another_layout).content.should == "Admin layout, action"
76
+ end
77
+
78
+
79
+ it "explicitly rendered action shold be rendered with layout but template without" do
80
+ class ::ExplicitRenderSpec
81
+ inherit AbstractController
82
+ layout '/layouts/app'
83
+
84
+ def another_action; end
85
+
86
+ def action
87
+ render :action => 'another_action'
88
+ end
89
+
90
+ def render_template
91
+ render '/some_template'
92
+ end
93
+ end
94
+
95
+ ccall(ExplicitRenderSpec, :action).content.should == "Layout html, another action"
96
+ ccall(ExplicitRenderSpec, :render_template).content.should == "some template"
97
+ end
98
+ end
99
+
100
+ it "inside of controller" do
101
+ class ::RenderInsideOfControllerSpec
102
+ inherit AbstractController
103
+
104
+ def some_action
105
+ render '/some_template'
106
+ end
107
+ end
108
+
109
+ ccall(RenderInsideOfControllerSpec, 'some_action').content.should == "some template"
110
+ end
111
+
112
+ it "should not allow to render partials as actions" do
113
+ class ::ForbidPartialAsActionSpec
114
+ inherit AbstractController
115
+ def action; end
116
+ end
117
+
118
+ lambda{ccall ForbidPartialAsActionSpec, :action}.should raise_error(/No template/)
119
+ end
120
+
121
+ it "should render view with right format" do
122
+ class FormatSpec
123
+ inherit AbstractController
124
+ def action; end
125
+ end
126
+
127
+ ccall(FormatSpec, :action, :format => :html).content.should == "html format"
128
+ ccall(FormatSpec, :action, :format => :js).content.should == "js format"
129
+ end
130
+
131
+ it "should be able to use Template.render for different purposes (mail for example)" do
132
+ Crystal::Template.render("/standalone", :locals => {:a => 'a'}).should == 'standalone usage, a'
133
+ end
134
+
135
+ it "should not rener if already rendered in controller" do
136
+ class ::AlreadyRenderedSpec
137
+ inherit AbstractController
138
+
139
+ def action
140
+ render '/AlreadyRenderedSpec/custom_template'
141
+ end
142
+ end
143
+
144
+ ccall(AlreadyRenderedSpec, :action).content.should == 'custom content'
145
+ end
146
+
147
+ it "should handle serialization :json => obj (:xml, :js)" do
148
+ class ::SpecialFormatSpec
149
+ inherit AbstractController
150
+
151
+ def json_action
152
+ render :json => {:a => "b"}
153
+ end
154
+
155
+ def xml_action
156
+ render :xml => {:a => "b"}
157
+ end
158
+ end
159
+
160
+ ccall(SpecialFormatSpec, :json_action, :format => :json).content.should == %({"a":"b"})
161
+ ccall(SpecialFormatSpec, :xml_action, :format => :xml).content.should =~ /<a>b<\/a>/
162
+ lambda{
163
+ ccall(SpecialFormatSpec, :json_action, :format => :xml)
164
+ }.should raise_error(/responing with :json to the :xml/)
165
+ end
166
+
167
+ it "should render another action via :action => :action_name" do
168
+ class ::AnotherActionSpec
169
+ inherit AbstractController
170
+
171
+ def another_action; end
172
+
173
+ def action
174
+ render :action => 'another_action'
175
+ end
176
+ end
177
+
178
+ ccall(AnotherActionSpec, :action).content.should == "another action"
179
+ end
180
+
181
+ it "should take :inline => 'hi' option" do
182
+ class ::InlineRenderSpec
183
+ inherit AbstractController
184
+
185
+ def action
186
+ render :inline => "content"
187
+ end
188
+ end
189
+
190
+ ccall(InlineRenderSpec, :action).content.should == "content"
191
+ end
192
+ end
@@ -0,0 +1 @@
1
+ <% raise 'error in template' %>
@@ -0,0 +1,97 @@
1
+ require 'rspec_ext'
2
+ require "#{__FILE__.dirname}/helper"
3
+
4
+ describe "Error handling" do
5
+ with_environment :test
6
+
7
+ before :all do
8
+ @dir = "#{File.expand_path(File.dirname(__FILE__))}/error_handling_spec"
9
+ $LOAD_PATH << @dir
10
+ AbstractController = Crystal::AbstractController
11
+
12
+ crystal.before :environment do
13
+ crystal.config.test_error_template = crystal.config.development_error_template!
14
+ end
15
+
16
+ crystal.after :environment do
17
+ crystal.conveyors.web do |web|
18
+ web.use Crystal::Processors::ControllerErrorHandling, :content
19
+ web.use Crystal::Processors::ControllerCaller, :content
20
+ end
21
+ end
22
+ end
23
+
24
+ after :all do
25
+ $LOAD_PATH.delete @dir
26
+ remove_constants %w(
27
+ DisplayErrorWithFormat
28
+ DiferrentErrorHandlingSpec
29
+ AbstractController
30
+ )
31
+ end
32
+
33
+ it "should correctly display error messages in :development (with correct format)" do
34
+ class ::DisplayErrorWithFormat
35
+ inherit AbstractController
36
+
37
+ def method
38
+ raise params.error
39
+ end
40
+ end
41
+
42
+ config.environment = :development
43
+ silence_logger!
44
+
45
+ error = StandardError.new('some error')
46
+
47
+ ccall(
48
+ DisplayErrorWithFormat, :method,
49
+ {:error => error, :format => :html}
50
+ ).content.should =~ /html.+some error/m
51
+
52
+ ccall(
53
+ DisplayErrorWithFormat, :method,
54
+ {:error => error, :format => :js}
55
+ ).content.should =~ /some error/
56
+
57
+ ccall(
58
+ DisplayErrorWithFormat, :method,
59
+ {:error => error, :format => :non_existing_mime}
60
+ ).content.should =~ /some error/
61
+ end
62
+
63
+ describe "should be different in :test, :development and :production" do
64
+ before :all do
65
+ class ::DiferrentErrorHandlingSpec
66
+ inherit AbstractController
67
+
68
+ def a; end
69
+ def b
70
+ raise 'error in remote'
71
+ end
72
+ def c; end
73
+ end
74
+ end
75
+
76
+ it "in :production errors shouldn't be shown to user"
77
+
78
+ it "in development errors should be catched" do
79
+ config.environment = :development
80
+ silence_logger!
81
+
82
+ # with view
83
+ ccall(DiferrentErrorHandlingSpec, :a).content.should == 'a'
84
+ ccall(DiferrentErrorHandlingSpec, :b).content.should =~ /error in remote/
85
+ ccall(DiferrentErrorHandlingSpec, :c).content.should =~ /error in template/
86
+ end
87
+
88
+ it "should not catch errors in :test environment" do
89
+ config.environment = :test
90
+
91
+ # with render
92
+ ccall(DiferrentErrorHandlingSpec, :a).content.should == 'a'
93
+ lambda{ccall(DiferrentErrorHandlingSpec, :b)}.should raise_error(/error in remote/)
94
+ lambda{ccall(DiferrentErrorHandlingSpec, :c)}.should raise_error(/error in template/)
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,21 @@
1
+ dir = File.dirname __FILE__
2
+ crystal_dir = File.expand_path "#{dir}/../.."
3
+ lib_dir = "#{crystal_dir}/lib"
4
+ $LOAD_PATH << lib_dir unless $LOAD_PATH.include? lib_dir
5
+
6
+ require 'crystal/controller'
7
+ require 'crystal/http'
8
+
9
+ require 'crystal/spec'
10
+
11
+ RSpec::Core::ExampleGroup.class_eval do
12
+ def self.with_abstract_controller_spec
13
+ before :all do
14
+ crystal.after :environment do
15
+ crystal.conveyors.web do |web|
16
+ web.use Crystal::Processors::ControllerCaller, :content
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,90 @@
1
+ require 'rspec_ext'
2
+ require "#{__FILE__.dirname}/helper"
3
+
4
+ describe "HttpController" do
5
+ with_environment :test
6
+ with_http
7
+
8
+ before :all do
9
+ @dir = "#{File.expand_path(File.dirname(__FILE__))}/http_controller_spec"
10
+ $LOAD_PATH << @dir
11
+ HttpController = Crystal::HttpController
12
+
13
+ crystal.after :environment do
14
+ crystal.conveyors.web do |web|
15
+ web.use Crystal::Processors::HttpWriter, :content
16
+ web.use Crystal::Processors::ControllerCaller, :content
17
+ end
18
+ end
19
+ end
20
+
21
+ after :all do
22
+ $LOAD_PATH.delete @dir
23
+ remove_constants %w(
24
+ HttpController
25
+ ContentTypeSpec
26
+ StatusSpec
27
+ LocationSpec
28
+ ForbidGetSpec
29
+ )
30
+ end
31
+
32
+ describe 'render' do
33
+ it "should take :content_type option" do
34
+ class ::ContentTypeSpec
35
+ inherit HttpController
36
+
37
+ def action
38
+ render :inline => "some content", :content_type => Mime['js']
39
+ end
40
+ end
41
+
42
+ wcall(ContentTypeSpec, :action)
43
+ response.content_type.should == "application/javascript"
44
+ end
45
+
46
+ it "should take :status option" do
47
+ class ::StatusSpec
48
+ inherit HttpController
49
+
50
+ def action
51
+ render :inline => "some content", :status => 220
52
+ end
53
+ end
54
+
55
+ wcall(StatusSpec, :action)
56
+ response.status.should == 220
57
+ end
58
+
59
+ it "should take :location option" do
60
+ class ::LocationSpec
61
+ inherit HttpController
62
+
63
+ def action
64
+ render :location => "/", :status => 220
65
+ end
66
+ end
67
+
68
+ wcall(LocationSpec, :action)
69
+ response.location.should == "/"
70
+ response.status.should == 220
71
+ end
72
+ end
73
+
74
+ it "should be able to protect methods from GET request" do
75
+ class ::ForbidGetSpec
76
+ inherit HttpController
77
+ allow_get_for :get_action
78
+
79
+ def get_action; end
80
+ def post_action; end
81
+ end
82
+
83
+ workspace = {:env => {'REQUEST_METHOD' => 'GET'}}
84
+
85
+ wcall(ForbidGetSpec, :get_action, workspace, {})
86
+ lambda{
87
+ wcall(ForbidGetSpec, :post_action, workspace, {})
88
+ }.should raise_error(/not allowed/)
89
+ end
90
+ end
@@ -0,0 +1,124 @@
1
+ require "#{File.expand_path(File.dirname(__FILE__))}/helper"
2
+
3
+ describe "Conveyor" do
4
+ inject :conveyors => :conveyors
5
+
6
+ with_environment :development
7
+
8
+ def call_conveyor
9
+ r = conveyors.web.call(:result => [])
10
+ r.result
11
+ end
12
+
13
+ it "smoke test" do
14
+ class SmokeTestASpec < Crystal::Processor
15
+ def call
16
+ workspace.result << :a_before
17
+ next_processor.call
18
+ workspace.result << :a_after
19
+ end
20
+ end
21
+
22
+ class SmokeTestBSpec < Crystal::Processor
23
+ def call
24
+ crystal[:workspace].result << :b_before
25
+ next_processor.call
26
+ crystal[:workspace].result << :b_after
27
+ end
28
+ end
29
+
30
+ conveyors.web.use SmokeTestASpec
31
+ conveyors.web.use SmokeTestBSpec
32
+ call_conveyor.should == [:a_before, :b_before, :b_after, :a_after]
33
+ end
34
+
35
+ describe "error handling" do
36
+ it "common case" do
37
+ class CommonCaseASpec < Crystal::Processor
38
+ def call
39
+ workspace.result << :a_before
40
+
41
+ begin
42
+ next_processor.call
43
+ rescue StandardError => e
44
+ workspace.result << e.message
45
+ end
46
+ end
47
+ end
48
+
49
+ class CommonCaseBSpec < Crystal::Processor
50
+ def call
51
+ workspace.result << :b_before
52
+ raise 'error before'
53
+ end
54
+ end
55
+
56
+ conveyors.web.use CommonCaseASpec
57
+ conveyors.web.use CommonCaseBSpec
58
+ call_conveyor.should == [:a_before, :b_before, "error before"]
59
+ end
60
+
61
+ it "should raise error if not catched" do
62
+ class NotCatchedErrorSpec < Crystal::Processor
63
+ def call
64
+ workspace.result << :before
65
+ raise 'error before'
66
+ end
67
+ end
68
+
69
+ conveyors.web.use NotCatchedErrorSpec
70
+ lambda{call_conveyor}.should raise_error(/error before/)
71
+ end
72
+
73
+ it "in after block" do
74
+ class ErrorInAfterBlockASpec < Crystal::Processor
75
+ def call
76
+ workspace.result << :a_before
77
+
78
+ begin
79
+ next_processor.call
80
+ rescue StandardError => e
81
+ workspace.result << e.message
82
+ end
83
+ end
84
+ end
85
+
86
+
87
+ class ErrorInAfterBlockBSpec < Crystal::Processor
88
+ def call
89
+ workspace.result << :b_before
90
+ next_processor.call
91
+ raise 'error after'
92
+ end
93
+ end
94
+
95
+
96
+ conveyors.web.use ErrorInAfterBlockASpec
97
+ conveyors.web.use ErrorInAfterBlockBSpec
98
+ call_conveyor.should == [:a_before, :b_before, "error after"]
99
+ end
100
+
101
+ it "bubbling (from error)" do
102
+ class ErrorBubblingASpec < Crystal::Processor
103
+ def call
104
+ begin
105
+ next_processor.call
106
+ rescue RuntimeError => e
107
+ workspace.result << e.message
108
+ end
109
+ end
110
+ end
111
+
112
+ class ErrorBubblingBSpec < Crystal::Processor
113
+ def call
114
+ raise 'error'
115
+ end
116
+ end
117
+
118
+ conveyors.web.use ErrorBubblingASpec
119
+ conveyors.web.use ErrorBubblingBSpec
120
+
121
+ call_conveyor.should == ['error']
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,8 @@
1
+ dir = File.dirname __FILE__
2
+ crystal_dir = File.expand_path "#{dir}/../.."
3
+ lib_dir = "#{crystal_dir}/lib"
4
+ $LOAD_PATH << lib_dir unless $LOAD_PATH.include? lib_dir
5
+
6
+ require 'crystal/conveyor'
7
+
8
+ require 'crystal/spec/environment'
@@ -0,0 +1,50 @@
1
+ # require "#{File.expand_path(File.dirname(__FILE__))}/helper"
2
+ # require 'crystal/support'
3
+ # require 'crystal/environment/dependency_resolver'
4
+ #
5
+ # describe "Dependency resolver" do
6
+ # before :each do
7
+ # @dr = Crystal::DependencyResolver.new
8
+ # @result = []
9
+ # end
10
+ #
11
+ # attr_reader :result
12
+ #
13
+ # def add s
14
+ # @result << s
15
+ # end
16
+ #
17
+ # def run *args, &block
18
+ # @dr.run *args, &block
19
+ # end
20
+ #
21
+ # def load token
22
+ # @dr.call(token)
23
+ # end
24
+ #
25
+ # it "should be ordered" do
26
+ # run(:init){add :init}
27
+ # run(:a, :after => :init){add :a}
28
+ # run(:b, :after => :a){add :b}
29
+ # run(:c, :after => :b){add :c}
30
+ #
31
+ # load :init
32
+ #
33
+ # result.should == [:init, :a, :b, :c]
34
+ # end
35
+ #
36
+ # it "should be ordered 2 (from error)" do
37
+ # run(:init){add :init}
38
+ # run(:_b, :before => :init){add :_b}
39
+ # run(:b_, :after => :init){add :b_}
40
+ #
41
+ # run(:_c, :before => :_b){add :_c}
42
+ # run(:c_, :after => :b_){add :c_}
43
+ #
44
+ # run(:_a, :before => :init){add :_a}
45
+ # run(:a_, :after => :init){add :a_}
46
+ #
47
+ # load :init
48
+ # result.should == [:_c, :_b, :_a, :init, :b_, :a_, :c_]
49
+ # end
50
+ # end
@@ -0,0 +1 @@
1
+ key2: value2test
@@ -0,0 +1,2 @@
1
+ key: value
2
+ key2: value2
@@ -0,0 +1,87 @@
1
+ require 'rspec_ext'
2
+ require "#{__FILE__.dirname}/helper"
3
+
4
+ require 'crystal/environment'
5
+ require 'crystal/spec/environment'
6
+
7
+ describe "Environment basic spec" do
8
+ inject :env => :environment
9
+
10
+ before :all do
11
+ @dir = File.expand_path(File.dirname(__FILE__))
12
+
13
+ $APP_DIR = "#{@dir}/environment_spec/app"
14
+
15
+ @app_plugin_dir = "#{@dir}/environment_spec/app/app_plugin"
16
+ @gem_plugin_dir = "#{@dir}/environment_spec/gem_plugin"
17
+
18
+ $LOAD_PATH << @app_plugin_dir
19
+ $LOAD_PATH << @gem_plugin_dir
20
+
21
+ Crystal::Config::DEFAULTS['environment'] = 'test'
22
+ end
23
+
24
+ after :all do
25
+ $LOAD_PATH.delete @app_plugin_dir
26
+ $LOAD_PATH.delete @gem_plugin_dir
27
+
28
+ $APP_DIR = nil
29
+ end
30
+
31
+ describe 'files' do
32
+ with_environment :test
33
+
34
+ it "find_files?" do
35
+ env.file_exist?('/config/ec_layout').should be_true
36
+ env.file_exist?('/ec_some_file').should be_true
37
+ end
38
+
39
+ it "find_file" do
40
+ lambda{env.find_file('/config/ec_layout')}.should raise_error(/Found multiple files/)
41
+ env.find_file('/ec_some_file').should == "#{@app_plugin_dir}/ec_some_file"
42
+ lambda{env.find_file('ec_some_file')}.should raise_error(AssertionError)
43
+ end
44
+
45
+ it "find_files" do
46
+ env.find_files('/config/ec_layout').sort.should == ["#{@app_plugin_dir}/config/ec_layout", "#{@gem_plugin_dir}/config/ec_layout"]
47
+ end
48
+
49
+ it "find_files_by_pattern" do
50
+ env.find_files_by_pattern('/*/ec_layout').sort.should == ["#{@app_plugin_dir}/config/ec_layout", "#{@gem_plugin_dir}/config/ec_layout"]
51
+ end
52
+ end
53
+
54
+ describe 'config' do
55
+ with_environment :test
56
+
57
+ it "should merge 'APP_DIR/config/config.yml' into config" do
58
+ config.key?.should be_true
59
+ config.key!.should == 'value'
60
+ end
61
+
62
+ it "should merge 'APP_DIR/config/config.environment.yml' into config" do
63
+ config.key2?.should be_true
64
+ config.key2!.should == 'value2test'
65
+ end
66
+ end
67
+
68
+ describe "spec should be isolated (via swap_metadata)" do
69
+ describe "first spec" do
70
+ with_environment
71
+
72
+ before :all do
73
+ crystal.register(:spec_component)
74
+ end
75
+
76
+ it "check" do
77
+ Micon.metadata.should include(:spec_component)
78
+ end
79
+ end
80
+
81
+ describe "second spec" do
82
+ it "check" do
83
+ Micon.metadata.should_not include(:spec_component)
84
+ end
85
+ end
86
+ end
87
+ end