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,7 @@
1
+ class Merb::Test::ControllerAssertionMock
2
+
3
+ def self.called(action)
4
+ return action
5
+ end
6
+
7
+ end
@@ -0,0 +1,11 @@
1
+ class Merb::Test::DispatchController < Merb::Controller
2
+
3
+ def index
4
+ Merb::Test::ControllerAssertionMock.called(:index)
5
+ end
6
+
7
+ def show
8
+ Merb::Test::ControllerAssertionMock.called(:show)
9
+ end
10
+
11
+ end
@@ -0,0 +1,38 @@
1
+ class SpecHelperController < Merb::Controller
2
+
3
+ def index
4
+ Merb::Test::ControllerAssertionMock.called(:index)
5
+ end
6
+
7
+ def show
8
+ Merb::Test::ControllerAssertionMock.called(:show)
9
+ end
10
+
11
+ def edit
12
+ Merb::Test::ControllerAssertionMock.called(:edit)
13
+ end
14
+
15
+ def new
16
+ Merb::Test::ControllerAssertionMock.called(:new)
17
+ end
18
+
19
+ def create
20
+ Merb::Test::ControllerAssertionMock.called(:create)
21
+ end
22
+
23
+ def update
24
+ Merb::Test::ControllerAssertionMock.called(:update)
25
+ end
26
+
27
+ def destroy
28
+ Merb::Test::ControllerAssertionMock.called(:destroy)
29
+ end
30
+ end
31
+
32
+ module Namespaced
33
+ class SpecHelperController < Merb::Controller
34
+ def index
35
+ Merb::Test::ControllerAssertionMock.called(:index)
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,159 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
2
+
3
+ Merb.start :environment => 'test', :log_level => :fatal
4
+
5
+ Dir[File.join(File.dirname(__FILE__), "controllers/**/*.rb")].each do |f|
6
+ require f
7
+ end
8
+
9
+ describe Merb::Test::MultipartRequestHelper do
10
+
11
+ describe "#dispatch_multipart_to" do
12
+
13
+ before(:all) do
14
+ @controller_klass = Merb::Test::DispatchController
15
+ end
16
+
17
+ it "should dispatch to the given controller and action" do
18
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
19
+
20
+ dispatch_multipart_to(@controller_klass, :index)
21
+ end
22
+
23
+ it "should dispatch to the given controller and action with params" do
24
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
25
+
26
+ controller = dispatch_multipart_to(@controller_klass, :show, :name => "Fred")
27
+ controller.params[:name].should == "Fred"
28
+ end
29
+
30
+ it "should handle a file object when used as a param" do
31
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
32
+ file_name = File.join(File.dirname(__FILE__), "multipart_upload_text_file.txt")
33
+ File.open( file_name ) do |file|
34
+ controller = dispatch_multipart_to(@controller_klass, :show, :my_file => file)
35
+ file_params = controller.params[:my_file]
36
+ file_params[:content_type].should == "text/plain"
37
+ file_params[:size].should == File.size(file_name)
38
+ file_params[:tempfile].should be_a_kind_of(File)
39
+ file_params[:filename].should == "multipart_upload_text_file.txt"
40
+ end
41
+ end
42
+ end
43
+
44
+ describe "#multipart_post" do
45
+ before(:each) do
46
+ Merb::Router.prepare do |r|
47
+ r.resources :spec_helper_controller
48
+ end
49
+ end
50
+
51
+ it "should post to the create action" do
52
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:create)
53
+ multipart_post("/spec_helper_controller")
54
+ end
55
+
56
+ it "should post to the create action with params" do
57
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:create)
58
+ controller = multipart_post("/spec_helper_controller", :name => "Harry")
59
+ controller.params[:name].should == "Harry"
60
+ end
61
+
62
+ it "should upload a file to the action using multipart" do
63
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:create)
64
+ file_name = File.join(File.dirname(__FILE__), "multipart_upload_text_file.txt")
65
+ File.open( file_name ) do |file|
66
+ controller = multipart_post("/spec_helper_controller", :my_file => file)
67
+ file_params = controller.params[:my_file]
68
+ file_params[:content_type].should == "text/plain"
69
+ file_params[:size].should == File.size(file_name)
70
+ file_params[:tempfile].should be_a_kind_of(File)
71
+ file_params[:filename].should == "multipart_upload_text_file.txt"
72
+ end
73
+ end
74
+
75
+ end
76
+
77
+ describe "#multipart_put" do
78
+ before(:each) do
79
+ Merb::Router.prepare do |r|
80
+ r.resources :spec_helper_controller
81
+ end
82
+ end
83
+ it "should put to the update action multipart" do
84
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:update)
85
+ multipart_put("/spec_helper_controller/1")
86
+ end
87
+
88
+ it "should put to the update action with multipart params" do
89
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:update)
90
+ controller = multipart_put("/spec_helper_controller/my_id", :name => "Harry")
91
+ controller.params[:name].should == "Harry"
92
+ controller.params[:id].should == "my_id"
93
+ end
94
+
95
+ it "should upload a file to the action using multipart" do
96
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:update)
97
+ file_name = File.join(File.dirname(__FILE__), "multipart_upload_text_file.txt")
98
+ File.open( file_name ) do |file|
99
+ controller = multipart_put("/spec_helper_controller/my_id", :my_file => file)
100
+ controller.params[:id].should == "my_id"
101
+ file_params = controller.params[:my_file]
102
+ file_params[:content_type].should == "text/plain"
103
+ file_params[:size].should == File.size(file_name)
104
+ file_params[:tempfile].should be_a_kind_of(File)
105
+ file_params[:filename].should == "multipart_upload_text_file.txt"
106
+ end
107
+ end
108
+ end
109
+ end
110
+
111
+ module Merb::Test::MultipartRequestHelper
112
+ describe Param, '#to_multipart' do
113
+ it "should represent the key and value correctly" do
114
+ param = Param.new('foo', 'bar')
115
+ param.to_multipart.should == %(Content-Disposition: form-data; name="foo"\r\n\r\nbar\r\n)
116
+ end
117
+ end
118
+
119
+ describe FileParam, '#to_multipart' do
120
+ it "should represent the key, filename and content correctly" do
121
+ param = FileParam.new('foo', '/bar.txt', 'baz')
122
+ param.to_multipart.should == %(Content-Disposition: form-data; name="foo"; filename="/bar.txt"\r\nContent-Type: text/plain\r\n\r\nbaz\r\n)
123
+ end
124
+ end
125
+
126
+ describe Post, '#push_params(params) param parsing' do
127
+ before(:each) do
128
+ @fake_return_param = mock('fake return_param')
129
+ end
130
+
131
+ it "should create Param from params when param doesn't respond to read" do
132
+ params = { 'normal' => 'normal_param' }
133
+ Param.should_receive(:new).with('normal', 'normal_param').and_return(@fake_return_param)
134
+ Post.new.push_params(params)
135
+ end
136
+
137
+ it "should create FileParam from params when param does response to read" do
138
+ file_param = mock('file param')
139
+ file_param.should_receive(:read).and_return('file contents')
140
+ file_param.should_receive(:path).and_return('file.txt')
141
+ params = { 'file' => file_param }
142
+ FileParam.should_receive(:new).with('file', 'file.txt', 'file contents').and_return(@fake_return_param)
143
+ Post.new.push_params(params)
144
+ end
145
+ end
146
+
147
+ describe Post, '#to_multipart' do
148
+ it "should create a multipart request from the params" do
149
+ file_param = mock('file param')
150
+ file_param.should_receive(:read).and_return('file contents')
151
+ file_param.should_receive(:path).and_return('file.txt')
152
+ params = { 'file' => file_param, 'normal' => 'normal_param' }
153
+ multipart = Post.new(params)
154
+ query, content_type = multipart.to_multipart
155
+ content_type.should == "multipart/form-data, boundary=----------0xKhTmLbOuNdArY"
156
+ query.should == "------------0xKhTmLbOuNdArY\r\nContent-Disposition: form-data; name=\"file\"; filename=\"file.txt\"\r\nContent-Type: text/plain\r\n\r\nfile contents\r\n------------0xKhTmLbOuNdArY\r\nContent-Disposition: form-data; name=\"normal\"\r\n\r\nnormal_param\r\n------------0xKhTmLbOuNdArY--"
157
+ end
158
+ end
159
+ end
@@ -0,0 +1 @@
1
+ File With Some Text In It For Testing Multipart Uploads
@@ -0,0 +1,221 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
2
+
3
+ Merb.start :environment => 'test', :log_level => :fatal
4
+
5
+ Dir[File.join(File.dirname(__FILE__), "controllers/**/*.rb")].each do |f|
6
+ require f
7
+ end
8
+
9
+ describe Merb::Test::RequestHelper do
10
+ describe "#dispatch_to" do
11
+
12
+ before(:all) do
13
+ @controller_klass = Merb::Test::DispatchController
14
+ end
15
+
16
+ it "should dispatch to the given controller and action" do
17
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
18
+
19
+ dispatch_to(@controller_klass, :index)
20
+ end
21
+
22
+ it "should dispatch to the given controller and action with params" do
23
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
24
+
25
+ controller = dispatch_to(@controller_klass, :show, :name => "Fred")
26
+ controller.params[:name].should == "Fred"
27
+ end
28
+
29
+ it "should dispatch to the given controller and action with the query string merged into the params" do
30
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
31
+ controller = dispatch_to(@controller_klass, :show, {:name => "Fred"}, {'QUERY_STRING' => "last_name=Jones&age=42"} )
32
+
33
+ controller.params[:name].should == "Fred"
34
+ controller.params[:last_name].should == "Jones"
35
+ controller.params[:age].should == "42"
36
+ end
37
+
38
+ it "should not hit the router to match its route" do
39
+ Merb::Router.should_not_receive(:match)
40
+ dispatch_to(@controller_klass, :index)
41
+ end
42
+ end
43
+
44
+ describe "#dispatch_with_basic_authentication_to" do
45
+
46
+ before(:all) do
47
+ @controller_klass = Merb::Test::DispatchController
48
+ end
49
+
50
+ it "should dispatch to the given controller and action" do
51
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
52
+
53
+ dispatch_with_basic_authentication_to(@controller_klass, :index, "Fred", "secret")
54
+ end
55
+
56
+ it "should dispatch to the given controller and action with authentication token" do
57
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
58
+
59
+ controller = dispatch_with_basic_authentication_to(@controller_klass, :show, "Fred", "secret")
60
+
61
+ controller.request.env["X_HTTP_AUTHORIZATION"].should == "Basic #{Base64.encode64("Fred:secret")}"
62
+ end
63
+
64
+ it "should dispatch to the given controller and action with authentication token and params" do
65
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
66
+
67
+ controller = dispatch_with_basic_authentication_to(@controller_klass, :show, "Fred", "secret", :name => "Fred")
68
+
69
+ controller.request.env["X_HTTP_AUTHORIZATION"].should == "Basic #{Base64.encode64("Fred:secret")}"
70
+ controller.params[:name].should == "Fred"
71
+ end
72
+
73
+ it "should not hit the router to match its route" do
74
+ Merb::Router.should_not_receive(:match)
75
+ dispatch_with_basic_authentication_to(@controller_klass, :index, "Fred", "secret")
76
+ end
77
+ end
78
+
79
+ describe "#get" do
80
+ before(:each) do
81
+ Merb::Router.prepare do |r|
82
+ r.resources :spec_helper_controller
83
+ r.match("/:controller/:action/:custom").to(:controller => ":controller")
84
+ end
85
+ end
86
+
87
+ it "should perform the index action when used with a get" do
88
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
89
+ get("/spec_helper_controller")
90
+ end
91
+
92
+ it "should perform the index action and have params available" do
93
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
94
+ controller = get("/spec_helper_controller", :name => "Harry")
95
+ controller.params[:name].should == "Harry"
96
+ end
97
+
98
+ it "should perform the index action and have params available from the query string" do
99
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
100
+ controller = get("/spec_helper_controller?last_name=Oswald&age=25", :name => "Harry")
101
+ controller.params[:name].should == "Harry"
102
+ controller.params[:last_name].should == "Oswald"
103
+ controller.params[:age].should == "25"
104
+ end
105
+
106
+ it "should evaluate in the context of the controller in the block" do
107
+ get("/spec_helper_controller") do |controller|
108
+ controller.class.should == SpecHelperController
109
+ end
110
+ end
111
+
112
+ it "should allow for custom router params" do
113
+ controller = get("/spec_helper_controller/index/my_custom_stuff")
114
+ controller.params[:custom].should == "my_custom_stuff"
115
+ end
116
+
117
+ it "should get the show action" do
118
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
119
+ controller = get("/spec_helper_controller/my_id")
120
+ controller.params[:id].should == "my_id"
121
+ end
122
+ end
123
+
124
+ describe "#post" do
125
+ before(:each) do
126
+ Merb::Router.prepare do |r|
127
+ r.resources :spec_helper_controller
128
+ end
129
+ end
130
+
131
+ it "should post to the create action" do
132
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:create)
133
+ post("/spec_helper_controller")
134
+ end
135
+
136
+ it "should post to the create action with params" do
137
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:create)
138
+ controller = post("/spec_helper_controller", :name => "Harry")
139
+ controller.params[:name].should == "Harry"
140
+ end
141
+ end
142
+
143
+ describe "#put" do
144
+ before(:each) do
145
+ Merb::Router.prepare do |r|
146
+ r.resources :spec_helper_controller
147
+ end
148
+ end
149
+ it "should put to the update action" do
150
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:update)
151
+ put("/spec_helper_controller/1")
152
+ end
153
+
154
+ it "should put to the update action with params" do
155
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:update)
156
+ controller = put("/spec_helper_controller/my_id", :name => "Harry")
157
+ controller.params[:name].should == "Harry"
158
+ controller.params[:id].should == "my_id"
159
+ end
160
+ end
161
+
162
+ describe "#delete" do
163
+ before(:each) do
164
+ Merb::Router.prepare do |r|
165
+ r.resources :spec_helper_controller
166
+ end
167
+ end
168
+ it "should put to the update action" do
169
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:destroy)
170
+ delete("/spec_helper_controller/1")
171
+ end
172
+
173
+ it "should put to the update action with params" do
174
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:destroy)
175
+ controller = delete("/spec_helper_controller/my_id", :name => "Harry")
176
+ controller.params[:name].should == "Harry"
177
+ controller.params[:id].should == "my_id"
178
+ end
179
+ end
180
+
181
+ describe "#request" do
182
+ before(:each) do
183
+ Merb::Router.prepare do |r|
184
+ r.namespace :namespaced do |namespaced|
185
+ namespaced.resources :spec_helper_controller
186
+ end
187
+ end
188
+ end
189
+
190
+ it "should get namespaced index action" do
191
+ Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
192
+ controller = request("/namespaced/spec_helper_controller")
193
+ controller.class.should == Namespaced::SpecHelperController
194
+ end
195
+ end
196
+ end
197
+
198
+ module Merb::Test::RequestHelper
199
+ describe FakeRequest, ".new(env = {}, req = StringIO.new)" do
200
+ it "should create request with default enviroment, minus rack.input" do
201
+ @mock = FakeRequest.new
202
+ @mock.env.except('rack.input').should == FakeRequest::DEFAULT_ENV
203
+ end
204
+
205
+ it "should override default env values passed in HTTP format" do
206
+ @mock = FakeRequest.new('HTTP_ACCEPT' => 'nothing')
207
+ @mock.env['HTTP_ACCEPT'].should == 'nothing'
208
+ end
209
+
210
+ it "should override default env values passed in symbol format" do
211
+ @mock = FakeRequest.new(:http_accept => 'nothing')
212
+ @mock.env['HTTP_ACCEPT'].should == 'nothing'
213
+ end
214
+
215
+ it "should set rack input to an empty StringIO" do
216
+ @mock = FakeRequest.new
217
+ @mock.env['rack.input'].should be_kind_of(StringIO)
218
+ @mock.env['rack.input'].read.should == ''
219
+ end
220
+ end
221
+ end
@@ -0,0 +1,71 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
2
+
3
+ class TestController < Merb::Controller
4
+ def get(id = nil); end
5
+ def post; end
6
+ end
7
+
8
+ describe Merb::Test::RouteHelper do
9
+ before(:each) do
10
+ Merb::Router.prepare do |r|
11
+ r.match("/", :method => :get).to(:controller => "test_controller", :action => "get").name(:getter)
12
+ r.match("/", :method => :post).to(:controller => "test_controller", :action => "post")
13
+ r.match("/:id").to(:controller => "test_controller", :action => "get").name(:with_id)
14
+ end
15
+ end
16
+
17
+ describe "#url" do
18
+ it "should use Merb::Router" do
19
+ url(:getter).should == "/"
20
+ end
21
+
22
+ it "should work with a model as the parameter" do
23
+ model = mock(:model)
24
+ model.stub!(:id).and_return("123")
25
+ url(:with_id, model).should == "/123"
26
+ end
27
+
28
+ it "should work with a parameters hash" do
29
+ url(:with_id, :id => 123).should == "/123"
30
+ end
31
+
32
+ it "should turn extra hash items into query params" do
33
+ generated_url = url(:getter, :id => 123, :color => 'red', :size => 'large')
34
+ lambda {
35
+ generated_url.match(/\bid=123\b/) &&
36
+ generated_url.match(/\bsize=large\b/) &&
37
+ generated_url.match(/\bcolor=red\b/)
38
+ }.call.should_not be_nil
39
+ end
40
+
41
+ it "should remove items with nil values from query params" do
42
+ url(:getter, :color => nil, :size => 'large').should == "/?size=large"
43
+ end
44
+
45
+ it "should remove items with nil values from query params when named route isn't specified" do
46
+ url(:controller => 'cont', :action => 'act', :color => nil, :size => 'large').should == "/cont/act?size=large"
47
+ end
48
+ end
49
+
50
+ describe "#request_to" do
51
+ it "should GET if no method is given" do
52
+ request_to("/")[:action].should == "get"
53
+ end
54
+
55
+ it "should return a hash" do
56
+ Hash.should === request_to("/")
57
+ end
58
+
59
+ it "should contain the controller in the result" do
60
+ request_to("/")[:controller].should == "test_controller"
61
+ end
62
+
63
+ it "should contain the action in the result" do
64
+ request_to("/")[:action].should == "get"
65
+ end
66
+
67
+ it "should contain any parameters in the result" do
68
+ request_to("/123")[:id].should == "123"
69
+ end
70
+ end
71
+ end