thorero 0.9.4.4 → 0.9.4.5

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 (298) hide show
  1. data/LICENSE +1 -1
  2. data/README +21 -0
  3. data/Rakefile +275 -108
  4. data/TODO +0 -0
  5. data/bin/merb +12 -0
  6. data/bin/merb-specs +5 -0
  7. data/docs/bootloading.dox +58 -0
  8. data/docs/documentation_standards +40 -0
  9. data/docs/merb-core-call-stack-diagram.mmap +0 -0
  10. data/docs/merb-core-call-stack-diagram.pdf +0 -0
  11. data/docs/merb-core-call-stack-diagram.png +0 -0
  12. data/docs/new_render_api +51 -0
  13. data/lib/merb-core.rb +603 -0
  14. data/lib/merb-core/autoload.rb +32 -0
  15. data/lib/merb-core/bootloader.rb +708 -0
  16. data/lib/merb-core/config.rb +303 -0
  17. data/lib/merb-core/constants.rb +43 -0
  18. data/lib/merb-core/controller/abstract_controller.rb +578 -0
  19. data/lib/merb-core/controller/exceptions.rb +302 -0
  20. data/lib/merb-core/controller/merb_controller.rb +256 -0
  21. data/lib/merb-core/controller/mime.rb +106 -0
  22. data/lib/merb-core/controller/mixins/authentication.rb +87 -0
  23. data/lib/merb-core/controller/mixins/controller.rb +290 -0
  24. data/lib/merb-core/controller/mixins/render.rb +481 -0
  25. data/lib/merb-core/controller/mixins/responder.rb +472 -0
  26. data/lib/merb-core/controller/template.rb +254 -0
  27. data/lib/merb-core/core_ext.rb +8 -0
  28. data/lib/merb-core/core_ext/kernel.rb +319 -0
  29. data/lib/merb-core/dispatch/cookies.rb +91 -0
  30. data/lib/merb-core/dispatch/dispatcher.rb +278 -0
  31. data/lib/merb-core/dispatch/exceptions.html.erb +303 -0
  32. data/lib/merb-core/dispatch/request.rb +603 -0
  33. data/lib/merb-core/dispatch/router.rb +179 -0
  34. data/lib/merb-core/dispatch/router/behavior.rb +867 -0
  35. data/lib/merb-core/dispatch/router/cached_proc.rb +52 -0
  36. data/lib/merb-core/dispatch/router/route.rb +321 -0
  37. data/lib/merb-core/dispatch/session.rb +78 -0
  38. data/lib/merb-core/dispatch/session/cookie.rb +168 -0
  39. data/lib/merb-core/dispatch/session/memcached.rb +184 -0
  40. data/lib/merb-core/dispatch/session/memory.rb +241 -0
  41. data/lib/merb-core/dispatch/worker.rb +28 -0
  42. data/lib/merb-core/gem_ext/erubis.rb +77 -0
  43. data/lib/{extlib → merb-core}/logger.rb +2 -2
  44. data/lib/merb-core/plugins.rb +59 -0
  45. data/lib/merb-core/rack.rb +21 -0
  46. data/lib/merb-core/rack/adapter.rb +44 -0
  47. data/lib/merb-core/rack/adapter/ebb.rb +25 -0
  48. data/lib/merb-core/rack/adapter/evented_mongrel.rb +26 -0
  49. data/lib/merb-core/rack/adapter/fcgi.rb +17 -0
  50. data/lib/merb-core/rack/adapter/irb.rb +118 -0
  51. data/lib/merb-core/rack/adapter/mongrel.rb +26 -0
  52. data/lib/merb-core/rack/adapter/runner.rb +28 -0
  53. data/lib/merb-core/rack/adapter/swiftiplied_mongrel.rb +26 -0
  54. data/lib/merb-core/rack/adapter/thin.rb +39 -0
  55. data/lib/merb-core/rack/adapter/thin_turbo.rb +24 -0
  56. data/lib/merb-core/rack/adapter/webrick.rb +36 -0
  57. data/lib/merb-core/rack/application.rb +18 -0
  58. data/lib/merb-core/rack/handler/mongrel.rb +97 -0
  59. data/lib/merb-core/rack/middleware.rb +26 -0
  60. data/lib/merb-core/rack/middleware/path_prefix.rb +31 -0
  61. data/lib/merb-core/rack/middleware/profiler.rb +19 -0
  62. data/lib/merb-core/rack/middleware/static.rb +45 -0
  63. data/lib/merb-core/server.rb +252 -0
  64. data/lib/merb-core/tasks/audit.rake +68 -0
  65. data/lib/merb-core/tasks/merb.rb +1 -0
  66. data/lib/merb-core/tasks/merb_rake_helper.rb +12 -0
  67. data/lib/merb-core/test.rb +11 -0
  68. data/lib/merb-core/test/helpers.rb +9 -0
  69. data/lib/merb-core/test/helpers/controller_helper.rb +8 -0
  70. data/lib/merb-core/test/helpers/multipart_request_helper.rb +175 -0
  71. data/lib/merb-core/test/helpers/request_helper.rb +344 -0
  72. data/lib/merb-core/test/helpers/route_helper.rb +33 -0
  73. data/lib/merb-core/test/helpers/view_helper.rb +121 -0
  74. data/lib/merb-core/test/matchers.rb +9 -0
  75. data/lib/merb-core/test/matchers/controller_matchers.rb +319 -0
  76. data/lib/merb-core/test/matchers/route_matchers.rb +136 -0
  77. data/lib/merb-core/test/matchers/view_matchers.rb +335 -0
  78. data/lib/merb-core/test/run_specs.rb +47 -0
  79. data/lib/merb-core/test/tasks/spectasks.rb +68 -0
  80. data/lib/merb-core/test/test_ext/hpricot.rb +32 -0
  81. data/lib/merb-core/test/test_ext/object.rb +14 -0
  82. data/lib/merb-core/test/test_ext/string.rb +14 -0
  83. data/lib/merb-core/vendor/facets.rb +2 -0
  84. data/lib/merb-core/vendor/facets/dictionary.rb +433 -0
  85. data/lib/merb-core/vendor/facets/inflect.rb +345 -0
  86. data/lib/merb-core/version.rb +11 -0
  87. data/spec/private/config/adapter_spec.rb +32 -0
  88. data/spec/private/config/config_spec.rb +202 -0
  89. data/spec/private/config/environment_spec.rb +13 -0
  90. data/spec/private/config/spec_helper.rb +1 -0
  91. data/spec/private/core_ext/kernel_spec.rb +169 -0
  92. data/spec/private/dispatch/bootloader_spec.rb +24 -0
  93. data/spec/private/dispatch/cookies_spec.rb +107 -0
  94. data/spec/private/dispatch/dispatch_spec.rb +35 -0
  95. data/spec/private/dispatch/fixture/app/controllers/application.rb +4 -0
  96. data/spec/private/dispatch/fixture/app/controllers/exceptions.rb +27 -0
  97. data/spec/private/dispatch/fixture/app/controllers/foo.rb +21 -0
  98. data/spec/private/dispatch/fixture/app/helpers/global_helpers.rb +8 -0
  99. data/spec/private/dispatch/fixture/app/views/exeptions/client_error.html.erb +37 -0
  100. data/spec/private/dispatch/fixture/app/views/exeptions/internal_server_error.html.erb +216 -0
  101. data/spec/private/dispatch/fixture/app/views/exeptions/not_acceptable.html.erb +38 -0
  102. data/spec/private/dispatch/fixture/app/views/exeptions/not_found.html.erb +40 -0
  103. data/spec/private/dispatch/fixture/app/views/foo/bar.html.erb +0 -0
  104. data/spec/private/dispatch/fixture/app/views/layout/application.html.erb +11 -0
  105. data/spec/private/dispatch/fixture/config/black_hole.rb +12 -0
  106. data/spec/private/dispatch/fixture/config/environments/development.rb +6 -0
  107. data/spec/private/dispatch/fixture/config/environments/production.rb +5 -0
  108. data/spec/private/dispatch/fixture/config/environments/test.rb +6 -0
  109. data/spec/private/dispatch/fixture/config/init.rb +45 -0
  110. data/spec/private/dispatch/fixture/config/rack.rb +11 -0
  111. data/spec/private/dispatch/fixture/config/router.rb +35 -0
  112. data/spec/private/dispatch/fixture/log/merb_test.log +1874 -0
  113. data/spec/private/dispatch/fixture/public/images/merb.jpg +0 -0
  114. data/spec/private/dispatch/fixture/public/merb.fcgi +4 -0
  115. data/spec/private/dispatch/fixture/public/stylesheets/master.css +119 -0
  116. data/spec/private/dispatch/route_params_spec.rb +24 -0
  117. data/spec/private/dispatch/session_mixin_spec.rb +47 -0
  118. data/spec/private/dispatch/spec_helper.rb +1 -0
  119. data/spec/private/plugins/plugin_spec.rb +166 -0
  120. data/spec/private/rack/application_spec.rb +49 -0
  121. data/spec/private/router/behavior_spec.rb +60 -0
  122. data/spec/private/router/fixture/log/merb_test.log +139 -0
  123. data/spec/private/router/route_spec.rb +414 -0
  124. data/spec/private/router/router_spec.rb +175 -0
  125. data/spec/private/vendor/facets/plural_spec.rb +564 -0
  126. data/spec/private/vendor/facets/singular_spec.rb +489 -0
  127. data/spec/public/DEFINITIONS +11 -0
  128. data/spec/public/abstract_controller/controllers/alt_views/layout/application.erb +1 -0
  129. data/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_string_controller_layout.erb +1 -0
  130. data/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_template_controller_layout.erb +1 -0
  131. data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/index.erb +1 -0
  132. data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/show.erb +1 -0
  133. data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb +1 -0
  134. data/spec/public/abstract_controller/controllers/alt_views/partial/basic_partial_with_multiple_roots/_partial.erb +1 -0
  135. data/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_and_custom_location/index.erb +1 -0
  136. data/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_inherited/index.erb +1 -0
  137. data/spec/public/abstract_controller/controllers/cousins.rb +41 -0
  138. data/spec/public/abstract_controller/controllers/display.rb +54 -0
  139. data/spec/public/abstract_controller/controllers/filters.rb +193 -0
  140. data/spec/public/abstract_controller/controllers/helpers.rb +41 -0
  141. data/spec/public/abstract_controller/controllers/partial.rb +121 -0
  142. data/spec/public/abstract_controller/controllers/render.rb +113 -0
  143. data/spec/public/abstract_controller/controllers/views/helpers/capture/index.erb +1 -0
  144. data/spec/public/abstract_controller/controllers/views/helpers/capture_eq/index.erb +1 -0
  145. data/spec/public/abstract_controller/controllers/views/helpers/capture_with_args/index.erb +1 -0
  146. data/spec/public/abstract_controller/controllers/views/helpers/concat/index.erb +1 -0
  147. data/spec/public/abstract_controller/controllers/views/layout/alt.erb +1 -0
  148. data/spec/public/abstract_controller/controllers/views/layout/custom.erb +1 -0
  149. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object/index.erb +1 -0
  150. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object_with_action/new.erb +1 -0
  151. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template/index.erb +1 -0
  152. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_app_layout/index.erb +0 -0
  153. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_custom_layout/index.erb +1 -0
  154. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb +1 -0
  155. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/show.erb +1 -0
  156. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_two_throw_contents/index.erb +1 -0
  157. data/spec/public/abstract_controller/controllers/views/partial/another_directory/_partial.erb +1 -0
  158. data/spec/public/abstract_controller/controllers/views/partial/basic_partial/_partial.erb +1 -0
  159. data/spec/public/abstract_controller/controllers/views/partial/basic_partial/index.erb +1 -0
  160. data/spec/public/abstract_controller/controllers/views/partial/basic_partial_with_multiple_roots/index.erb +1 -0
  161. data/spec/public/abstract_controller/controllers/views/partial/nested_partial/_first.erb +1 -0
  162. data/spec/public/abstract_controller/controllers/views/partial/nested_partial/_second.erb +1 -0
  163. data/spec/public/abstract_controller/controllers/views/partial/nested_partial/index.erb +1 -0
  164. data/spec/public/abstract_controller/controllers/views/partial/partial_in_another_directory/index.erb +1 -0
  165. data/spec/public/abstract_controller/controllers/views/partial/partial_with_both/_collection.erb +1 -0
  166. data/spec/public/abstract_controller/controllers/views/partial/partial_with_both/index.erb +1 -0
  167. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/_collection.erb +1 -0
  168. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/index.erb +1 -0
  169. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/_collection.erb +1 -0
  170. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/index.erb +1 -0
  171. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/_collection.erb +1 -0
  172. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/index.erb +1 -0
  173. data/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/_variables.erb +1 -0
  174. data/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/index.erb +1 -0
  175. data/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/_both.erb +1 -0
  176. data/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/index.erb +1 -0
  177. data/spec/public/abstract_controller/controllers/views/partial/with_absolute_partial/_partial.erb +1 -0
  178. data/spec/public/abstract_controller/controllers/views/partial/with_absolute_partial/index.erb +1 -0
  179. data/spec/public/abstract_controller/controllers/views/partial/with_as_partial/_with_partial.erb +1 -0
  180. data/spec/public/abstract_controller/controllers/views/partial/with_as_partial/index.erb +1 -0
  181. data/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/_with_partial.erb +1 -0
  182. data/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/index.erb +1 -0
  183. data/spec/public/abstract_controller/controllers/views/partial/with_partial/_with_partial.erb +1 -0
  184. data/spec/public/abstract_controller/controllers/views/partial/with_partial/index.erb +1 -0
  185. data/spec/public/abstract_controller/controllers/views/test_display/foo.html.erb +1 -0
  186. data/spec/public/abstract_controller/controllers/views/test_render/foo.html.erb +0 -0
  187. data/spec/public/abstract_controller/controllers/views/wonderful/index.erb +1 -0
  188. data/spec/public/abstract_controller/display_spec.rb +33 -0
  189. data/spec/public/abstract_controller/filter_spec.rb +106 -0
  190. data/spec/public/abstract_controller/helper_spec.rb +21 -0
  191. data/spec/public/abstract_controller/partial_spec.rb +61 -0
  192. data/spec/public/abstract_controller/render_spec.rb +90 -0
  193. data/spec/public/abstract_controller/spec_helper.rb +31 -0
  194. data/spec/public/boot_loader/boot_loader_spec.rb +33 -0
  195. data/spec/public/boot_loader/spec_helper.rb +1 -0
  196. data/spec/public/controller/authentication_spec.rb +103 -0
  197. data/spec/public/controller/base_spec.rb +36 -0
  198. data/spec/public/controller/controllers/authentication.rb +45 -0
  199. data/spec/public/controller/controllers/base.rb +36 -0
  200. data/spec/public/controller/controllers/display.rb +118 -0
  201. data/spec/public/controller/controllers/redirect.rb +30 -0
  202. data/spec/public/controller/controllers/responder.rb +93 -0
  203. data/spec/public/controller/controllers/url.rb +7 -0
  204. data/spec/public/controller/controllers/views/layout/custom.html.erb +1 -0
  205. data/spec/public/controller/controllers/views/layout/custom_arg.html.erb +1 -0
  206. data/spec/public/controller/controllers/views/layout/custom_arg.json.erb +1 -0
  207. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.html.erb +1 -0
  208. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.xml.erb +1 -0
  209. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.html.erb +1 -0
  210. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.xml.erb +1 -0
  211. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/index.html.erb +1 -0
  212. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/no_layout.html.erb +1 -0
  213. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template_argument/index.html.erb +1 -0
  214. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/html_default/index.html.erb +1 -0
  215. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/layout/custom.html.erb +1 -0
  216. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.html.erb +1 -0
  217. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.xml.erb +1 -0
  218. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.html.erb +1 -0
  219. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.js.erb +1 -0
  220. data/spec/public/controller/display_spec.rb +84 -0
  221. data/spec/public/controller/redirect_spec.rb +27 -0
  222. data/spec/public/controller/responder_spec.rb +163 -0
  223. data/spec/public/controller/spec_helper.rb +11 -0
  224. data/spec/public/controller/url_spec.rb +180 -0
  225. data/spec/public/core/merb_core_spec.rb +45 -0
  226. data/spec/public/core_ext/class_spec.rb +91 -0
  227. data/spec/public/core_ext/fixtures/core_ext_dependency.rb +2 -0
  228. data/spec/public/core_ext/kernel_spec.rb +9 -0
  229. data/spec/public/core_ext/spec_helper.rb +1 -0
  230. data/spec/public/directory_structure/directory/app/controllers/application.rb +3 -0
  231. data/spec/public/directory_structure/directory/app/controllers/base.rb +13 -0
  232. data/spec/public/directory_structure/directory/app/controllers/custom.rb +19 -0
  233. data/spec/public/directory_structure/directory/app/views/base/template.html.erb +1 -0
  234. data/spec/public/directory_structure/directory/app/views/wonderful/template.erb +1 -0
  235. data/spec/public/directory_structure/directory/config/router.rb +3 -0
  236. data/spec/public/directory_structure/directory/log/merb_test.log +562 -0
  237. data/spec/public/directory_structure/directory_spec.rb +44 -0
  238. data/spec/public/logger/logger_spec.rb +181 -0
  239. data/spec/public/logger/spec_helper.rb +1 -0
  240. data/spec/public/reloading/directory/app/controllers/application.rb +3 -0
  241. data/spec/public/reloading/directory/app/controllers/reload.rb +6 -0
  242. data/spec/public/reloading/directory/config/init.rb +2 -0
  243. data/spec/public/reloading/directory/log/merb_test.log +138 -0
  244. data/spec/public/reloading/reload_spec.rb +103 -0
  245. data/spec/public/request/multipart_spec.rb +41 -0
  246. data/spec/public/request/request_spec.rb +228 -0
  247. data/spec/public/router/default_spec.rb +21 -0
  248. data/spec/public/router/deferred_spec.rb +22 -0
  249. data/spec/public/router/fixation_spec.rb +27 -0
  250. data/spec/public/router/fixture/log/merb_test.log +1556 -0
  251. data/spec/public/router/namespace_spec.rb +113 -0
  252. data/spec/public/router/nested_matches_spec.rb +97 -0
  253. data/spec/public/router/nested_resources_spec.rb +41 -0
  254. data/spec/public/router/resource_spec.rb +37 -0
  255. data/spec/public/router/resources_spec.rb +82 -0
  256. data/spec/public/router/spec_helper.rb +90 -0
  257. data/spec/public/router/special_spec.rb +61 -0
  258. data/spec/public/router/string_spec.rb +61 -0
  259. data/spec/public/template/template_spec.rb +104 -0
  260. data/spec/public/template/templates/error.html.erb +2 -0
  261. data/spec/public/template/templates/template.html.erb +1 -0
  262. data/spec/public/template/templates/template.html.myt +1 -0
  263. data/spec/public/test/controller_matchers_spec.rb +402 -0
  264. data/spec/public/test/controllers/controller_assertion_mock.rb +7 -0
  265. data/spec/public/test/controllers/dispatch_controller.rb +11 -0
  266. data/spec/public/test/controllers/spec_helper_controller.rb +38 -0
  267. data/spec/public/test/multipart_request_helper_spec.rb +159 -0
  268. data/spec/public/test/multipart_upload_text_file.txt +1 -0
  269. data/spec/public/test/request_helper_spec.rb +221 -0
  270. data/spec/public/test/route_helper_spec.rb +71 -0
  271. data/spec/public/test/route_matchers_spec.rb +162 -0
  272. data/spec/public/test/view_helper_spec.rb +96 -0
  273. data/spec/public/test/view_matchers_spec.rb +183 -0
  274. data/spec/spec_helper.rb +68 -0
  275. metadata +493 -41
  276. data/README.txt +0 -3
  277. data/lib/extlib.rb +0 -32
  278. data/lib/extlib/assertions.rb +0 -8
  279. data/lib/extlib/blank.rb +0 -42
  280. data/lib/extlib/class.rb +0 -175
  281. data/lib/extlib/hash.rb +0 -410
  282. data/lib/extlib/hook.rb +0 -366
  283. data/lib/extlib/inflection.rb +0 -141
  284. data/lib/extlib/lazy_array.rb +0 -106
  285. data/lib/extlib/mash.rb +0 -143
  286. data/lib/extlib/module.rb +0 -37
  287. data/lib/extlib/object.rb +0 -165
  288. data/lib/extlib/object_space.rb +0 -13
  289. data/lib/extlib/pathname.rb +0 -5
  290. data/lib/extlib/pooling.rb +0 -233
  291. data/lib/extlib/rubygems.rb +0 -38
  292. data/lib/extlib/simple_set.rb +0 -39
  293. data/lib/extlib/string.rb +0 -132
  294. data/lib/extlib/struct.rb +0 -8
  295. data/lib/extlib/tasks/release.rb +0 -9
  296. data/lib/extlib/time.rb +0 -12
  297. data/lib/extlib/version.rb +0 -3
  298. data/lib/extlib/virtual_file.rb +0 -10
@@ -0,0 +1,90 @@
1
+ require File.join(File.dirname(__FILE__), "spec_helper")
2
+
3
+ describe Merb::AbstractController, " rendering plain strings" do
4
+
5
+ before do
6
+ Merb.push_path(:layout, File.dirname(__FILE__) / "controllers" / "views" / "layouts")
7
+ end
8
+
9
+ it "should render two thrown_contents into same object" do
10
+ dispatch_should_make_body("RenderTwoThrowContents", "FooBar")
11
+ end
12
+
13
+ it "should support rendering plain strings with no layout" do
14
+ dispatch_should_make_body("RenderString", "the index")
15
+ end
16
+
17
+ it "should support rendering plain strings with custom layouts" do
18
+ dispatch_should_make_body("RenderStringCustomLayout", "Custom: the index")
19
+ end
20
+
21
+ it "should support rendering plain strings with the application layout" do
22
+ dispatch_should_make_body("RenderStringAppLayout", "App: the index")
23
+ end
24
+
25
+ it "should support rendering plain strings with the controller layout" do
26
+ dispatch_should_make_body("RenderStringControllerLayout", "Controller: the index")
27
+ end
28
+
29
+ it "should support rendering plain strings with dynamic layouts" do
30
+ dispatch_should_make_body("RenderStringDynamicLayout", "Custom: the index", :index)
31
+ dispatch_should_make_body("RenderStringDynamicLayout", "Alt: the alt index", :alt_index)
32
+ end
33
+
34
+ end
35
+
36
+ describe Merb::AbstractController, " rendering templates" do
37
+
38
+ it "should support rendering templates with no layout" do
39
+ dispatch_should_make_body("RenderTemplate", "the index")
40
+ end
41
+
42
+ it "should support rendering templates with custom layouts" do
43
+ dispatch_should_make_body("RenderStringCustomLayout", "Custom: the index")
44
+ end
45
+
46
+ it "should support rendering templates with the application layout" do
47
+ dispatch_should_make_body("RenderTemplateAppLayout", "App: the index")
48
+ end
49
+
50
+ it "should support rendering plain strings with the controller layout" do
51
+ dispatch_should_make_body("RenderTemplateControllerLayout", "Controller: the index")
52
+ end
53
+
54
+ it "should support rendering templates without any layout (even if the default layout exists)" do
55
+ dispatch_should_make_body("RenderNoDefaultAppLayout", "the index")
56
+ end
57
+
58
+ it "should inherit the layout setting from a parent controller class" do
59
+ dispatch_should_make_body("RenderNoDefaultAppLayoutInherited", "the index")
60
+ end
61
+
62
+ it "should support reverting to the default layout" do
63
+ dispatch_should_make_body("RenderDefaultAppLayoutInheritedOverride", "App: the index")
64
+ end
65
+
66
+ it "should support rendering templates with a custom location" do
67
+ dispatch_should_make_body("RenderTemplateCustomLocation", "Wonderful")
68
+ end
69
+
70
+ it "should support rendering templates from an absolute path location" do
71
+ dispatch_should_make_body("RenderTemplateAbsolutePath", "Wonderful")
72
+ end
73
+
74
+ it "should support rendering templates with multiple roots" do
75
+ dispatch_should_make_body("RenderTemplateMultipleRoots", "App: Multiple")
76
+ end
77
+
78
+ it "should support rendering templates with multiple roots, first root" do
79
+ dispatch_should_make_body("RenderTemplateMultipleRoots", "default show", "show")
80
+ end
81
+
82
+ it "should support rendering templates with multiple roots and custom location" do
83
+ dispatch_should_make_body("RenderTemplateMultipleRootsAndCustomLocation", "Woot.")
84
+ end
85
+
86
+ it "should support rendering templates with multiple roots and custom location from an inherited controller" do
87
+ dispatch_should_make_body("RenderTemplateMultipleRootsInherited", "Good.")
88
+ end
89
+
90
+ end
@@ -0,0 +1,31 @@
1
+ __DIR__ = File.dirname(__FILE__)
2
+ require File.join(__DIR__, "..", "..", "spec_helper")
3
+
4
+ require File.join(__DIR__, "controllers", "filters")
5
+ require File.join(__DIR__, "controllers", "cousins")
6
+ require File.join(__DIR__, "controllers", "render")
7
+ require File.join(__DIR__, "controllers", "partial")
8
+ require File.join(__DIR__, "controllers", "display")
9
+ require File.join(__DIR__, "controllers", "helpers")
10
+
11
+ Merb.start :environment => 'test'
12
+
13
+ module Merb::Test::Behaviors
14
+ include Merb::Test::RequestHelper
15
+
16
+ def dispatch_should_make_body(klass, body, action = :index, opts = {}, env = {}, &blk)
17
+ klass = Merb::Test::Fixtures::Abstract.const_get(klass)
18
+ if opts.key?(:presets)
19
+ controller = klass.new
20
+ opts[:presets].each { |attr, value| controller.send(attr, value)}
21
+ controller._dispatch(action.to_s)
22
+ else
23
+ controller = dispatch_to(klass, action, opts, env, &blk)
24
+ end
25
+ controller.body.should == body
26
+ end
27
+ end
28
+
29
+ Spec::Runner.configure do |config|
30
+ config.include Merb::Test::Behaviors
31
+ end
@@ -0,0 +1,33 @@
1
+ # The before/after filters in BootLoaders are considered public API.
2
+ #
3
+ # However, Merb::BootLoader.subclasses is not considered public API and should not be used in plugins.
4
+
5
+ require File.join(File.dirname(__FILE__), "spec_helper")
6
+
7
+ class Merb::BootLoader::AfterTest < Merb::BootLoader
8
+ after Merb::BootLoader::BeforeAppLoads
9
+
10
+ def self.run
11
+ end
12
+ end
13
+
14
+ class Merb::BootLoader::BeforeTest < Merb::BootLoader
15
+ before Merb::BootLoader::Templates
16
+
17
+ def self.run
18
+ end
19
+ end
20
+
21
+ describe "The BootLoader" do
22
+
23
+ it "should support adding a BootLoader after another" do
24
+ idx = Merb::BootLoader.subclasses.index("Merb::BootLoader::BeforeAppLoads")
25
+ Merb::BootLoader.subclasses.index("Merb::BootLoader::AfterTest").should == idx + 1
26
+ end
27
+
28
+ it "should support adding a BootLoader before another" do
29
+ idx = Merb::BootLoader.subclasses.index("Merb::BootLoader::Templates")
30
+ Merb::BootLoader.subclasses.index("Merb::BootLoader::BeforeTest").should == idx - 1
31
+ end
32
+
33
+ end
@@ -0,0 +1 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
@@ -0,0 +1,103 @@
1
+ require File.join(File.dirname(__FILE__), "spec_helper")
2
+
3
+ describe "basic_authentication in general", :shared => true do
4
+
5
+ it "should halt the filter chain and return a 401 status code if no authentication is sent" do
6
+ response = dispatch_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index)
7
+ response.body.should == "HTTP Basic: Access denied.\n"
8
+ response.status.should == 401
9
+ end
10
+
11
+ it "should halt the filter chain and return a 401 status code on invalid username and password" do
12
+ u, p = "John", "password"
13
+ response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index, u, p)
14
+ response.body.should == "HTTP Basic: Access denied.\n"
15
+ response.status.should == 401
16
+ end
17
+
18
+ it "should halt the filter chain and return a 401 status code on invalid username and valid password" do
19
+ u, p = "John", "secret"
20
+ response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index, u, p)
21
+ response.body.should == "HTTP Basic: Access denied.\n"
22
+ response.status.should == 401
23
+ end
24
+
25
+ it "should halt the filter chain and return a 401 status code on valid username and invalid password" do
26
+ u, p = "Fred", "password"
27
+ response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index, u, p)
28
+ response.body.should == "HTTP Basic: Access denied.\n"
29
+ response.status.should == 401
30
+ end
31
+
32
+ it "should call the action on valid username and password" do
33
+ u, p = "Fred", "secret"
34
+ response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index, u, p)
35
+ response.body.should == "authenticated"
36
+ response.status.should == 200
37
+ end
38
+
39
+ end
40
+
41
+ describe Merb::Controller, "#basic_authentication with no realm" do
42
+
43
+ it_should_behave_like "basic_authentication in general"
44
+
45
+ it "should have a default WWW-Authenticate realm of 'Application' if no authentication is sent" do
46
+ response = dispatch_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index)
47
+ response.headers['WWW-Authenticate'] = 'Basic realm="Application"'
48
+ end
49
+
50
+ it "should have a default WWW-Authenticate realm of 'Application' if incorrect authentication is sent" do
51
+ u, p = "John", "password"
52
+ response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index, u, p)
53
+ response.headers['WWW-Authenticate'] = 'Basic realm="Application"'
54
+ end
55
+
56
+ end
57
+
58
+ describe Merb::Controller, "#basic_authentication with realm" do
59
+
60
+ it_should_behave_like "basic_authentication in general"
61
+
62
+ it "should set the WWW-Authenticate realm if no authentication is sent" do
63
+ response = dispatch_to(Merb::Test::Fixtures::Controllers::BasicAuthenticationWithRealm, :index)
64
+ response.headers['WWW-Authenticate'] = 'Basic realm="My SuperApp"'
65
+ end
66
+
67
+ it "should set the WWW-Authenticate realm if incorrect authentication is sent" do
68
+ u, p = "John", "password"
69
+ response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::BasicAuthenticationWithRealm, :index, u, p)
70
+ response.headers['WWW-Authenticate'] = 'Basic realm="My SuperApp"'
71
+ end
72
+
73
+ end
74
+
75
+ describe Merb::Controller, "#basic_authentication.authenticate" do
76
+
77
+ it "should pass in the username and password and return the result of the block" do
78
+ u, p = "Fred", "secret"
79
+ response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::AuthenticateBasicAuthentication, :index, u, p)
80
+ response.body.should == "Fred:secret"
81
+ end
82
+
83
+ end
84
+
85
+ describe Merb::Controller, "#basic_authentication.request" do
86
+
87
+ it "should halt the filter chain and return a 401 status code" do
88
+ response = dispatch_to(Merb::Test::Fixtures::Controllers::RequestBasicAuthentication, :index)
89
+ response.body.should == "HTTP Basic: Access denied.\n"
90
+ response.status.should == 401
91
+ end
92
+
93
+ it "should have a default WWW-Authenticate realm of 'Application'" do
94
+ response = dispatch_to(Merb::Test::Fixtures::Controllers::RequestBasicAuthentication, :index)
95
+ response.headers['WWW-Authenticate'].should == 'Basic realm="Application"'
96
+ end
97
+
98
+ it "should set the WWW-Authenticate realm" do
99
+ response = dispatch_to(Merb::Test::Fixtures::Controllers::RequestBasicAuthenticationWithRealm, :index)
100
+ response.headers['WWW-Authenticate'].should == 'Basic realm="My SuperApp"'
101
+ end
102
+
103
+ end
@@ -0,0 +1,36 @@
1
+ require File.join(File.dirname(__FILE__), "spec_helper")
2
+
3
+ describe Merb::Controller, " callable actions" do
4
+
5
+ before do
6
+ Merb.push_path(:layout, File.dirname(__FILE__) / "controllers" / "views" / "layouts")
7
+ Merb::Router.prepare do |r|
8
+ r.default_routes
9
+ end
10
+ end
11
+
12
+ it "should not have any callable actions by default" do
13
+ Merb::Controller.callable_actions.should be_empty
14
+ end
15
+
16
+ it "should dispatch to callable actions" do
17
+ controller = dispatch_to(Merb::Test::Fixtures::Controllers::Base, :index)
18
+ controller.body.should == "index"
19
+ controller.status.should == 200
20
+ end
21
+
22
+ it "should not dispatch to hidden actions" do
23
+ calling { dispatch_to(Merb::Test::Fixtures::Controllers::Base, :hidden) }.
24
+ should raise_error(Merb::ControllerExceptions::ActionNotFound)
25
+ end
26
+
27
+ it "should dispatch to included methods with show_action called" do
28
+ dispatch_to(Merb::Test::Fixtures::Controllers::Base, :baz).body.should == "baz"
29
+ end
30
+
31
+ it "should not dispatch to included methods with show_action not called" do
32
+ calling { dispatch_to(Merb::Test::Fixtures::Controllers::Base, :bat) }.
33
+ should raise_error(Merb::ControllerExceptions::ActionNotFound)
34
+ end
35
+
36
+ end
@@ -0,0 +1,45 @@
1
+ module Merb::Test::Fixtures::Controllers
2
+
3
+ class Testing < Merb::Controller
4
+ self._template_root = File.dirname(__FILE__) / "views"
5
+ end
6
+
7
+ class BasicAuthentication < Testing
8
+ before :authenticate, :only => :index
9
+
10
+ def index
11
+ "authenticated"
12
+ end
13
+
14
+ protected
15
+
16
+ def authenticate
17
+ basic_authentication { |u, p| u == "Fred" && p == "secret" }
18
+ end
19
+ end
20
+
21
+ class BasicAuthenticationWithRealm < BasicAuthentication
22
+ def authenticate
23
+ basic_authentication("My Super App") { |u, p| u == "Fred" && p == "secret" }
24
+ end
25
+ end
26
+
27
+ class AuthenticateBasicAuthentication < Testing
28
+ def index
29
+ basic_authentication.authenticate { |u, p| "Fred:secret" }
30
+ end
31
+ end
32
+
33
+ class RequestBasicAuthentication < BasicAuthentication
34
+ def authenticate
35
+ basic_authentication.request
36
+ end
37
+ end
38
+
39
+ class RequestBasicAuthenticationWithRealm < BasicAuthentication
40
+ def authenticate
41
+ basic_authentication("My SuperApp").request
42
+ end
43
+ end
44
+
45
+ end
@@ -0,0 +1,36 @@
1
+ module Merb::Test::Fixtures
2
+ module Controllers
3
+ class Testing < Merb::Controller
4
+ self._template_root = File.dirname(__FILE__) / "views"
5
+ end
6
+
7
+ module Inclusion
8
+ def self.included(base)
9
+ base.show_action(:baz)
10
+ end
11
+
12
+ def baz
13
+ "baz"
14
+ end
15
+
16
+ def bat
17
+ "bat"
18
+ end
19
+ end
20
+
21
+ class Base < Testing
22
+ include Inclusion
23
+
24
+ def index
25
+ self.status = :ok
26
+ "index"
27
+ end
28
+
29
+ def hidden
30
+ "Bar"
31
+ end
32
+ hide_action :hidden
33
+ end
34
+
35
+ end
36
+ end
@@ -0,0 +1,118 @@
1
+ module Merb::Test::Fixtures::Controllers
2
+ class SomeModel
3
+ def to_xml; "<XML:Model />" end
4
+ def to_json(options = {})
5
+ includes = options[:include].join(', ') rescue ""
6
+ excludes = options[:except].first rescue ""
7
+ "{ 'include': '#{includes}', 'exclude': '#{excludes}' }"
8
+ end
9
+ def to_param
10
+ "1"
11
+ end
12
+ end
13
+
14
+
15
+ class Testing < Merb::Controller
16
+ self._template_root = File.dirname(__FILE__) / "views"
17
+ end
18
+
19
+
20
+ class Display < Testing
21
+ def index
22
+ @obj = SomeModel.new
23
+ display @obj
24
+ end
25
+ end
26
+
27
+ class DisplayWithLayout < Testing
28
+ provides :json
29
+
30
+ def index
31
+ @obj = SomeModel.new
32
+ display @obj, :layout => :custom_arg
33
+ end
34
+ end
35
+
36
+ class DisplayHtmlDefault < Display; end
37
+
38
+ class DisplayClassProvides < Display
39
+ provides :xml
40
+ end
41
+
42
+
43
+ class DisplayLocalProvides < Display
44
+ def index
45
+ @obj = SomeModel.new
46
+ provides :xml
47
+ display @obj
48
+ end
49
+ end
50
+
51
+
52
+ class DisplayWithTemplate < Display
53
+ layout :custom
54
+
55
+ def no_layout
56
+ render :layout => false
57
+ end
58
+
59
+ def absolute_without_mime
60
+ render :template => File.expand_path(self._template_root) / "merb/test/fixtures/controllers/html_default/index"
61
+ end
62
+
63
+ def absolute_with_mime
64
+ render :template => File.expand_path(self._template_root) / "merb/test/fixtures/controllers/html_default/index.html"
65
+ end
66
+
67
+ def relative_without_mime
68
+ render :template => "merb/test/fixtures/controllers/html_default/index"
69
+ end
70
+
71
+ def relative_with_mime
72
+ render :template => "merb/test/fixtures/controllers/html_default/index.html"
73
+ end
74
+
75
+ end
76
+
77
+ class DisplayWithTemplateArgument < Display
78
+ def index
79
+ @obj = SomeModel.new
80
+ display @obj, :layout => :custom_arg
81
+ end
82
+
83
+ def index_by_arg
84
+ @obj = SomeModel.new
85
+ display @obj, "merb/test/fixtures/controllers/display_with_template_argument/index.html"
86
+ end
87
+ end
88
+
89
+ class DisplayWithStringLocation < Display
90
+ provides :json
91
+ def index
92
+ @obj = SomeModel.new
93
+ display @obj, :location => "/some_resources/#{@obj.to_param}"
94
+ end
95
+ end
96
+
97
+ class DisplayWithStatus < Display
98
+ provides :json
99
+ def index
100
+ @obj = SomeModel.new
101
+ display @obj, :status => 500
102
+ end
103
+ end
104
+
105
+ class DisplayWithSerializationOptions < Display
106
+ provides :json
107
+
108
+ def index
109
+ @obj = SomeModel.new
110
+ display @obj, :include => [:beer, :jazz], :except => [:idiots]
111
+ end
112
+
113
+ def index_that_passes_empty_hash
114
+ @obj = SomeModel.new
115
+ display @obj, {}
116
+ end
117
+ end
118
+ end