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,113 @@
1
+ require File.join(File.dirname(__FILE__), "spec_helper")
2
+ describe "namespaced resource(s) routes" do
3
+
4
+ after :each do
5
+ Merb::Router.named_routes = {}
6
+ Merb::Router.routes = []
7
+ end
8
+
9
+ it "should match a get to /admin/blogposts without setting namespace" do
10
+ Merb::Router.prepare do |r|
11
+ r.match('/admin') do |admin|
12
+ admin.resources :blogposts
13
+ end
14
+ end
15
+ route_to('/admin/blogposts', :method => :get).should have_route(:controller => 'blogposts', :action => 'index', :id => nil, :namespace=>nil)
16
+ end
17
+
18
+ it "should match a get to /admin/blogposts setting namespace manually" do
19
+ Merb::Router.prepare do |r|
20
+ r.match('/admin').to(:namespace => "my_admin") do |admin|
21
+ admin.resources :blogposts
22
+ end
23
+ end
24
+ route_to('/admin/blogposts', :method => :get).should have_route(:controller => 'blogposts', :action => 'index', :id => nil, :namespace=>"my_admin")
25
+ end
26
+
27
+ it "should match a get to /admin/blogposts to the blogposts controller and index action" do
28
+ Merb::Router.prepare do |r|
29
+ r.namespace :admin do |admin|
30
+ admin.resources :blogposts
31
+ end
32
+ end
33
+ route_to('/admin/blogposts', :method => :get).should have_route(:controller => 'blogposts', :action => 'index', :id => nil, :namespace => 'admin')
34
+ end
35
+
36
+ it "should match a get to /admin/foo to the foo controller and show action" do
37
+ Merb::Router.prepare do |r|
38
+ r.namespace :admin do |admin|
39
+ admin.resource :foo
40
+ end
41
+ end
42
+ route_to('/admin/foo', :method => :get).should have_route(:controller => 'foo', :action => 'show', :id => nil)
43
+ end
44
+
45
+ it "should match a get to /admin/foo/blogposts to the blogposts controller and index action" do
46
+ Merb::Router.prepare do |r|
47
+ r.namespace :admin do |admin|
48
+ admin.resource :foo do |foo|
49
+ foo.resources :blogposts
50
+ end
51
+ end
52
+ end
53
+ route_to('/admin/foo/blogposts', :method => :get).should have_route(:controller => 'blogposts', :action => 'index', :id => nil, :namespace => 'admin')
54
+ end
55
+
56
+ it "should match a get to /admin/blogposts/1/foo to the foo controller and the show action" do
57
+ Merb::Router.prepare do |r|
58
+ r.namespace :admin do |admin|
59
+ admin.resources :blogposts do |blogposts|
60
+ blogposts.resource :foo
61
+ end
62
+ end
63
+ end
64
+ route_to('/admin/blogposts/1/foo', :method => :get).should have_route(:controller => 'foo', :action => 'show', :blogpost_id => '1', :id => nil, :namespace => "admin")
65
+ end
66
+
67
+ it "should match a get to /blogposts to the blogposts controller when namespace is passed in to resources" do
68
+ Merb::Router.prepare do |r|
69
+ r.resources :blogposts, :namespace => "admin"
70
+ end
71
+ route_to("/blogposts", :method =>:get).should have_route(:controller => 'blogposts', :action => 'index', :id => nil, :namespace => "admin")
72
+ end
73
+
74
+ it "should match a get to /blogposts/1/foo to the foo controller when namespace is passed in to resources as an option" do
75
+ Merb::Router.prepare do |r|
76
+ r.resources :blogposts, :namespace => "admin" do |blogposts|
77
+ blogposts.resource :foo, :namespace => "admin"
78
+ end
79
+ end
80
+ route_to("/blogposts", :method =>:get).should have_route(:controller => 'blogposts', :action => 'index', :id => nil, :namespace => "admin")
81
+ route_to("/blogposts/1/foo", :method =>:get).should have_route(:controller => 'foo', :action => 'show', :blogpost_id => '1', :namespace => "admin")
82
+ end
83
+
84
+ it "should match a get to /blogposts/1/foo to the foo controller without a namespace" do
85
+ Merb::Router.prepare do |r|
86
+ r.resources :blogposts, :namespace => "admin" do |blogposts|
87
+ blogposts.resource :foo
88
+ end
89
+ end
90
+ route_to("/blogposts/1/foo", :method =>:get).should have_route(:controller => 'foo', :action => 'show', :blogpost_id => '1', :namespace => nil)
91
+ end
92
+
93
+ it "should match a get to /my_admin/blogposts to the blogposts controller with a custom patch setting" do
94
+ Merb::Router.prepare do |r|
95
+ r.namespace(:admin, :path=>"my_admin") do |admin|
96
+ admin.resources :blogposts
97
+ end
98
+ end
99
+ route_to('/my_admin/blogposts', :method => :get).should have_route(:controller => 'blogposts', :action => 'index', :id => nil, :namespace => 'admin')
100
+ end
101
+
102
+ it "should match a get to /admin/blogposts/1/foo to the foo controller and the show action with namespace admin" do
103
+ Merb::Router.prepare do |r|
104
+ r.namespace(:admin, :path=>"") do |admin|
105
+ admin.resources :blogposts do |blogposts|
106
+ blogposts.resource :foo
107
+ end
108
+ end
109
+ end
110
+ route_to('/blogposts/1/foo', :method => :get).should have_route(:controller => 'foo', :action => 'show', :blogpost_id => '1', :id => nil, :namespace => "admin")
111
+ end
112
+
113
+ end
@@ -0,0 +1,97 @@
1
+ require File.join(File.dirname(__FILE__), "spec_helper")
2
+
3
+ describe "A route derived from the blocks of #match" do
4
+
5
+ it "should inherit the :controller option." do
6
+ Merb::Router.prepare do |r|
7
+ r.match('/alpha', :controller=>'Alphas') do |alpha|
8
+ alpha.match('').to(:action=>'normal')
9
+ end
10
+ end
11
+ route_to('/alpha').should have_route(:controller=>'Alphas',:action=>'normal')
12
+ end
13
+
14
+ it "should inherit the :action option." do
15
+ Merb::Router.prepare do |r|
16
+ r.match('/alpha', :action=>'wierd') do |alpha|
17
+ alpha.match('').to(:controller=>'Alphas')
18
+ end
19
+ end
20
+ route_to('/alpha').should have_route(:controller=>'Alphas',:action=>'wierd')
21
+ end
22
+
23
+ it "should inherit the default :action of 'index'" do
24
+ Merb::Router.prepare do |r|
25
+ r.match('/alpha', :controller=>'Alphas') do |alpha|
26
+ alpha.match('').to({})
27
+ end
28
+ end
29
+ route_to('/alpha').should have_route(:controller=>'Alphas',:action=>'index')
30
+ end
31
+
32
+ it "should make use of the :params option" do
33
+ Merb::Router.prepare do |r|
34
+ r.match('/alpha', :controller=>'Alphas', :params =>{:key=>'value'}) do |alpha|
35
+ alpha.match('').to(:action=>'normal',:key2=>'value2')
36
+ end
37
+ end
38
+ route_to('/alpha').should have_route(:controller=>'Alphas',:key=>'value',:action=>'normal',:key2=>'value2')
39
+ end
40
+
41
+ it "should inherit the parameters through many levels" do
42
+ Merb::Router.prepare do |r|
43
+ r.match('/alpha', :controller=>'Alphas') do |alpha|
44
+ alpha.match('/beta', :action=>'normal') do |beta|
45
+ beta.match('/:id').to(:id=>':id')
46
+ end
47
+ end
48
+ end
49
+ route_to('/alpha/beta/gamma').should have_route(:controller=>'Alphas',:action=>'normal', :id=>'gamma')
50
+ end
51
+
52
+ it "allows wrapping of nested routes all having shared argument" do
53
+ Merb::Router.prepare do |r|
54
+ r.match('/:language') do |i18n|
55
+ i18n.match!('/:controller/:action')
56
+ end
57
+ end
58
+ route_to('/fr/hotels/search').should have_route(:controller => 'hotels', :action => "search", :language => "fr")
59
+ end
60
+
61
+ it "allows wrapping of nested routes all having shared argument" do
62
+ Merb::Router.prepare do |r|
63
+ r.match(/\/?(.*)?/).to(:language => "[1]") do |l|
64
+ l.match("/guides/:action/:id").to(:controller => "tour_guides")
65
+ end
66
+ end
67
+
68
+ route_to('/en/guides/search/london').should have_route(:controller => 'tour_guides', :action => "search", :language => "en", :id => "london")
69
+ end
70
+
71
+ it "allows wrapping of nested routes all having shared OPTIONAL argument" do
72
+ Merb::Router.prepare do |r|
73
+ r.match(/\/?(.*)?/).to(:language => "[1]") do |l|
74
+ l.match("/guides/:action/:id").to(:controller => "tour_guides")
75
+ end
76
+ end
77
+
78
+ route_to('/guides/search/london').should have_route(:controller => 'tour_guides', :action => "search", :id => "london")
79
+ end
80
+
81
+ it "allows wrapping of nested routes all having shared argument with PREDEFINED VALUES" do
82
+ Merb::Router.prepare do |r|
83
+ r.match(/\/?(en|es|fr|be|nl)?/).to(:language => "[1]") do |l|
84
+ l.match("/guides/:action/:id").to(:controller => "tour_guides")
85
+ end
86
+ end
87
+
88
+ route_to('/nl/guides/search/denboss').should have_route(:controller => 'tour_guides', :action => "search", :id => "denboss", :language => "nl")
89
+ route_to('/es/guides/search/barcelona').should have_route(:controller => 'tour_guides', :action => "search", :id => "barcelona", :language => "es")
90
+ route_to('/fr/guides/search/lille').should have_route(:controller => 'tour_guides', :action => "search", :id => "lille", :language => "fr")
91
+ route_to('/en/guides/search/london').should have_route(:controller => 'tour_guides', :action => "search", :id => "london", :language => "en")
92
+ route_to('/be/guides/search/brussels').should have_route(:controller => 'tour_guides', :action => "search", :id => "brussels", :language => "be")
93
+
94
+ route_to('/guides/search/brussels').should have_route(:controller => 'tour_guides', :action => "search", :id => "brussels")
95
+ route_to('/se/guides/search/stokholm').should have_route(:controller => 'tour_guides', :action => "search", :id => "stokholm", :language => nil)
96
+ end
97
+ end
@@ -0,0 +1,41 @@
1
+ require File.join(File.dirname(__FILE__), "spec_helper")
2
+
3
+ Merb::Router.prepare do |r|
4
+ r.resources :blogposts do |b|
5
+ b.resources :comments do |c|
6
+ c.resources :versions
7
+ end
8
+ end
9
+ r.resources :users do |u|
10
+ u.resources :comments
11
+ end
12
+ r.resource :foo do |f|
13
+ f.resources :comments
14
+ end
15
+ r.resources :domains, :keys => [:domain] do |d|
16
+ d.resources :emails, :keys => [:username]
17
+ end
18
+ end
19
+
20
+ describe "nested resources routes" do
21
+
22
+ it "should match a get to /blogposts/1/comments to the comments controller and index action with blogpost_id" do
23
+ route_to('/blogposts/1/comments', :method => :get).should have_route(:controller => 'comments', :action => 'index', :id => nil, :blogpost_id => '1')
24
+ end
25
+
26
+ it "should match a get to /blogposts/1/comments/2/versions to the versions controller and index action with blogpost_id and comment_id" do
27
+ route_to('/blogposts/1/comments/2/versions', :method => :get).should have_route(:controller => 'versions', :action => 'index', :id => nil, :blogpost_id => '1', :comment_id => '2')
28
+ end
29
+
30
+ it "should match a get to /users/1/comments to the comments controller and index action with user_id" do
31
+ route_to('/users/1/comments', :method => :get).should have_route(:controller => 'comments', :action => 'index', :id => nil, :user_id => '1')
32
+ end
33
+
34
+ it "should match a get to /foo/comments to the comments controller and index action" do
35
+ route_to('/foo/comments', :method => :get).should have_route(:controller => 'comments', :action => 'index', :id => nil)
36
+ end
37
+
38
+ it "should match a get to /domains/merbivore_com/emails to the emails controller and index action with domain => 'merbivore_com" do
39
+ route_to('/domains/merbivore_com/emails', :method => :get).should have_route(:controller => 'emails', :action => 'index', :username => nil, :domain => 'merbivore_com')
40
+ end
41
+ end
@@ -0,0 +1,37 @@
1
+ require File.join(File.dirname(__FILE__), "spec_helper")
2
+
3
+ describe "resources routes" do
4
+ before :each do
5
+ Merb::Router.prepare do |r|
6
+ r.resource :foo
7
+ end
8
+ end
9
+
10
+ it "should match a get to /foo to the blogposts controller and show action" do
11
+ route_to('/foo', :method => :get).should have_route(:controller => 'foo', :action => 'show', :id => nil)
12
+ end
13
+
14
+ it "should match a post to /foo to the blogposts controller and create action" do
15
+ route_to('/foo', :method => :post).should have_route(:controller => 'foo', :action => 'create', :id => nil)
16
+ end
17
+
18
+ it "should match a put to /foo to the blogposts controller and update action" do
19
+ route_to('/foo', :method => :put).should have_route(:controller => 'foo', :action => 'update', :id => nil)
20
+ end
21
+
22
+ it "should match a delete to /foo to the blogposts controller and show action" do
23
+ route_to('/foo', :method => :delete).should have_route(:controller => 'foo', :action => 'destroy', :id => nil)
24
+ end
25
+
26
+ it "should match a get to /foo/new to the blogposts controller and new action" do
27
+ route_to('/foo/new', :method => :get).should have_route(:controller => 'foo', :action => 'new', :id => nil)
28
+ end
29
+
30
+ it "should match a get to /foo/edit to the blogposts controller and edit action" do
31
+ route_to('/foo/edit', :method => :get).should have_route(:controller => 'foo', :action => 'edit', :id => nil)
32
+ end
33
+
34
+ it "should match a get to /foo/delete to the blogposts controller and delete action" do
35
+ route_to('/foo/delete', :method => :get).should have_route(:controller => 'foo', :action => 'delete', :id => nil)
36
+ end
37
+ end
@@ -0,0 +1,82 @@
1
+ require File.join(File.dirname(__FILE__), "spec_helper")
2
+
3
+ describe "resources routes" do
4
+ before :each do
5
+ Merb::Router.prepare do |r|
6
+ r.resources :blogposts
7
+ end
8
+ end
9
+
10
+ it "should match a get to /blogposts to the blogposts controller and index action" do
11
+ route_to('/blogposts', :method => :get).should have_route(:controller => 'blogposts', :action => 'index', :id => nil)
12
+ end
13
+
14
+ it "should match a post to /blogposts to the blogposts controller and create action" do
15
+ route_to('/blogposts', :method => :post).should have_route(:controller => 'blogposts', :action => 'create', :id => nil)
16
+ end
17
+
18
+ it "should match a get to /blogposts/new to the blogposts controller and the new action" do
19
+ route_to('/blogposts/new', :method => :get).should have_route(:controller => 'blogposts', :action => 'new', :id => nil)
20
+ end
21
+
22
+ it "should match a get to /blogposts/1 ot the blogposts controller and the show action with id 1" do
23
+ route_to('/blogposts/1', :method => :get).should have_route(:controller => 'blogposts', :action => 'show', :id => "1")
24
+ end
25
+
26
+ it "should match a put to /blogposts/1 ot the blogposts controller and the update action with id 1" do
27
+ route_to('/blogposts/1', :method => :put).should have_route(:controller => 'blogposts', :action => 'update', :id => "1")
28
+ end
29
+
30
+ it "should match a delete to /blogposts/1 ot the blogposts controller and the destroy action with id 1" do
31
+ route_to('/blogposts/1', :method => :delete).should have_route(:controller => 'blogposts', :action => 'destroy', :id => "1")
32
+ end
33
+
34
+ it "should match a get to /blogposts/1/edit to the blogposts controller and the edit action with id 1" do
35
+ route_to('/blogposts/1/edit', :method => :get).should have_route(:controller => 'blogposts', :action => 'edit', :id => "1")
36
+ end
37
+
38
+ it "should not match a put to /blogposts/1/edit" do
39
+ # not sure which of these is the best way to specify what I mean - so they're both in...
40
+ route_to('/blogposts/1/edit', :method => :put).should have_nil_route
41
+ route_to('/blogposts/1/edit', :method => :put).should_not have_route(:controller => 'blogposts', :action => 'edit', :id => "1")
42
+ end
43
+
44
+ it "should match a get to /blogposts/1/delete to the blogposts controller and the delete action with id 1" do
45
+ route_to('/blogposts/1/delete', :method => :get).should have_route(:controller => 'blogposts', :action => 'delete', :id => "1")
46
+ end
47
+ end
48
+
49
+
50
+ describe "resources routes with named keys" do
51
+ before :each do
52
+ Merb::Router.prepare do |r|
53
+ r.resources :emails, :keys => ["username", "domain"]
54
+ end
55
+ end
56
+
57
+ it "should match a get to /emails/bidule/merbivore_com to the emails controller and the show action with username => 'bidule', domain => 'merbivore_com'" do
58
+ route_to('/emails/bidule/merbivore_com', :method => :get).should have_route(:controller => 'emails', :action => 'show', :username => "bidule", :domain => "merbivore_com")
59
+ end
60
+
61
+ it "should match a put to /emails/bidule/merbivore_com to the emails controller and the update action with username => 'bidule', domain => 'merbivore_com'" do
62
+ route_to('/emails/bidule/merbivore_com', :method => :put).should have_route(:controller => 'emails', :action => 'update', :username => "bidule", :domain => "merbivore_com")
63
+ end
64
+
65
+ it "should match a delete to /emails/bidule/merbivore_com to the emails controller and the destroy action with username => 'bidule', domain => 'merbivore_com'" do
66
+ route_to('/emails/bidule/merbivore_com', :method => :delete).should have_route(:controller => 'emails', :action => 'destroy', :username => "bidule", :domain => "merbivore_com")
67
+ end
68
+
69
+ it "should match a get to /emails/bidule/merbivore_com/edit to the emails controller and the destroy action with username => 'bidule', domain => 'merbivore_com'" do
70
+ route_to('/emails/bidule/merbivore_com/edit', :method => :get).should have_route(:controller => 'emails', :action => 'edit', :username => "bidule", :domain => "merbivore_com")
71
+ end
72
+
73
+ it "should not match a put to /emails/bidule/merbivore_com/edit" do
74
+ # not sure which of these is the best way to specify what I mean - so they're both in...
75
+ route_to('/emails/bidule/merbivore_com/edit', :method => :put).should have_nil_route
76
+ route_to('/emails/bidule/merbivore_com/edit', :method => :put).should_not have_route(:controller => 'emails', :action => 'edit', :username => "bidule", :domain => "merbivore_com")
77
+ end
78
+
79
+ it "should match a get to /emails/bidule/merbivore_com/delete to the emails controller and the delete action with username => 'bidule', domain => 'merbivore_com'" do
80
+ route_to('/emails/bidule/merbivore_com/delete', :method => :get).should have_route(:controller => 'emails', :action => 'delete', :username => "bidule", :domain => "merbivore_com")
81
+ end
82
+ end
@@ -0,0 +1,90 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
2
+ require 'ostruct'
3
+
4
+ require 'rack/mock'
5
+ require 'stringio'
6
+ Merb.start :environment => 'test',
7
+ :merb_root => File.dirname(__FILE__) / 'fixture'
8
+
9
+
10
+ class SimpleRequest < OpenStruct
11
+
12
+ def method
13
+ @table[:method]
14
+ end
15
+
16
+ def params
17
+ @table
18
+ end
19
+ end
20
+
21
+ def prepare_route(from, to)
22
+ Merb::Router.prepare {|r| r.match(from).to(to)}
23
+ end
24
+
25
+ def route_to(path, args = {}, protocol = "http://")
26
+ Merb::Router.match(SimpleRequest.new({:protocol => protocol, :path => path}.merge(args)))[1]
27
+ end
28
+
29
+ def match_for(path, args = {}, protocol = "http://")
30
+ Merb::Router.match(SimpleRequest.new({:protocol => protocol, :path => path}.merge(args)))
31
+ end
32
+
33
+ def matched_route_for(*args)
34
+ # get route index
35
+ idx = match_for(*args)[0]
36
+
37
+ Merb::Router.routes[idx]
38
+ end
39
+
40
+ def generate(*args)
41
+ Merb::Router.generate *args
42
+ end
43
+
44
+ module Merb
45
+
46
+ module Test
47
+
48
+ module RspecMatchers
49
+
50
+ class HaveRoute
51
+
52
+ def self.build(expected)
53
+ this = new
54
+ this.instance_variable_set("@expected", expected)
55
+ this
56
+ end
57
+
58
+ def matches?(target)
59
+ @target = target
60
+ @errors = []
61
+ @expected.all? { |param, value| @target[param] == value }
62
+ end
63
+
64
+ def failure_message
65
+ @target.each do |param, value|
66
+ @errors << "Expected :#{param} to be #{@expected[param].inspect}, but was #{value.inspect}" unless
67
+ @expected[param] == value
68
+ end
69
+ @errors << "Got #{@target.inspect}"
70
+ @errors.join("\n")
71
+ end
72
+
73
+ def negative_failure_message
74
+ "Expected #{@expected.inspect} not to be #{@target.inspect}, but it was."
75
+ end
76
+
77
+ def description() "have_route #{@target.inspect}" end
78
+ end
79
+
80
+ def have_route(expected)
81
+ HaveRoute.build(expected)
82
+ end
83
+
84
+ def have_nil_route
85
+ have_route({})
86
+ end
87
+
88
+ end
89
+ end
90
+ end