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,155 @@
1
+ require 'rspec_ext'
2
+ require "#{__FILE__.dirname}/helper"
3
+
4
+ require "crystal/support/callbacks"
5
+
6
+ describe "Callbacks" do
7
+ before :all do
8
+ class BasicCallbacksSpec
9
+ inherit Crystal::Callbacks
10
+
11
+ set_callback :callback_name, :before, :before_callback
12
+ set_callback :callback_name, :after, :after_callback
13
+ set_callback :callback_name, :around, :around_callback
14
+
15
+ protected
16
+ def around_callback
17
+ around_callback_called
18
+ yield
19
+ end
20
+ end
21
+ end
22
+
23
+ it "basic" do
24
+ o = BasicCallbacksSpec.new
25
+ o.should_receive :before_callback
26
+ o.should_receive :around_callback_called
27
+ o.should_receive :after_callback
28
+ o.run_callbacks(:callback_name){"result"}.should == "result"
29
+ end
30
+
31
+ it "blocks" do
32
+ class BlockCallbacksSpec
33
+ inherit Crystal::Callbacks
34
+
35
+ set_callback(:callback_name, :before){|controller| controller.result << :before}
36
+ set_callback :callback_name, :around do |controller, block|
37
+ begin
38
+ controller.result << :around_begin
39
+ block.call
40
+ ensure
41
+ controller.result << :around_end
42
+ end
43
+ end
44
+ set_callback(:callback_name, :after){|controller| controller.result << :after}
45
+
46
+ def result
47
+ @result ||= []
48
+ end
49
+ end
50
+
51
+ o = BlockCallbacksSpec.new
52
+ o.run_callbacks(:callback_name){"result"}.should == "result"
53
+ o.result.should == [:before, :around_begin, :after, :around_end]
54
+ end
55
+
56
+ it "inheritance" do
57
+ class InheritedCallbacksSpec < BasicCallbacksSpec
58
+ set_callback :callback_name, :before, :before_callback2
59
+ end
60
+
61
+ o = InheritedCallbacksSpec.new
62
+ o.should_receive :before_callback
63
+ o.should_receive :before_callback2
64
+ o.should_receive :around_callback_called
65
+ o.should_receive :after_callback
66
+ o.run_callbacks(:callback_name){"result"}.should == "result"
67
+ end
68
+
69
+ it 'terminator' do
70
+ class CallbackTerminatorSpec
71
+ inherit Crystal::Callbacks
72
+
73
+ set_callback :callback_name, :before, :before_callback, :terminator => false
74
+ set_callback :callback_name, :before, :before_callback2
75
+
76
+ def method
77
+ run_callbacks :callback_name do
78
+ "result"
79
+ end
80
+ end
81
+
82
+ protected
83
+ def before_callback
84
+ false
85
+ end
86
+ end
87
+
88
+ o = CallbackTerminatorSpec.new
89
+ o.should_not_receive :before_callback2
90
+ o.run_callbacks(:callback_name){"result"}.should_not == "result"
91
+ end
92
+
93
+ it 'conditions' do
94
+ class CallbackConditionsSpec
95
+ inherit Crystal::Callbacks
96
+
97
+ set_callback :callback_name, :before, :before_callback, :only => :another_method
98
+ end
99
+
100
+ o = CallbackConditionsSpec.new
101
+ o.should_not_receive :before_callback
102
+ o.run_callbacks(:callback_name, :method => :method){"result"}.should == 'result'
103
+
104
+ o = CallbackConditionsSpec.new
105
+ o.should_receive :before_callback
106
+ o.run_callbacks(:callback_name, :method => :another_method){"result"}.should == 'result'
107
+ end
108
+
109
+ it "if, unless conditions" do
110
+ c = Crystal::Callbacks::AbstractCallback.new
111
+ c.conditions = {:if => lambda{|target, inf| true}}
112
+ c.run?(nil, {}).should be_true
113
+
114
+ c.conditions = {:if => lambda{|target, inf| false}}
115
+ c.run?(nil, {}).should be_false
116
+
117
+ c.conditions = {:unless => lambda{|target, inf| true}}
118
+ c.run?(nil, {}).should be_false
119
+
120
+ c.conditions = {:unless => lambda{|target, inf| false}}
121
+ c.run?(nil, {}).should be_true
122
+ end
123
+
124
+ it "only, except conditions" do
125
+ c = Crystal::Callbacks::AbstractCallback.new
126
+ c.conditions = {:only => :a}
127
+ c.run?(nil, {:method => :a}).should be_true
128
+
129
+ c.conditions = {:only => :b}
130
+ c.run?(nil, {:method => :a}).should be_false
131
+
132
+ c.conditions = {:except => :a}
133
+ c.run?(nil, {:method => :a}).should be_false
134
+
135
+ c.conditions = {:except => :b}
136
+ c.run?(nil, {:method => :a}).should be_true
137
+ end
138
+
139
+
140
+ it "around callback should be able to change result value" do
141
+ class ChangeResultValueSpec
142
+ inherit Crystal::Callbacks
143
+
144
+ set_callback :callback_name, :around, :around_callback
145
+
146
+ def around_callback
147
+ yield
148
+ 'another result'
149
+ end
150
+ end
151
+
152
+ o = ChangeResultValueSpec.new
153
+ o.run_callbacks(:callback_name){"result"}.should == 'another result'
154
+ end
155
+ end
@@ -0,0 +1,61 @@
1
+ require 'rspec_ext'
2
+ require "#{__FILE__.dirname}/helper"
3
+
4
+ require "crystal/support/callbacks"
5
+ require "crystal/support/filters"
6
+
7
+ describe "Filters" do
8
+ module ARemote
9
+ inherit Crystal::Filters
10
+ end
11
+
12
+ class FiltersBasic
13
+ inherit ARemote
14
+
15
+ before :set_user
16
+
17
+ def action
18
+ 'result'
19
+ end
20
+
21
+ attr_reader :user
22
+ def set_user
23
+ @user = 'some user'
24
+ end
25
+ end
26
+
27
+ class FilterInheritance < FiltersBasic
28
+ before :set_model
29
+
30
+ attr_reader :model
31
+ def set_model
32
+ @model = 'some model'
33
+ end
34
+ end
35
+
36
+ class FilterOverrideAction < FiltersBasic
37
+ def action
38
+ 'overriden result'
39
+ end
40
+ end
41
+
42
+ it 'basic' do
43
+ r = FiltersBasic.new
44
+ r.run_callbacks(:action){r.send :action}.should == 'result'
45
+ r.user.should == 'some user'
46
+ end
47
+
48
+ it 'inheritance' do
49
+ r = FilterInheritance.new
50
+ r.run_callbacks(:action){r.send :action}.should == 'result'
51
+ r.user.should == 'some user'
52
+ r.model.should == 'some model'
53
+ end
54
+
55
+ it "overriding action" do
56
+ r = FilterOverrideAction.new
57
+ r.run_callbacks(:action){r.send :action}.should == 'overriden result'
58
+ r.user.should == 'some user'
59
+ end
60
+
61
+ end
@@ -0,0 +1,7 @@
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/support/active_support'
7
+ require 'ruby_ext'
@@ -0,0 +1,84 @@
1
+ require 'rspec_ext'
2
+ require "#{__FILE__.dirname}/helper"
3
+
4
+ require "crystal/support/safe_hash"
5
+
6
+ describe "SafeHash and SafeNil" do
7
+ it "should allow check for value presence" do
8
+ h = SafeHash.new :a => :b
9
+ h.a?.should be_true
10
+ h.b?.should be_false
11
+
12
+ h.should include(:a)
13
+ h.should_not include(:b)
14
+ end
15
+
16
+ it "? should return boolean (from error)" do
17
+ h = SafeHash.new
18
+ lambda{raise "" unless h.a?.class.equal?(NilClass)}.should raise_error
19
+ lambda{raise "" unless h.a.a?.class.equal?(NilClass)}.should raise_error
20
+ end
21
+
22
+ it "should treat assigned nil as value (from error)" do
23
+ h = SafeHash.new
24
+ h.v = nil
25
+ h.v?.should be_true
26
+ h.v!.should == nil
27
+ end
28
+
29
+ it "should allow owerride values" do
30
+ h = SafeHash.new :a => :b
31
+ h.b = :c
32
+ h.b!.should == :c
33
+ end
34
+
35
+ it "general behaviour" do
36
+ h = SafeHash.new :key => :value
37
+
38
+ h.key.should == :value
39
+ h.key(:missing).should == :value
40
+
41
+ h[:key].should == :value
42
+ h[:key, :missing].should == :value
43
+
44
+ h['key'].should == :value
45
+ h['key', :missing].should == :value
46
+
47
+ h.a.b.c[:d].e('missing').should == 'missing'
48
+ h.a.b.c[:d][:e, 'missing'].should == 'missing'
49
+ end
50
+
51
+ it "should build hierarchies of SafeHash" do
52
+ h = SafeHash.new :a => {:a => :b}
53
+
54
+ h.a.a.should == :b
55
+ h.a.missing.b.c('missing').should == 'missing'
56
+ end
57
+
58
+ it "should require setting if ! used" do
59
+ h = SafeHash.new :a => :v, :b => {:c => :v}
60
+
61
+ h.a!.should == :v
62
+ h.b.c!.should == :v
63
+ h.b!.c!.should == :v
64
+
65
+ lambda{h.j!}.should raise_error(/No key j/)
66
+ lambda{h.j.b.c!}.should raise_error(/No key c/)
67
+ end
68
+
69
+ it "should be able to update itself" do
70
+ h = SafeHash.new
71
+ h.b?.should be_false
72
+ h.a = :a
73
+ h.a!.should == :a
74
+ end
75
+
76
+ it "should implement include?" do
77
+ h = SafeHash.new :a => :b
78
+ h.include?(:a).should be_true
79
+ h.include?('a').should be_true
80
+ h.include?(:b).should be_false
81
+
82
+ h.b.include?(:a).should be_false
83
+ end
84
+ 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/template'
7
+
8
+ require 'crystal/spec/environment'
@@ -0,0 +1 @@
1
+ file template
@@ -0,0 +1 @@
1
+ content from <%= custom_helper %>
@@ -0,0 +1 @@
1
+ some content
@@ -0,0 +1,5 @@
1
+ Instance variable: <%= @ivariable %>
2
+ Instance variable 2: <%= @ivariable2 %>
3
+ Object value: <%= object.value %>
4
+ Locals value: <%= lvariable %>
5
+ Yield: <%= yield :content %>
@@ -0,0 +1 @@
1
+ universal format
@@ -0,0 +1 @@
1
+ layotu begin <%= yield %> end
@@ -0,0 +1,3 @@
1
+ <% content_for :head do %>head<% end %>
2
+ content
3
+ <% content_for :bottom, 'bottom' %>
@@ -0,0 +1,3 @@
1
+ <%= yield :head %>
2
+ <%= yield %>
3
+ <%= yield :bottom %>
@@ -0,0 +1 @@
1
+ html layout begin <%= yield %> end
@@ -0,0 +1 @@
1
+ js layout begin <%= yield %> end
@@ -0,0 +1 @@
1
+ <%= render 'layout_b' %>
@@ -0,0 +1 @@
1
+ content a <%= @ivariable %> <%= render('b') %>
@@ -0,0 +1 @@
1
+ content b <%= @ivariable %>
@@ -0,0 +1 @@
1
+ layout <%= @ivariable %> <%= yield %>
@@ -0,0 +1 @@
1
+ <%= options.format %> format, <%= render 'b' %>
@@ -0,0 +1 @@
1
+ <%= options.format %> format
@@ -0,0 +1 @@
1
+ template a, <%= render 'b' %>
@@ -0,0 +1 @@
1
+ template c, <%= render '../shared/c' %>
@@ -0,0 +1 @@
1
+ shared template
@@ -0,0 +1 @@
1
+ dialog, <%= render 'form' %>
@@ -0,0 +1 @@
1
+ $.showDialog(<%= render 'dialog', :format => :html %>)
@@ -0,0 +1 @@
1
+ <% "ruby code" %> content
@@ -0,0 +1,190 @@
1
+ require 'rspec_ext'
2
+ require "#{__FILE__.dirname}/helper"
3
+
4
+ describe "Template" do
5
+ Template = Crystal::Template
6
+
7
+ delegate :render, :to => Template
8
+
9
+ with_environment :development
10
+
11
+ before :all do
12
+ @dir = "#{File.expand_path(File.dirname(__FILE__))}/template_spec"
13
+ $LOAD_PATH << @dir
14
+
15
+ ::RenderResult = OpenObject.new
16
+
17
+ class ::SomeObject
18
+ attr_accessor :ivariable
19
+ end
20
+ end
21
+
22
+ after :all do
23
+ $LOAD_PATH.delete @dir
24
+ remove_constants %w(SomeObject RenderResult)
25
+ end
26
+
27
+ describe 'special' do
28
+ it "read" do
29
+ Template.read('/other/template').should == %{<% "ruby code" %> content}
30
+ end
31
+
32
+ it "exist?" do
33
+ Template.should exist('/other/template')
34
+ Template.should_not exist('/other/non-existing-template')
35
+ end
36
+
37
+ it "template prefixes" do
38
+ Template.exist?('/prefixes/underscored', :prefixes => ['']).should be_false
39
+ render('/prefixes/underscored', :prefixes => ['_', '']).should == "underscored"
40
+ render('/prefixes/underscored.erb', :prefixes => ['_', '']).should == "underscored"
41
+
42
+ Template.exist?('/prefixes/without_prefix', :prefixes => ['_']).should be_false
43
+ render('/prefixes/without_prefix', :prefixes => ['']).should == "whthout prefix"
44
+ end
45
+
46
+ it "should not use prefixes for :action" do
47
+ Template.exist?('/prefixes/underscored').should be_true
48
+ Template.exist?('/prefixes/underscored', :action => true).should be_false
49
+ end
50
+ end
51
+
52
+ describe 'basic' do
53
+ it "general" do
54
+ some_object = SomeObject.new
55
+ some_object.ivariable = "instance variable value"
56
+ options = {
57
+ :instance_variables => [some_object, {:ivariable2 => "instance variable value 2"}],
58
+ :object => OpenObject.new.update(:value => 'object value'),
59
+ :locals => {:lvariable => 'local value'},
60
+ :format => :html
61
+ }
62
+
63
+ result = render("/basic/general", options){|content_name| "content for :#{content_name}"}
64
+
65
+ check = %{\
66
+ Instance variable: instance variable value
67
+ Instance variable 2: instance variable value 2
68
+ Object value: object value
69
+ Locals value: local value
70
+ Yield: content for :content}
71
+
72
+ result.should == check
73
+ end
74
+
75
+ it "should not render wrong format" do
76
+ Template.exist?('/basic/non_existing_format', :format => :html).should be_true
77
+ Template.exist?('/basic/non_existing_format', :format => :invalid).should be_false
78
+
79
+ # from error
80
+ Template.exist?('non_existing_format', :format => :invalid, :current_dir => "#{@dir}/views/basic").should be_false
81
+ end
82
+
83
+ it "extension" do
84
+ render('/basic/extension').should == "some content"
85
+ render('/basic/extension.erb').should == "some content"
86
+ end
87
+
88
+ it "must support custom context" do
89
+ class CustomTemplateContext < Crystal::TemplateContext
90
+ def custom_helper
91
+ 'custom helper'
92
+ end
93
+ end
94
+
95
+ render('/basic/custom_context', :context_class => CustomTemplateContext).should == "content from custom helper"
96
+ end
97
+
98
+ it "no template" do
99
+ lambda{render('/non-existing-template')}.should raise_error(/No template/)
100
+ end
101
+
102
+ it "should render arbitrary file" do
103
+ render(:file => "#{@dir}/file.erb").should == "file template"
104
+ end
105
+ end
106
+
107
+ describe 'format' do
108
+ it "basic" do
109
+ render('/format/format', :format => :html).should == "html format"
110
+ render('/format/format', :format => :js).should == "js format"
111
+ render('/format/format', :format => :non_existing).should == "universal format"
112
+ render('/format/format.html', :format => :js).should == "html format"
113
+ render('/format/format.html.erb', :format => :js).should == "html format"
114
+ end
115
+
116
+ it "nesting different formats" do
117
+ render('/nesting_format/dialog', :format => :js).should == "$.showDialog(dialog, dialog form)"
118
+ end
119
+ end
120
+
121
+ describe 'nested' do
122
+ it "should render relative templates" do
123
+ render('/nested/relative/a').should == "template a, template b"
124
+ lambda{render('b')}.should raise_error(/You can't use relative template path/)
125
+ current_dir = "#{@dir}/views/nested/relative"
126
+ render('b', :current_dir => current_dir).should == "template b"
127
+ end
128
+
129
+ it "should render relative templates with complex path (../../xxx)" do
130
+ render('/nested/relative/c').should == "template c, shared template"
131
+ end
132
+
133
+ it "nested templates should use the same format" do
134
+ render('/nested/format/a', :format => :js).should == "js format, js format"
135
+ end
136
+ end
137
+
138
+ describe "layout" do
139
+ def render_with_layout template, options, layout
140
+ content, context = Template.basic_render(Template.parse_arguments(template, options))
141
+ Template.render_layout(layout, :content => content, :context => context)
142
+ end
143
+
144
+ it "templates and layout must share the same context" do
145
+ render_with_layout(
146
+ '/layout/same_context/a', {:instance_variables => {:ivariable => "ivariable"}},
147
+ '/layout/same_context/layout'
148
+ ).should == "layout ivariable content a ivariable content b ivariable"
149
+ end
150
+
151
+ it "content_for" do
152
+ render_with_layout(
153
+ '/layout/content_for/content', {},
154
+ '/layout/content_for/layout'
155
+ ).should == %{\
156
+ head
157
+
158
+ content
159
+
160
+ bottom}
161
+ end
162
+
163
+ it "basic" do
164
+ render_with_layout(
165
+ '/layout/basic/content', {},
166
+ '/layout/basic/layout'
167
+ ).should == "layotu begin content end"
168
+ end
169
+
170
+ it "layout with format" do
171
+ render_with_layout(
172
+ '/layout/format/content', {:format => :html},
173
+ '/layout/format/layout'
174
+ ).should == "html layout begin html content end"
175
+
176
+ render_with_layout(
177
+ '/layout/format/content', {:format => :js},
178
+ '/layout/format/layout'
179
+ ).should == "js layout begin js content end"
180
+ end
181
+
182
+ it "layout should support yield in partials (from error)" do
183
+ render_with_layout(
184
+ '/layout/nested_yield/a', {},
185
+ '/layout/nested_yield/layout'
186
+ ).should == "some content"
187
+ end
188
+ end
189
+
190
+ end
@@ -0,0 +1 @@
1
+ <% concat "text for concatenation" %><% RenderResult.erb_capture = capture do %>text for capturing<% end %>
@@ -0,0 +1,3 @@
1
+ - concat "text for concatenation"
2
+ - RenderResult.haml_capture = capture do
3
+ text for capturing
@@ -0,0 +1,3 @@
1
+ first line
2
+ <% raise "line with error" %>
3
+ second line
@@ -0,0 +1,3 @@
1
+ first line
2
+ - raise "line with error"
3
+ second line
@@ -0,0 +1,4 @@
1
+ <%= render('/mixed_templates/broken_erb_concat_haml') %>
2
+ <% tag :div do %>
3
+ some content
4
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= render '/mixed_templates/broken_haml_concat_haml' %>
@@ -0,0 +1,2 @@
1
+ - tag :div do
2
+ some content
@@ -0,0 +1,3 @@
1
+ - form_tag do
2
+ - form_field do
3
+ some field