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,175 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Merb::Router, "initially" do
4
+ it "has empty routes array" do
5
+ Merb::Router.routes.should be_empty
6
+ end
7
+
8
+ it "has empty named routes" do
9
+ Merb::Router.named_routes.should be_empty
10
+ end
11
+
12
+ it "stores named routes in a Hash" do
13
+ Merb::Router.named_routes.should be_kind_of(Hash)
14
+ end
15
+
16
+ it "has no .match method" do
17
+ Merb::Router.should_not respond_to(:match)
18
+ end
19
+ end
20
+
21
+
22
+
23
+ describe Merb::Router, ".prepare" do
24
+ before :each do
25
+ Merb::Router.routes = []
26
+ end
27
+
28
+ it "adds prepared routes to existing" do
29
+ Merb::Router.prepare do |r|
30
+ r.match("/").to(:controller => "home")
31
+ end
32
+
33
+ Merb::Router.routes.should_not be_empty
34
+ end
35
+
36
+ it "(re-)compiles routes" do
37
+ Merb::Router.should_receive(:compile)
38
+
39
+ Merb::Router.prepare do |r|
40
+ r.match("/").to(:controller => "home")
41
+ end
42
+ end
43
+
44
+ it "defines match method" do
45
+ Merb::Router.prepare do |r|
46
+ r.match("/").to(:controller => "home")
47
+ end
48
+
49
+ Merb::Router.should respond_to(:match)
50
+ end
51
+ end
52
+
53
+
54
+
55
+ describe Merb::Router, ".append" do
56
+ before :each do
57
+ Merb::Router.prepare do |r|
58
+ r.match("/").to(:controller => "home")
59
+ end
60
+ end
61
+
62
+ it "appends routes to existing" do
63
+ Merb::Router.append do |r|
64
+ r.match("/append").to(:controller => "appended_by_router").name(:appended)
65
+ end
66
+
67
+ Merb::Router.named_routes[:appended].index.should == 0
68
+ end
69
+ end
70
+
71
+
72
+
73
+ describe Merb::Router, ".prepend" do
74
+ before :each do
75
+ Merb::Router.prepare do |r|
76
+ r.match("/").to(:controller => "home")
77
+ end
78
+ end
79
+
80
+ it "prepends routes to existing" do
81
+ Merb::Router.prepend do |r|
82
+ r.match("/prepend").to(:controller => "prepended_by_router").name(:prepended)
83
+ end
84
+
85
+ Merb::Router.named_routes[:appended].index.should == 0
86
+ end
87
+ end
88
+
89
+
90
+
91
+ describe Merb::Router, ".generate", "given a Symbol" do
92
+ before :each do
93
+ Merb::Router.prepare do |r|
94
+ r.match("/elements/").to(:controller => "elements").name(:elements)
95
+ end
96
+ end
97
+
98
+ it "searches among named routes" do
99
+ Merb::Router.generate(:elements).should == "/elements/"
100
+ end
101
+
102
+ it "raises RuntimeError when named route is not found" do
103
+ lambda { Merb::Router.generate(:mountains) }.should raise_error(RuntimeError, /Named route not found/)
104
+ end
105
+ end
106
+
107
+
108
+
109
+ describe Merb::Router, ".generate", "given a Hash" do
110
+ before :each do
111
+ Merb::Router.prepare do |r|
112
+ r.match("/elements/").to(:controller => "elements").name(:elements)
113
+ end
114
+ end
115
+
116
+ it "uses default routes mapping" do
117
+ Merb::Router.generate({ :controller => "elements", :action => "show", :id => "fire" }).should == "/elements/show/fire"
118
+ end
119
+
120
+ it "appends extra parameters to URL" do
121
+ Merb::Router.generate({ :controller => "elements", :action => "search" }, { :q => "water" }).should == "/elements/search?q=water"
122
+ end
123
+
124
+ it "uses fallback hash when controller is not available" do
125
+ Merb::Router.generate({ :action => "show", :id => "Olympus" }, {}, { :controller => "mountains" }).should == "/mountains/show/Olympus"
126
+ end
127
+
128
+ it "uses fallback hash when action is not available" do
129
+ Merb::Router.generate({ :controller => "mountains", :id => "Olympus" }, {}, { :action => "show" }).should == "/mountains/show/Olympus"
130
+ end
131
+
132
+ it "ignores nil parameters" do
133
+ Merb::Router.generate({ :controller => "mountains", :action => nil, :id => "Olympus" }, {}, { :action => "show" }).should == "/mountains/show/Olympus"
134
+ end
135
+
136
+ it "respects format parameter" do
137
+ Merb::Router.generate({ :controller => "elements", :action => "show", :id => "fire", :format => :json }).should == "/elements/show/fire.json"
138
+ end
139
+ end
140
+
141
+
142
+
143
+ describe Merb::Router, ".generate_for_default_route", "given a Hash" do
144
+ before :each do
145
+ Merb::Router.prepare do |r|
146
+ r.match("/elements/").to(:controller => "elements").name(:elements)
147
+ end
148
+ end
149
+
150
+ it "uses default routes mapping" do
151
+ Merb::Router.generate_for_default_route({ :controller => "elements", :action => "show", :id => "fire" }, {}).should == "/elements/show/fire"
152
+ end
153
+
154
+ it "respects format parameter" do
155
+ Merb::Router.generate({ :controller => "elements", :action => "show", :id => "fire", :format => :json }).should == "/elements/show/fire.json"
156
+ end
157
+
158
+ it "requires both parameters to be present" do
159
+ lambda {
160
+ Merb::Router.generate_for_default_route({ :controller => "elements", :action => "show", :id => "fire" })
161
+ }.should raise_error(ArgumentError)
162
+ end
163
+
164
+ it "uses fallback hash when controller is not available" do
165
+ Merb::Router.generate_for_default_route({ :action => "show", :id => "Olympus" }, { :controller => "mountains" }).should == "/mountains/show/Olympus"
166
+ end
167
+
168
+ it "uses fallback hash when action is not available" do
169
+ Merb::Router.generate_for_default_route({ :controller => "mountains", :id => "Olympus" }, { :action => "show" }).should == "/mountains/show/Olympus"
170
+ end
171
+
172
+ it "ignores nil parameters" do
173
+ Merb::Router.generate_for_default_route({ :controller => "mountains", :action => nil, :id => "Olympus" }, { :action => "show" }).should == "/mountains/show/Olympus"
174
+ end
175
+ end
@@ -0,0 +1,564 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+
3
+ describe Language::English::Inflect, "#singular" do
4
+ it "pluralizes equipment => equipment" do
5
+ "equipment".plural.should == "equipment"
6
+ end
7
+
8
+ it "pluralizes information => information" do
9
+ "information".plural.should == "information"
10
+ end
11
+
12
+ it "pluralizes money => money" do
13
+ "money".plural.should == "money"
14
+ end
15
+
16
+ it "pluralizes species => species" do
17
+ "species".plural.should == "species"
18
+ end
19
+
20
+ it "pluralizes series => series" do
21
+ "series".plural.should == "series"
22
+ end
23
+
24
+ it "pluralizes fish => fish" do
25
+ "fish".plural.should == "fish"
26
+ end
27
+
28
+ it "pluralizes sheep => sheep" do
29
+ "sheep".plural.should == "sheep"
30
+ end
31
+
32
+ it "pluralizes news => news" do
33
+ "news".plural.should == "news"
34
+ end
35
+
36
+ it "pluralizes rain => rain" do
37
+ "rain".plural.should == "rain"
38
+ end
39
+
40
+ it "pluralizes milk => milk" do
41
+ "milk".plural.should == "milk"
42
+ end
43
+
44
+ it "pluralizes moose => moose" do
45
+ "moose".plural.should == "moose"
46
+ end
47
+
48
+ it "pluralizes hovercraft => hovercraft" do
49
+ "hovercraft".plural.should == "hovercraft"
50
+ end
51
+
52
+ it "pluralizes cacti => cactus" do
53
+ "cactus".plural.should == "cacti"
54
+ end
55
+
56
+ it "pluralizes thesaurus => thesauri" do
57
+ "thesaurus".plural.should == "thesauri"
58
+ end
59
+
60
+ it "pluralizes matrix => matrices" do
61
+ "matrix".plural.should == "matrices"
62
+ end
63
+
64
+ it "pluralizes Swiss => Swiss" do
65
+ "Swiss".plural.should == "Swiss"
66
+ end
67
+
68
+ it "pluralizes life => lives" do
69
+ "life".plural.should == "lives"
70
+ end
71
+
72
+ it "pluralizes wife => wives" do
73
+ "wife".plural.should == "wives"
74
+ end
75
+
76
+ it "pluralizes goose => geese" do
77
+ "goose".plural.should == "geese"
78
+ end
79
+
80
+ it "pluralizes criterion => criteria" do
81
+ "criterion".plural.should == "criteria"
82
+ end
83
+
84
+ it "pluralizes alias => aliases" do
85
+ "alias".plural.should == "aliases"
86
+ end
87
+
88
+ it "pluralizes status => statuses" do
89
+ "status".plural.should == "statuses"
90
+ end
91
+
92
+ it "pluralizes axis => axes" do
93
+ "axis".plural.should == "axes"
94
+ end
95
+
96
+ it "pluralizes crisis => crises" do
97
+ "crisis".plural.should == "crises"
98
+ end
99
+
100
+ it "pluralizes testis => testes" do
101
+ "testis".plural.should == "testes"
102
+ end
103
+
104
+ it "pluralizes child => children" do
105
+ "child".plural.should == "children"
106
+ end
107
+
108
+ it "pluralizes person => people" do
109
+ "person".plural.should == "people"
110
+ end
111
+
112
+ it "pluralizes potato => potatoes" do
113
+ "potato".plural.should == "potatoes"
114
+ end
115
+
116
+ it "pluralizes tomato => tomatoes" do
117
+ "tomato".plural.should == "tomatoes"
118
+ end
119
+
120
+ it "pluralizes buffalo => buffaloes" do
121
+ "buffalo".plural.should == "buffaloes"
122
+ end
123
+
124
+ it "pluralizes torpedo => torpedoes" do
125
+ "torpedo".plural.should == "torpedoes"
126
+ end
127
+
128
+ it "pluralizes quiz => quizzes" do
129
+ "quiz".plural.should == "quizzes"
130
+ end
131
+
132
+ # used to be a bug exposed by this specs suite,
133
+ # this MUST pass or we've got regression
134
+ it "pluralizes vertex => vertices" do
135
+ "vertex".plural.should == "vertices"
136
+ end
137
+
138
+ it "pluralizes index => indices" do
139
+ "index".plural.should == "indices"
140
+ end
141
+
142
+ it "pluralizes ox => oxen" do
143
+ "ox".plural.should == "oxen"
144
+ end
145
+
146
+ it "pluralizes mouse => mice" do
147
+ "mouse".plural.should == "mice"
148
+ end
149
+
150
+ it "pluralizes louse => lice" do
151
+ "louse".plural.should == "lice"
152
+ end
153
+
154
+ it "pluralizes thesis => theses" do
155
+ "thesis".plural.should == "theses"
156
+ end
157
+
158
+ it "pluralizes thief => thieves" do
159
+ "thief".plural.should == "thieves"
160
+ end
161
+
162
+ it "pluralizes analysis => analyses" do
163
+ "analysis".plural.should == "analyses"
164
+ end
165
+
166
+ it "pluralizes octopus => octopi" do
167
+ "octopus".plural.should == "octopi"
168
+ end
169
+
170
+ it "pluralizes grass => grass" do
171
+ "grass".plural.should == "grass"
172
+ end
173
+
174
+ it "pluralizes phenomenon => phenomena" do
175
+ "phenomenon".plural.should == "phenomena"
176
+ end
177
+
178
+
179
+
180
+
181
+
182
+ # ==== bugs, typos and reported issues
183
+
184
+
185
+
186
+
187
+
188
+ # ==== rules and most common cases
189
+
190
+ it "pluralizes forum => forums" do
191
+ "forum".plural.should == "forums"
192
+ end
193
+
194
+ it "pluralizes hive => hives" do
195
+ "hive".plural.should == "hives"
196
+ end
197
+
198
+ it "pluralizes athlete => athletes" do
199
+ "athlete".plural.should == "athletes"
200
+ end
201
+
202
+ it "pluralizes dwarf => dwarves" do
203
+ "dwarf".plural.should == "dwarves"
204
+ end
205
+
206
+ it "pluralizes hero => heroes" do
207
+ "hero".plural.should == "heroes"
208
+ end
209
+
210
+ it "pluralizes zero => zeroes" do
211
+ "zero".plural.should == "zeroes"
212
+ end
213
+
214
+ it "pluralizes man => men" do
215
+ "man".plural.should == "men"
216
+ end
217
+
218
+ it "pluralizes woman => women" do
219
+ "woman".plural.should == "women"
220
+ end
221
+
222
+ it "pluralizes sportsman => sportsmen" do
223
+ "sportsman".plural.should == "sportsmen"
224
+ end
225
+
226
+ it "pluralizes branch => branches" do
227
+ "branch".plural.should == "branches"
228
+ end
229
+
230
+ it "pluralizes crunch => crunches" do
231
+ "crunch".plural.should == "crunches"
232
+ end
233
+
234
+ it "pluralizes trash => trashes" do
235
+ "trash".plural.should == "trashes"
236
+ end
237
+
238
+ it "pluralizes mash => mashes" do
239
+ "mash".plural.should == "mashes"
240
+ end
241
+
242
+ it "pluralizes cross => crosses" do
243
+ "cross".plural.should == "crosses"
244
+ end
245
+
246
+ it "pluralizes erratum => errata" do
247
+ "erratum".plural.should == "errata"
248
+ end
249
+
250
+ # FIXME: add -ia => -ium cases
251
+
252
+ # FIXME: add -ra => -rum cases
253
+
254
+ it "pluralizes ray => rays" do
255
+ "ray".plural.should == "rays"
256
+ end
257
+
258
+ it "pluralizes spray => sprays" do
259
+ "spray".plural.should == "sprays"
260
+ end
261
+
262
+ # Merriam-Webster dictionary says
263
+ # preys is correct, too.
264
+ it "pluralizes prey => preys" do
265
+ "prey".plural.should == "preys"
266
+ end
267
+
268
+ it "pluralizes toy => toys" do
269
+ "toy".plural.should == "toys"
270
+ end
271
+
272
+ it "pluralizes joy => joys" do
273
+ "joy".plural.should == "joys"
274
+ end
275
+
276
+ it "pluralizes buy => buys" do
277
+ "buy".plural.should == "buys"
278
+ end
279
+
280
+ it "pluralizes guy => guys" do
281
+ "guy".plural.should == "guys"
282
+ end
283
+
284
+ it "pluralizes cry => cries" do
285
+ "cry".plural.should == "cries"
286
+ end
287
+
288
+ it "pluralizes fly => flies" do
289
+ "fly".plural.should == "flies"
290
+ end
291
+
292
+ it "pluralizes fox => foxes" do
293
+ "fox".plural.should == "foxes"
294
+ end
295
+
296
+ it "pluralizes elf => elves" do
297
+ "elf".plural.should == "elves"
298
+ end
299
+
300
+ it "pluralizes shelf => shelves" do
301
+ "shelf".plural.should == "shelves"
302
+ end
303
+
304
+ it "pluralizes plus => plusses" do
305
+ "plus".plural.should == "plusses"
306
+ end
307
+
308
+ it "pluralizes cat => cats" do
309
+ "cat".plural.should == "cats"
310
+ end
311
+
312
+ it "pluralizes rat => rats" do
313
+ "rat".plural.should == "rats"
314
+ end
315
+
316
+ it "pluralizes rose => roses" do
317
+ "rose".plural.should == "roses"
318
+ end
319
+
320
+ it "pluralizes project => projects" do
321
+ "project".plural.should == "projects"
322
+ end
323
+
324
+ it "pluralizes post => posts" do
325
+ "post".plural.should == "posts"
326
+ end
327
+
328
+ it "pluralizes article => articles" do
329
+ "article".plural.should == "articles"
330
+ end
331
+
332
+ it "pluralizes location => locations" do
333
+ "location".plural.should == "locations"
334
+ end
335
+
336
+ it "pluralizes friend => friends" do
337
+ "friend".plural.should == "friends"
338
+ end
339
+
340
+ it "pluralizes link => links" do
341
+ "link".plural.should == "links"
342
+ end
343
+
344
+ it "pluralizes url => urls" do
345
+ "url".plural.should == "urls"
346
+ end
347
+
348
+ it "pluralizes account => accounts" do
349
+ "account".plural.should == "accounts"
350
+ end
351
+
352
+ it "pluralizes server => servers" do
353
+ "server".plural.should == "servers"
354
+ end
355
+
356
+ it "pluralizes fruit => fruits" do
357
+ "fruit".plural.should == "fruits"
358
+ end
359
+
360
+ it "pluralizes map => maps" do
361
+ "map".plural.should == "maps"
362
+ end
363
+
364
+ it "pluralizes income => incomes" do
365
+ "income".plural.should == "incomes"
366
+ end
367
+
368
+ it "pluralizes ping => pings" do
369
+ "ping".plural.should == "pings"
370
+ end
371
+
372
+ it "pluralizes event => events" do
373
+ "event".plural.should == "events"
374
+ end
375
+
376
+ it "pluralizes proof => proofs" do
377
+ "proof".plural.should == "proofs"
378
+ end
379
+
380
+ it "pluralizes typo => typos" do
381
+ "typo".plural.should == "typos"
382
+ end
383
+
384
+ it "pluralizes attachment => attachments" do
385
+ "attachment".plural.should == "attachments"
386
+ end
387
+
388
+ it "pluralizes download => downloads" do
389
+ "download".plural.should == "downloads"
390
+ end
391
+
392
+ it "pluralizes asset => assets" do
393
+ "asset".plural.should == "assets"
394
+ end
395
+
396
+ it "pluralizes job => jobs" do
397
+ "job".plural.should == "jobs"
398
+ end
399
+
400
+ it "pluralizes city => cities" do
401
+ "city".plural.should == "cities"
402
+ end
403
+
404
+ it "pluralizes package => packages" do
405
+ "package".plural.should == "packages"
406
+ end
407
+
408
+ it "pluralizes commit => commits" do
409
+ "commit".plural.should == "commits"
410
+ end
411
+
412
+ it "pluralizes version => versions" do
413
+ "version".plural.should == "versions"
414
+ end
415
+
416
+ it "pluralizes document => documents" do
417
+ "document".plural.should == "documents"
418
+ end
419
+
420
+ it "pluralizes edition => editions" do
421
+ "edition".plural.should == "editions"
422
+ end
423
+
424
+ it "pluralizes movie => movies" do
425
+ "movie".plural.should == "movies"
426
+ end
427
+
428
+ it "pluralizes song => songs" do
429
+ "song".plural.should == "songs"
430
+ end
431
+
432
+ it "pluralizes invoice => invoices" do
433
+ "invoice".plural.should == "invoices"
434
+ end
435
+
436
+ it "pluralizes product => products" do
437
+ "product".plural.should == "products"
438
+ end
439
+
440
+ it "pluralizes book => books" do
441
+ "book".plural.should == "books"
442
+ end
443
+
444
+ it "pluralizes ticket => tickets" do
445
+ "ticket".plural.should == "tickets"
446
+ end
447
+
448
+ it "pluralizes game => games" do
449
+ "game".plural.should == "games"
450
+ end
451
+
452
+ it "pluralizes tournament => tournaments" do
453
+ "tournament".plural.should == "tournaments"
454
+ end
455
+
456
+ it "pluralizes prize => prizes" do
457
+ "prize".plural.should == "prizes"
458
+ end
459
+
460
+ it "pluralizes price => prices" do
461
+ "price".plural.should == "prices"
462
+ end
463
+
464
+ it "pluralizes installation => installations" do
465
+ "installation".plural.should == "installations"
466
+ end
467
+
468
+ it "pluralizes date => dates" do
469
+ "date".plural.should == "dates"
470
+ end
471
+
472
+ it "pluralizes schedule => schedules" do
473
+ "schedule".plural.should == "schedules"
474
+ end
475
+
476
+ it "pluralizes arena => arenas" do
477
+ "arena".plural.should == "arenas"
478
+ end
479
+
480
+ it "pluralizes spam => spams" do
481
+ "spam".plural.should == "spams"
482
+ end
483
+
484
+ it "pluralizes bus => buses" do
485
+ "bus".plural.should == "buses"
486
+ end
487
+
488
+ it "pluralizes rice => rice" do
489
+ "rice".plural.should == "rice"
490
+ end
491
+
492
+ # Some specs from Rails
493
+ SingularToPlural = {
494
+ "search" => "searches",
495
+ "switch" => "switches",
496
+ "fix" => "fixes",
497
+ "box" => "boxes",
498
+ "process" => "processes",
499
+ "address" => "addresses",
500
+ "case" => "cases",
501
+ "stack" => "stacks",
502
+ "wish" => "wishes",
503
+
504
+ "category" => "categories",
505
+ "query" => "queries",
506
+ "ability" => "abilities",
507
+ "agency" => "agencies",
508
+
509
+ "archive" => "archives",
510
+
511
+ "safe" => "saves",
512
+ "half" => "halves",
513
+
514
+ "move" => "moves",
515
+
516
+ "salesperson" => "salespeople",
517
+
518
+ "spokesman" => "spokesmen",
519
+
520
+ "basis" => "bases",
521
+ "diagnosis" => "diagnoses",
522
+ "diagnosis_a" => "diagnosis_as",
523
+
524
+ "datum" => "data",
525
+ "medium" => "media",
526
+
527
+ "node_child" => "node_children",
528
+
529
+ "experience" => "experiences",
530
+ "day" => "days",
531
+
532
+ "comment" => "comments",
533
+ "foobar" => "foobars",
534
+ "newsletter" => "newsletters",
535
+
536
+ "old_news" => "old_news",
537
+
538
+ "perspective" => "perspectives",
539
+
540
+ "photo" => "photos",
541
+ "status_code" => "status_codes",
542
+
543
+ "house" => "houses",
544
+ "virus" => "viruses",
545
+ "portfolio" => "portfolios",
546
+
547
+ "matrix_fu" => "matrix_fus",
548
+
549
+ "axis" => "axes",
550
+
551
+ "shoe" => "shoes",
552
+
553
+ "horse" => "horses",
554
+ "edge" => "edges",
555
+
556
+ "cow" => "kine"
557
+ }
558
+
559
+ SingularToPlural.each do |single_word, plural_word|
560
+ it "pluralizes #{single_word} => #{plural_word}" do
561
+ single_word.plural.should == plural_word
562
+ end
563
+ end
564
+ end