actionpack 2.3.18 → 3.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of actionpack might be problematic. Click here for more details.

Files changed (513) hide show
  1. data/CHANGELOG +15 -64
  2. data/README +39 -48
  3. data/lib/abstract_controller.rb +22 -0
  4. data/lib/abstract_controller/base.rb +191 -0
  5. data/lib/abstract_controller/callbacks.rb +113 -0
  6. data/lib/abstract_controller/collector.rb +30 -0
  7. data/lib/abstract_controller/compatibility.rb +18 -0
  8. data/lib/abstract_controller/helpers.rb +163 -0
  9. data/lib/abstract_controller/layouts.rb +413 -0
  10. data/lib/abstract_controller/localized_cache.rb +49 -0
  11. data/lib/abstract_controller/logger.rb +13 -0
  12. data/lib/abstract_controller/rendering.rb +238 -0
  13. data/lib/{action_controller → abstract_controller}/translation.rb +1 -1
  14. data/lib/action_controller.rb +68 -102
  15. data/lib/action_controller/base.rb +77 -1409
  16. data/lib/action_controller/caching.rb +58 -45
  17. data/lib/action_controller/caching/actions.rb +100 -114
  18. data/lib/action_controller/caching/fragments.rb +17 -19
  19. data/lib/action_controller/caching/pages.rb +12 -6
  20. data/lib/action_controller/caching/sweeping.rb +42 -0
  21. data/lib/action_controller/deprecated.rb +5 -0
  22. data/lib/action_controller/deprecated/dispatcher.rb +28 -0
  23. data/lib/action_controller/deprecated/integration_test.rb +2 -0
  24. data/lib/action_controller/deprecated/performance_test.rb +1 -0
  25. data/lib/action_controller/metal.rb +125 -0
  26. data/lib/action_controller/metal/compatibility.rb +141 -0
  27. data/lib/action_controller/metal/conditional_get.rb +86 -0
  28. data/lib/action_controller/metal/configuration.rb +28 -0
  29. data/lib/action_controller/metal/cookies.rb +17 -0
  30. data/lib/action_controller/metal/exceptions.rb +46 -0
  31. data/lib/action_controller/metal/flash.rb +28 -0
  32. data/lib/action_controller/metal/head.rb +33 -0
  33. data/lib/action_controller/metal/helpers.rb +116 -0
  34. data/lib/action_controller/metal/hide_actions.rb +50 -0
  35. data/lib/action_controller/{http_authentication.rb → metal/http_authentication.rb} +18 -15
  36. data/lib/action_controller/metal/instrumentation.rb +99 -0
  37. data/lib/action_controller/metal/mime_responds.rb +300 -0
  38. data/lib/action_controller/metal/rack_delegation.rb +35 -0
  39. data/lib/action_controller/metal/redirecting.rb +90 -0
  40. data/lib/action_controller/metal/renderers.rb +95 -0
  41. data/lib/action_controller/metal/rendering.rb +69 -0
  42. data/lib/action_controller/metal/request_forgery_protection.rb +115 -0
  43. data/lib/action_controller/metal/rescue.rb +13 -0
  44. data/lib/action_controller/metal/responder.rb +220 -0
  45. data/lib/action_controller/{session_management.rb → metal/session_management.rb} +5 -14
  46. data/lib/action_controller/{streaming.rb → metal/streaming.rb} +13 -12
  47. data/lib/action_controller/metal/testing.rb +42 -0
  48. data/lib/action_controller/metal/url_for.rb +157 -0
  49. data/lib/action_controller/{verification.rb → metal/verification.rb} +41 -41
  50. data/lib/action_controller/middleware.rb +38 -0
  51. data/lib/action_controller/polymorphic_routes.rb +20 -26
  52. data/lib/action_controller/railtie.rb +30 -0
  53. data/lib/action_controller/railties/subscriber.rb +63 -0
  54. data/lib/action_controller/record_identifier.rb +3 -16
  55. data/lib/action_controller/test_case.rb +156 -18
  56. data/lib/action_controller/url_rewriter.rb +47 -200
  57. data/lib/action_controller/vendor/html-scanner.rb +16 -12
  58. data/lib/action_controller/vendor/html-scanner/html/node.rb +1 -1
  59. data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +12 -9
  60. data/lib/action_dispatch.rb +88 -0
  61. data/lib/action_dispatch/http/cache.rb +123 -0
  62. data/lib/action_dispatch/http/filter_parameters.rb +98 -0
  63. data/lib/{action_controller → action_dispatch/http}/headers.rb +8 -8
  64. data/lib/action_dispatch/http/mime_negotiation.rb +101 -0
  65. data/lib/{action_controller → action_dispatch/http}/mime_type.rb +30 -11
  66. data/lib/{action_controller → action_dispatch/http}/mime_types.rb +5 -3
  67. data/lib/action_dispatch/http/parameters.rb +49 -0
  68. data/lib/action_dispatch/http/request.rb +223 -0
  69. data/lib/action_dispatch/http/response.rb +209 -0
  70. data/lib/action_dispatch/http/upload.rb +48 -0
  71. data/lib/action_dispatch/http/url.rb +129 -0
  72. data/lib/action_dispatch/middleware/callbacks.rb +50 -0
  73. data/lib/action_dispatch/middleware/cascade.rb +29 -0
  74. data/lib/action_dispatch/middleware/cookies.rb +216 -0
  75. data/lib/{action_controller → action_dispatch/middleware}/flash.rb +51 -90
  76. data/lib/action_dispatch/middleware/head.rb +18 -0
  77. data/lib/action_dispatch/middleware/params_parser.rb +78 -0
  78. data/lib/action_dispatch/middleware/rescue.rb +26 -0
  79. data/lib/action_dispatch/middleware/session/abstract_store.rb +209 -0
  80. data/lib/{action_controller → action_dispatch/middleware}/session/cookie_store.rb +56 -60
  81. data/lib/action_dispatch/middleware/session/mem_cache_store.rb +47 -0
  82. data/lib/action_dispatch/middleware/show_exceptions.rb +173 -0
  83. data/lib/{action_controller/middleware_stack.rb → action_dispatch/middleware/stack.rb} +23 -13
  84. data/lib/action_dispatch/middleware/static.rb +44 -0
  85. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/_request_and_response.erb +10 -3
  86. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/_trace.erb +4 -4
  87. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb +10 -0
  88. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/layout.erb +2 -2
  89. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/missing_template.erb +0 -0
  90. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/routing_error.erb +0 -0
  91. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/template_error.erb +3 -3
  92. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/unknown_action.erb +0 -0
  93. data/lib/action_dispatch/railtie.rb +15 -0
  94. data/lib/action_dispatch/routing.rb +217 -0
  95. data/lib/action_dispatch/routing/deprecated_mapper.rb +877 -0
  96. data/lib/action_dispatch/routing/mapper.rb +649 -0
  97. data/lib/action_dispatch/routing/route.rb +55 -0
  98. data/lib/action_dispatch/routing/route_set.rb +445 -0
  99. data/lib/action_dispatch/testing/assertions.rb +21 -0
  100. data/lib/action_dispatch/testing/assertions/dom.rb +37 -0
  101. data/lib/{action_controller/assertions/model_assertions.rb → action_dispatch/testing/assertions/model.rb} +2 -4
  102. data/lib/action_dispatch/testing/assertions/response.rb +154 -0
  103. data/lib/{action_controller/assertions/routing_assertions.rb → action_dispatch/testing/assertions/routing.rb} +72 -34
  104. data/lib/{action_controller/assertions/selector_assertions.rb → action_dispatch/testing/assertions/selector.rb} +14 -11
  105. data/lib/{action_controller/assertions/tag_assertions.rb → action_dispatch/testing/assertions/tag.rb} +25 -14
  106. data/lib/{action_controller → action_dispatch/testing}/integration.rb +173 -406
  107. data/lib/action_dispatch/testing/performance_test.rb +17 -0
  108. data/lib/action_dispatch/testing/test_process.rb +42 -0
  109. data/lib/action_dispatch/testing/test_request.rb +83 -0
  110. data/lib/action_dispatch/testing/test_response.rb +136 -0
  111. data/lib/action_pack/version.rb +3 -3
  112. data/lib/action_view.rb +29 -26
  113. data/lib/action_view/base.rb +101 -148
  114. data/lib/action_view/context.rb +44 -0
  115. data/lib/action_view/helpers.rb +6 -4
  116. data/lib/action_view/helpers/{active_record_helper.rb → active_model_helper.rb} +63 -63
  117. data/lib/action_view/helpers/asset_tag_helper.rb +166 -31
  118. data/lib/action_view/helpers/cache_helper.rb +1 -1
  119. data/lib/action_view/helpers/capture_helper.rb +40 -8
  120. data/lib/action_view/helpers/csrf_helper.rb +2 -4
  121. data/lib/action_view/helpers/date_helper.rb +14 -15
  122. data/lib/action_view/helpers/form_helper.rb +121 -24
  123. data/lib/action_view/helpers/form_options_helper.rb +26 -25
  124. data/lib/action_view/helpers/form_tag_helper.rb +42 -33
  125. data/lib/action_view/helpers/javascript_helper.rb +1 -109
  126. data/lib/action_view/helpers/number_helper.rb +4 -1
  127. data/lib/action_view/helpers/prototype_helper.rb +75 -499
  128. data/lib/action_view/helpers/raw_output_helper.rb +1 -1
  129. data/lib/action_view/helpers/record_tag_helper.rb +3 -3
  130. data/lib/action_view/helpers/sanitize_helper.rb +3 -2
  131. data/lib/action_view/helpers/scriptaculous_helper.rb +89 -53
  132. data/lib/action_view/helpers/tag_helper.rb +12 -13
  133. data/lib/action_view/helpers/text_helper.rb +33 -38
  134. data/lib/action_view/helpers/translation_helper.rb +11 -35
  135. data/lib/action_view/helpers/url_helper.rb +140 -134
  136. data/lib/action_view/locale/en.yml +34 -28
  137. data/lib/action_view/paths.rb +27 -24
  138. data/lib/action_view/railtie.rb +17 -0
  139. data/lib/action_view/railties/subscriber.rb +24 -0
  140. data/lib/action_view/{partials.rb → render/partials.rb} +161 -51
  141. data/lib/action_view/render/rendering.rb +117 -0
  142. data/lib/action_view/template.rb +88 -217
  143. data/lib/action_view/template/error.rb +105 -0
  144. data/lib/action_view/template/handler.rb +41 -0
  145. data/lib/action_view/template/handlers.rb +54 -0
  146. data/lib/action_view/{template_handlers → template/handlers}/builder.rb +6 -6
  147. data/lib/action_view/template/handlers/erb.rb +58 -0
  148. data/lib/action_view/{template_handlers → template/handlers}/rjs.rb +8 -3
  149. data/lib/action_view/template/resolver.rb +164 -0
  150. data/lib/action_view/template/text.rb +40 -0
  151. data/lib/action_view/test_case.rb +18 -18
  152. metadata +165 -420
  153. data/RUNNING_UNIT_TESTS +0 -24
  154. data/Rakefile +0 -158
  155. data/install.rb +0 -30
  156. data/lib/action_controller/assertions/dom_assertions.rb +0 -55
  157. data/lib/action_controller/assertions/response_assertions.rb +0 -169
  158. data/lib/action_controller/benchmarking.rb +0 -107
  159. data/lib/action_controller/caching/sweeper.rb +0 -45
  160. data/lib/action_controller/cgi_ext.rb +0 -15
  161. data/lib/action_controller/cgi_ext/cookie.rb +0 -112
  162. data/lib/action_controller/cgi_ext/query_extension.rb +0 -22
  163. data/lib/action_controller/cgi_ext/stdinput.rb +0 -24
  164. data/lib/action_controller/cgi_process.rb +0 -77
  165. data/lib/action_controller/cookies.rb +0 -197
  166. data/lib/action_controller/dispatcher.rb +0 -133
  167. data/lib/action_controller/failsafe.rb +0 -87
  168. data/lib/action_controller/filters.rb +0 -680
  169. data/lib/action_controller/helpers.rb +0 -225
  170. data/lib/action_controller/layout.rb +0 -286
  171. data/lib/action_controller/middlewares.rb +0 -14
  172. data/lib/action_controller/mime_responds.rb +0 -193
  173. data/lib/action_controller/params_parser.rb +0 -77
  174. data/lib/action_controller/performance_test.rb +0 -15
  175. data/lib/action_controller/rack_lint_patch.rb +0 -36
  176. data/lib/action_controller/reloader.rb +0 -54
  177. data/lib/action_controller/request.rb +0 -518
  178. data/lib/action_controller/request_forgery_protection.rb +0 -116
  179. data/lib/action_controller/rescue.rb +0 -183
  180. data/lib/action_controller/resources.rb +0 -682
  181. data/lib/action_controller/response.rb +0 -237
  182. data/lib/action_controller/routing.rb +0 -388
  183. data/lib/action_controller/routing/builder.rb +0 -197
  184. data/lib/action_controller/routing/optimisations.rb +0 -130
  185. data/lib/action_controller/routing/recognition_optimisation.rb +0 -167
  186. data/lib/action_controller/routing/route.rb +0 -265
  187. data/lib/action_controller/routing/route_set.rb +0 -503
  188. data/lib/action_controller/routing/routing_ext.rb +0 -49
  189. data/lib/action_controller/routing/segments.rb +0 -343
  190. data/lib/action_controller/session/abstract_store.rb +0 -276
  191. data/lib/action_controller/session/mem_cache_store.rb +0 -60
  192. data/lib/action_controller/status_codes.rb +0 -88
  193. data/lib/action_controller/string_coercion.rb +0 -29
  194. data/lib/action_controller/templates/rescues/diagnostics.erb +0 -11
  195. data/lib/action_controller/test_process.rb +0 -580
  196. data/lib/action_controller/uploaded_file.rb +0 -44
  197. data/lib/action_view/helpers/benchmark_helper.rb +0 -54
  198. data/lib/action_view/inline_template.rb +0 -19
  199. data/lib/action_view/reloadable_template.rb +0 -117
  200. data/lib/action_view/renderable.rb +0 -109
  201. data/lib/action_view/renderable_partial.rb +0 -53
  202. data/lib/action_view/template_error.rb +0 -99
  203. data/lib/action_view/template_handler.rb +0 -34
  204. data/lib/action_view/template_handlers.rb +0 -48
  205. data/lib/action_view/template_handlers/erb.rb +0 -25
  206. data/lib/actionpack.rb +0 -2
  207. data/test/abstract_unit.rb +0 -78
  208. data/test/active_record_unit.rb +0 -104
  209. data/test/activerecord/active_record_store_test.rb +0 -221
  210. data/test/activerecord/render_partial_with_record_identification_test.rb +0 -188
  211. data/test/adv_attr_test.rb +0 -20
  212. data/test/controller/action_pack_assertions_test.rb +0 -545
  213. data/test/controller/addresses_render_test.rb +0 -37
  214. data/test/controller/assert_select_test.rb +0 -735
  215. data/test/controller/base_test.rb +0 -217
  216. data/test/controller/benchmark_test.rb +0 -32
  217. data/test/controller/caching_test.rb +0 -743
  218. data/test/controller/capture_test.rb +0 -66
  219. data/test/controller/content_type_test.rb +0 -178
  220. data/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
  221. data/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
  222. data/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
  223. data/test/controller/cookie_test.rb +0 -208
  224. data/test/controller/deprecation/deprecated_base_methods_test.rb +0 -32
  225. data/test/controller/dispatcher_test.rb +0 -144
  226. data/test/controller/dom_assertions_test.rb +0 -53
  227. data/test/controller/failsafe_test.rb +0 -60
  228. data/test/controller/fake_controllers.rb +0 -33
  229. data/test/controller/fake_models.rb +0 -19
  230. data/test/controller/filter_params_test.rb +0 -52
  231. data/test/controller/filters_test.rb +0 -885
  232. data/test/controller/flash_test.rb +0 -174
  233. data/test/controller/header_test.rb +0 -14
  234. data/test/controller/helper_test.rb +0 -224
  235. data/test/controller/html-scanner/cdata_node_test.rb +0 -15
  236. data/test/controller/html-scanner/document_test.rb +0 -148
  237. data/test/controller/html-scanner/node_test.rb +0 -89
  238. data/test/controller/html-scanner/sanitizer_test.rb +0 -300
  239. data/test/controller/html-scanner/tag_node_test.rb +0 -238
  240. data/test/controller/html-scanner/text_node_test.rb +0 -50
  241. data/test/controller/html-scanner/tokenizer_test.rb +0 -131
  242. data/test/controller/http_basic_authentication_test.rb +0 -113
  243. data/test/controller/http_digest_authentication_test.rb +0 -254
  244. data/test/controller/integration_test.rb +0 -526
  245. data/test/controller/layout_test.rb +0 -215
  246. data/test/controller/localized_templates_test.rb +0 -24
  247. data/test/controller/logging_test.rb +0 -46
  248. data/test/controller/middleware_stack_test.rb +0 -90
  249. data/test/controller/mime_responds_test.rb +0 -536
  250. data/test/controller/mime_type_test.rb +0 -93
  251. data/test/controller/output_escaping_test.rb +0 -19
  252. data/test/controller/polymorphic_routes_test.rb +0 -297
  253. data/test/controller/rack_test.rb +0 -308
  254. data/test/controller/record_identifier_test.rb +0 -139
  255. data/test/controller/redirect_test.rb +0 -285
  256. data/test/controller/reloader_test.rb +0 -125
  257. data/test/controller/render_test.rb +0 -1783
  258. data/test/controller/request/json_params_parsing_test.rb +0 -65
  259. data/test/controller/request/multipart_params_parsing_test.rb +0 -177
  260. data/test/controller/request/query_string_parsing_test.rb +0 -129
  261. data/test/controller/request/test_request_test.rb +0 -35
  262. data/test/controller/request/url_encoded_params_parsing_test.rb +0 -146
  263. data/test/controller/request/xml_params_parsing_test.rb +0 -103
  264. data/test/controller/request_forgery_protection_test.rb +0 -233
  265. data/test/controller/request_test.rb +0 -398
  266. data/test/controller/rescue_test.rb +0 -541
  267. data/test/controller/resources_test.rb +0 -1393
  268. data/test/controller/routing_test.rb +0 -2592
  269. data/test/controller/selector_test.rb +0 -628
  270. data/test/controller/send_file_test.rb +0 -171
  271. data/test/controller/session/abstract_store_test.rb +0 -64
  272. data/test/controller/session/cookie_store_test.rb +0 -354
  273. data/test/controller/session/mem_cache_store_test.rb +0 -187
  274. data/test/controller/session/test_session_test.rb +0 -58
  275. data/test/controller/test_test.rb +0 -700
  276. data/test/controller/translation_test.rb +0 -26
  277. data/test/controller/url_rewriter_test.rb +0 -395
  278. data/test/controller/verification_test.rb +0 -270
  279. data/test/controller/view_paths_test.rb +0 -141
  280. data/test/controller/webservice_test.rb +0 -273
  281. data/test/fixtures/_top_level_partial.html.erb +0 -1
  282. data/test/fixtures/_top_level_partial_only.erb +0 -1
  283. data/test/fixtures/addresses/list.erb +0 -1
  284. data/test/fixtures/alternate_helpers/foo_helper.rb +0 -3
  285. data/test/fixtures/bad_customers/_bad_customer.html.erb +0 -1
  286. data/test/fixtures/companies.yml +0 -24
  287. data/test/fixtures/company.rb +0 -10
  288. data/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +0 -1
  289. data/test/fixtures/content_type/render_default_for_rhtml.rhtml +0 -1
  290. data/test/fixtures/content_type/render_default_for_rjs.rjs +0 -1
  291. data/test/fixtures/content_type/render_default_for_rxml.rxml +0 -1
  292. data/test/fixtures/customers/_customer.html.erb +0 -1
  293. data/test/fixtures/db_definitions/sqlite.sql +0 -49
  294. data/test/fixtures/developer.rb +0 -9
  295. data/test/fixtures/developers.yml +0 -21
  296. data/test/fixtures/developers/_developer.erb +0 -1
  297. data/test/fixtures/developers_projects.yml +0 -13
  298. data/test/fixtures/failsafe/500.html +0 -1
  299. data/test/fixtures/fun/games/_game.erb +0 -1
  300. data/test/fixtures/fun/games/hello_world.erb +0 -1
  301. data/test/fixtures/fun/serious/games/_game.erb +0 -1
  302. data/test/fixtures/functional_caching/_partial.erb +0 -3
  303. data/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +0 -3
  304. data/test/fixtures/functional_caching/formatted_fragment_cached.js.rjs +0 -6
  305. data/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +0 -5
  306. data/test/fixtures/functional_caching/fragment_cached.html.erb +0 -2
  307. data/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +0 -1
  308. data/test/fixtures/functional_caching/inline_fragment_cached.html.erb +0 -2
  309. data/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +0 -1
  310. data/test/fixtures/good_customers/_good_customer.html.erb +0 -1
  311. data/test/fixtures/helpers/abc_helper.rb +0 -5
  312. data/test/fixtures/helpers/fun/games_helper.rb +0 -3
  313. data/test/fixtures/helpers/fun/pdf_helper.rb +0 -3
  314. data/test/fixtures/layout_tests/abs_path_layout.rhtml +0 -1
  315. data/test/fixtures/layout_tests/alt/hello.rhtml +0 -1
  316. data/test/fixtures/layout_tests/alt/layouts/alt.rhtml +0 -0
  317. data/test/fixtures/layout_tests/layouts/controller_name_space/nested.rhtml +0 -1
  318. data/test/fixtures/layout_tests/layouts/item.rhtml +0 -1
  319. data/test/fixtures/layout_tests/layouts/layout_test.rhtml +0 -1
  320. data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +0 -1
  321. data/test/fixtures/layout_tests/layouts/third_party_template_library.mab +0 -1
  322. data/test/fixtures/layout_tests/views/hello.rhtml +0 -1
  323. data/test/fixtures/layouts/_column.html.erb +0 -2
  324. data/test/fixtures/layouts/block_with_layout.erb +0 -3
  325. data/test/fixtures/layouts/builder.builder +0 -3
  326. data/test/fixtures/layouts/default_html.html.erb +0 -1
  327. data/test/fixtures/layouts/partial_with_layout.erb +0 -3
  328. data/test/fixtures/layouts/standard.erb +0 -1
  329. data/test/fixtures/layouts/talk_from_action.erb +0 -2
  330. data/test/fixtures/layouts/xhr.html.erb +0 -2
  331. data/test/fixtures/layouts/yield.erb +0 -2
  332. data/test/fixtures/localized/hello_world.de.html +0 -1
  333. data/test/fixtures/localized/hello_world.en.html +0 -1
  334. data/test/fixtures/mascot.rb +0 -3
  335. data/test/fixtures/mascots.yml +0 -4
  336. data/test/fixtures/mascots/_mascot.html.erb +0 -1
  337. data/test/fixtures/multipart/binary_file +0 -0
  338. data/test/fixtures/multipart/boundary_problem_file +0 -10
  339. data/test/fixtures/multipart/bracketed_param +0 -5
  340. data/test/fixtures/multipart/empty +0 -10
  341. data/test/fixtures/multipart/hello.txt +0 -1
  342. data/test/fixtures/multipart/large_text_file +0 -10
  343. data/test/fixtures/multipart/mixed_files +0 -0
  344. data/test/fixtures/multipart/mona_lisa.jpg +0 -0
  345. data/test/fixtures/multipart/none +0 -9
  346. data/test/fixtures/multipart/single_parameter +0 -5
  347. data/test/fixtures/multipart/text_file +0 -10
  348. data/test/fixtures/override/test/hello_world.erb +0 -1
  349. data/test/fixtures/override2/layouts/test/sub.erb +0 -1
  350. data/test/fixtures/post_test/layouts/post.html.erb +0 -1
  351. data/test/fixtures/post_test/layouts/super_post.iphone.erb +0 -1
  352. data/test/fixtures/post_test/post/index.html.erb +0 -1
  353. data/test/fixtures/post_test/post/index.iphone.erb +0 -1
  354. data/test/fixtures/post_test/super_post/index.html.erb +0 -1
  355. data/test/fixtures/post_test/super_post/index.iphone.erb +0 -1
  356. data/test/fixtures/project.rb +0 -3
  357. data/test/fixtures/projects.yml +0 -7
  358. data/test/fixtures/projects/_project.erb +0 -1
  359. data/test/fixtures/public/404.html +0 -1
  360. data/test/fixtures/public/500.da.html +0 -1
  361. data/test/fixtures/public/500.html +0 -1
  362. data/test/fixtures/public/absolute/test.css +0 -23
  363. data/test/fixtures/public/absolute/test.js +0 -63
  364. data/test/fixtures/public/images/rails.png +0 -0
  365. data/test/fixtures/public/javascripts/application.js +0 -1
  366. data/test/fixtures/public/javascripts/bank.js +0 -1
  367. data/test/fixtures/public/javascripts/controls.js +0 -1
  368. data/test/fixtures/public/javascripts/dragdrop.js +0 -1
  369. data/test/fixtures/public/javascripts/effects.js +0 -1
  370. data/test/fixtures/public/javascripts/prototype.js +0 -1
  371. data/test/fixtures/public/javascripts/robber.js +0 -1
  372. data/test/fixtures/public/javascripts/subdir/subdir.js +0 -1
  373. data/test/fixtures/public/javascripts/version.1.0.js +0 -1
  374. data/test/fixtures/public/stylesheets/bank.css +0 -1
  375. data/test/fixtures/public/stylesheets/robber.css +0 -1
  376. data/test/fixtures/public/stylesheets/subdir/subdir.css +0 -1
  377. data/test/fixtures/public/stylesheets/version.1.0.css +0 -1
  378. data/test/fixtures/quiz/questions/_question.html.erb +0 -1
  379. data/test/fixtures/replies.yml +0 -15
  380. data/test/fixtures/replies/_reply.erb +0 -1
  381. data/test/fixtures/reply.rb +0 -7
  382. data/test/fixtures/respond_to/all_types_with_layout.html.erb +0 -1
  383. data/test/fixtures/respond_to/all_types_with_layout.js.rjs +0 -1
  384. data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +0 -1
  385. data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +0 -1
  386. data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +0 -1
  387. data/test/fixtures/respond_to/layouts/missing.html.erb +0 -1
  388. data/test/fixtures/respond_to/layouts/standard.html.erb +0 -1
  389. data/test/fixtures/respond_to/layouts/standard.iphone.erb +0 -1
  390. data/test/fixtures/respond_to/using_defaults.html.erb +0 -1
  391. data/test/fixtures/respond_to/using_defaults.js.rjs +0 -1
  392. data/test/fixtures/respond_to/using_defaults.xml.builder +0 -1
  393. data/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +0 -1
  394. data/test/fixtures/respond_to/using_defaults_with_type_list.js.rjs +0 -1
  395. data/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +0 -1
  396. data/test/fixtures/scope/test/modgreet.erb +0 -1
  397. data/test/fixtures/session_autoload_test/session_autoload_test/foo.rb +0 -10
  398. data/test/fixtures/shared.html.erb +0 -1
  399. data/test/fixtures/symlink_parent/symlinked_layout.erb +0 -5
  400. data/test/fixtures/test/_counter.html.erb +0 -1
  401. data/test/fixtures/test/_customer.erb +0 -1
  402. data/test/fixtures/test/_customer_counter.erb +0 -1
  403. data/test/fixtures/test/_customer_counter_with_as.erb +0 -1
  404. data/test/fixtures/test/_customer_greeting.erb +0 -1
  405. data/test/fixtures/test/_customer_with_var.erb +0 -1
  406. data/test/fixtures/test/_form.erb +0 -1
  407. data/test/fixtures/test/_from_helper.erb +0 -1
  408. data/test/fixtures/test/_hash_greeting.erb +0 -1
  409. data/test/fixtures/test/_hash_object.erb +0 -2
  410. data/test/fixtures/test/_hello.builder +0 -1
  411. data/test/fixtures/test/_labelling_form.erb +0 -1
  412. data/test/fixtures/test/_layout_for_block_with_args.html.erb +0 -3
  413. data/test/fixtures/test/_layout_for_partial.html.erb +0 -3
  414. data/test/fixtures/test/_local_inspector.html.erb +0 -1
  415. data/test/fixtures/test/_one.html.erb +0 -1
  416. data/test/fixtures/test/_partial.erb +0 -1
  417. data/test/fixtures/test/_partial.html.erb +0 -1
  418. data/test/fixtures/test/_partial.js.erb +0 -1
  419. data/test/fixtures/test/_partial_for_use_in_layout.html.erb +0 -1
  420. data/test/fixtures/test/_partial_only.erb +0 -1
  421. data/test/fixtures/test/_partial_with_only_html_version.html.erb +0 -1
  422. data/test/fixtures/test/_person.erb +0 -2
  423. data/test/fixtures/test/_raise.html.erb +0 -1
  424. data/test/fixtures/test/_two.html.erb +0 -1
  425. data/test/fixtures/test/_utf8_partial.html.erb +0 -1
  426. data/test/fixtures/test/_utf8_partial_magic.html.erb +0 -2
  427. data/test/fixtures/test/action_talk_to_layout.erb +0 -2
  428. data/test/fixtures/test/array_translation.erb +0 -1
  429. data/test/fixtures/test/calling_partial_with_layout.html.erb +0 -1
  430. data/test/fixtures/test/capturing.erb +0 -4
  431. data/test/fixtures/test/content_for.erb +0 -2
  432. data/test/fixtures/test/content_for_concatenated.erb +0 -3
  433. data/test/fixtures/test/content_for_with_parameter.erb +0 -2
  434. data/test/fixtures/test/delete_with_js.rjs +0 -2
  435. data/test/fixtures/test/dont_pick_me +0 -1
  436. data/test/fixtures/test/dot.directory/render_file_with_ivar.erb +0 -1
  437. data/test/fixtures/test/enum_rjs_test.rjs +0 -6
  438. data/test/fixtures/test/formatted_html_erb.html.erb +0 -1
  439. data/test/fixtures/test/formatted_xml_erb.builder +0 -1
  440. data/test/fixtures/test/formatted_xml_erb.html.erb +0 -1
  441. data/test/fixtures/test/formatted_xml_erb.xml.erb +0 -1
  442. data/test/fixtures/test/greeting.erb +0 -1
  443. data/test/fixtures/test/greeting.js.rjs +0 -1
  444. data/test/fixtures/test/hello.builder +0 -4
  445. data/test/fixtures/test/hello_world.da.html.erb +0 -1
  446. data/test/fixtures/test/hello_world.erb +0 -1
  447. data/test/fixtures/test/hello_world.erb~ +0 -1
  448. data/test/fixtures/test/hello_world.pt-BR.html.erb +0 -1
  449. data/test/fixtures/test/hello_world_container.builder +0 -3
  450. data/test/fixtures/test/hello_world_from_rxml.builder +0 -4
  451. data/test/fixtures/test/hello_world_with_layout_false.erb +0 -1
  452. data/test/fixtures/test/hello_xml_world.builder +0 -11
  453. data/test/fixtures/test/hyphen-ated.erb +0 -1
  454. data/test/fixtures/test/implicit_content_type.atom.builder +0 -2
  455. data/test/fixtures/test/list.erb +0 -1
  456. data/test/fixtures/test/malformed/malformed.en.html.erb~ +0 -1
  457. data/test/fixtures/test/malformed/malformed.erb~ +0 -1
  458. data/test/fixtures/test/malformed/malformed.html.erb~ +0 -1
  459. data/test/fixtures/test/nested_layout.erb +0 -3
  460. data/test/fixtures/test/non_erb_block_content_for.builder +0 -4
  461. data/test/fixtures/test/potential_conflicts.erb +0 -4
  462. data/test/fixtures/test/render_explicit_html_template.js.rjs +0 -1
  463. data/test/fixtures/test/render_file_from_template.html.erb +0 -1
  464. data/test/fixtures/test/render_file_with_ivar.erb +0 -1
  465. data/test/fixtures/test/render_file_with_locals.erb +0 -1
  466. data/test/fixtures/test/render_implicit_html_template.js.rjs +0 -1
  467. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.da.html.erb +0 -1
  468. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.html.erb +0 -1
  469. data/test/fixtures/test/render_implicit_js_template_without_layout.js.erb +0 -1
  470. data/test/fixtures/test/render_to_string_test.erb +0 -1
  471. data/test/fixtures/test/scoped_array_translation.erb +0 -1
  472. data/test/fixtures/test/sub_template_raise.html.erb +0 -1
  473. data/test/fixtures/test/template.erb +0 -1
  474. data/test/fixtures/test/translation.erb +0 -1
  475. data/test/fixtures/test/update_element_with_capture.erb +0 -9
  476. data/test/fixtures/test/using_layout_around_block.html.erb +0 -1
  477. data/test/fixtures/test/using_layout_around_block_with_args.html.erb +0 -1
  478. data/test/fixtures/test/utf8.html.erb +0 -4
  479. data/test/fixtures/test/utf8_magic.html.erb +0 -5
  480. data/test/fixtures/test/utf8_magic_with_bare_partial.html.erb +0 -5
  481. data/test/fixtures/topic.rb +0 -3
  482. data/test/fixtures/topics.yml +0 -22
  483. data/test/fixtures/topics/_topic.html.erb +0 -1
  484. data/test/template/active_record_helper_i18n_test.rb +0 -51
  485. data/test/template/active_record_helper_test.rb +0 -302
  486. data/test/template/asset_tag_helper_test.rb +0 -770
  487. data/test/template/atom_feed_helper_test.rb +0 -315
  488. data/test/template/benchmark_helper_test.rb +0 -86
  489. data/test/template/compiled_templates_test.rb +0 -204
  490. data/test/template/date_helper_i18n_test.rb +0 -121
  491. data/test/template/date_helper_test.rb +0 -2603
  492. data/test/template/erb_util_test.rb +0 -36
  493. data/test/template/form_helper_test.rb +0 -1447
  494. data/test/template/form_options_helper_i18n_test.rb +0 -27
  495. data/test/template/form_options_helper_test.rb +0 -811
  496. data/test/template/form_tag_helper_test.rb +0 -356
  497. data/test/template/javascript_helper_test.rb +0 -106
  498. data/test/template/number_helper_i18n_test.rb +0 -69
  499. data/test/template/number_helper_test.rb +0 -132
  500. data/test/template/prototype_helper_test.rb +0 -639
  501. data/test/template/raw_output_helper_test.rb +0 -21
  502. data/test/template/record_tag_helper_test.rb +0 -58
  503. data/test/template/render_test.rb +0 -329
  504. data/test/template/sanitize_helper_test.rb +0 -57
  505. data/test/template/scriptaculous_helper_test.rb +0 -90
  506. data/test/template/tag_helper_test.rb +0 -98
  507. data/test/template/template_test.rb +0 -32
  508. data/test/template/test_test.rb +0 -54
  509. data/test/template/text_helper_test.rb +0 -601
  510. data/test/template/translation_helper_test.rb +0 -95
  511. data/test/template/url_helper_test.rb +0 -641
  512. data/test/testing_sandbox.rb +0 -15
  513. data/test/view/test_case_test.rb +0 -176
@@ -1,237 +0,0 @@
1
- require 'digest/md5'
2
-
3
- module ActionController # :nodoc:
4
- # Represents an HTTP response generated by a controller action. One can use
5
- # an ActionController::Response object to retrieve the current state
6
- # of the response, or customize the response. An Response object can
7
- # either represent a "real" HTTP response (i.e. one that is meant to be sent
8
- # back to the web browser) or a test response (i.e. one that is generated
9
- # from integration tests). See CgiResponse and TestResponse, respectively.
10
- #
11
- # Response is mostly a Ruby on Rails framework implement detail, and
12
- # should never be used directly in controllers. Controllers should use the
13
- # methods defined in ActionController::Base instead. For example, if you want
14
- # to set the HTTP response's content MIME type, then use
15
- # ActionControllerBase#headers instead of Response#headers.
16
- #
17
- # Nevertheless, integration tests may want to inspect controller responses in
18
- # more detail, and that's when Response can be useful for application
19
- # developers. Integration test methods such as
20
- # ActionController::Integration::Session#get and
21
- # ActionController::Integration::Session#post return objects of type
22
- # TestResponse (which are of course also of type Response).
23
- #
24
- # For example, the following demo integration "test" prints the body of the
25
- # controller response to the console:
26
- #
27
- # class DemoControllerTest < ActionController::IntegrationTest
28
- # def test_print_root_path_to_console
29
- # get('/')
30
- # puts @response.body
31
- # end
32
- # end
33
- class Response < Rack::Response
34
- DEFAULT_HEADERS = { "Cache-Control" => "no-cache" }
35
- attr_accessor :request
36
-
37
- attr_accessor :session, :assigns, :template, :layout
38
- attr_accessor :redirected_to, :redirected_to_method_params
39
-
40
- delegate :default_charset, :to => 'ActionController::Base'
41
-
42
- def initialize
43
- @status = 200
44
- @header = Rack::Utils::HeaderHash.new(DEFAULT_HEADERS)
45
-
46
- @writer = lambda { |x| @body << x }
47
- @block = nil
48
-
49
- @body = "",
50
- @session = []
51
- @assigns = []
52
- end
53
-
54
- def location; headers['Location'] end
55
- def location=(url) headers['Location'] = url end
56
-
57
-
58
- # Sets the HTTP response's content MIME type. For example, in the controller
59
- # you could write this:
60
- #
61
- # response.content_type = "text/plain"
62
- #
63
- # If a character set has been defined for this response (see charset=) then
64
- # the character set information will also be included in the content type
65
- # information.
66
- def content_type=(mime_type)
67
- new_content_type =
68
- if mime_type =~ /charset/ || (c = charset).nil?
69
- mime_type.to_s
70
- else
71
- "#{mime_type}; charset=#{c}"
72
- end
73
- self.headers["Content-Type"] = URI.escape(new_content_type, "\r\n")
74
- end
75
-
76
- # Returns the response's content MIME type, or nil if content type has been set.
77
- def content_type
78
- content_type = String(headers["Content-Type"] || headers["type"]).split(";")[0]
79
- content_type.blank? ? nil : content_type
80
- end
81
-
82
- # Set the charset of the Content-Type header. Set to nil to remove it.
83
- # If no content type is set, it defaults to HTML.
84
- def charset=(charset)
85
- headers["Content-Type"] =
86
- if charset
87
- "#{content_type || Mime::HTML}; charset=#{charset}"
88
- else
89
- content_type || Mime::HTML.to_s
90
- end
91
- end
92
-
93
- def charset
94
- charset = String(headers["Content-Type"] || headers["type"]).split(";")[1]
95
- charset.blank? ? nil : charset.strip.split("=")[1]
96
- end
97
-
98
- def last_modified
99
- if last = headers['Last-Modified']
100
- Time.httpdate(last)
101
- end
102
- end
103
-
104
- def last_modified?
105
- headers.include?('Last-Modified')
106
- end
107
-
108
- def last_modified=(utc_time)
109
- headers['Last-Modified'] = utc_time.httpdate
110
- end
111
-
112
- def etag
113
- headers['ETag']
114
- end
115
-
116
- def etag?
117
- headers.include?('ETag')
118
- end
119
-
120
- def etag=(etag)
121
- headers['ETag'] = %("#{Digest::MD5.hexdigest(ActiveSupport::Cache.expand_cache_key(etag))}")
122
- end
123
-
124
- def redirect(url, status)
125
- self.status = status
126
- self.location = url.gsub(/[\r\n]/, '')
127
- self.body = "<html><body>You are being <a href=\"#{CGI.escapeHTML(url)}\">redirected</a>.</body></html>"
128
- end
129
-
130
- def sending_file?
131
- headers["Content-Transfer-Encoding"] == "binary"
132
- end
133
-
134
- def assign_default_content_type_and_charset!
135
- self.content_type ||= Mime::HTML
136
- self.charset ||= default_charset unless sending_file?
137
- end
138
-
139
- def prepare!
140
- assign_default_content_type_and_charset!
141
- handle_conditional_get!
142
- set_content_length!
143
- convert_content_type!
144
- convert_language!
145
- convert_cookies!
146
- end
147
-
148
- def each(&callback)
149
- if @body.respond_to?(:call)
150
- @writer = lambda { |x| callback.call(x) }
151
- @body.call(self, self)
152
- elsif @body.respond_to?(:to_str)
153
- yield @body
154
- else
155
- @body.each(&callback)
156
- end
157
-
158
- @writer = callback
159
- @block.call(self) if @block
160
- end
161
-
162
- def write(str)
163
- @writer.call str.to_s
164
- str
165
- end
166
-
167
- def flush #:nodoc:
168
- ActiveSupport::Deprecation.warn(
169
- 'Calling output.flush is no longer needed for streaming output ' +
170
- 'because ActionController::Response automatically handles it', caller)
171
- end
172
-
173
- def set_cookie(key, value)
174
- if value.has_key?(:http_only)
175
- ActiveSupport::Deprecation.warn(
176
- "The :http_only option in ActionController::Response#set_cookie " +
177
- "has been renamed. Please use :httponly instead.", caller)
178
- value[:httponly] ||= value.delete(:http_only)
179
- end
180
-
181
- super(key, value)
182
- end
183
-
184
- private
185
- def handle_conditional_get!
186
- if etag? || last_modified?
187
- set_conditional_cache_control!
188
- elsif nonempty_ok_response?
189
- self.etag = body
190
-
191
- if request && request.etag_matches?(etag)
192
- self.status = '304 Not Modified'
193
- self.body = ''
194
- end
195
-
196
- set_conditional_cache_control!
197
- end
198
- end
199
-
200
- def nonempty_ok_response?
201
- ok = !status || status.to_s[0..2] == '200'
202
- ok && body.is_a?(String) && !body.blank?
203
- end
204
-
205
- def set_conditional_cache_control!
206
- if headers['Cache-Control'] == DEFAULT_HEADERS['Cache-Control']
207
- headers['Cache-Control'] = 'private, max-age=0, must-revalidate'
208
- end
209
- end
210
-
211
- def convert_content_type!
212
- headers['Content-Type'] ||= "text/html"
213
- headers['Content-Type'] += "; charset=" + headers.delete('charset') if headers['charset']
214
- end
215
-
216
- # Don't set the Content-Length for block-based bodies as that would mean
217
- # reading it all into memory. Not nice for, say, a 2GB streaming file.
218
- def set_content_length!
219
- if status && status.to_s[0..2] == '204'
220
- headers.delete('Content-Length')
221
- elsif length = headers['Content-Length']
222
- headers['Content-Length'] = length.to_s
223
- elsif !body.respond_to?(:call) && (!status || status.to_s[0..2] != '304')
224
- headers["Content-Length"] = (body.respond_to?(:bytesize) ? body.bytesize : body.size).to_s
225
- end
226
- end
227
-
228
- def convert_language!
229
- headers["Content-Language"] = headers.delete("language") if headers["language"]
230
- end
231
-
232
- def convert_cookies!
233
- cookies = Array(headers['Set-Cookie']).compact
234
- headers['Set-Cookie'] = cookies unless cookies.empty?
235
- end
236
- end
237
- end
@@ -1,388 +0,0 @@
1
- require 'cgi'
2
- require 'uri'
3
- require 'action_controller/routing/optimisations'
4
- require 'action_controller/routing/routing_ext'
5
- require 'action_controller/routing/route'
6
- require 'action_controller/routing/segments'
7
- require 'action_controller/routing/builder'
8
- require 'action_controller/routing/route_set'
9
- require 'action_controller/routing/recognition_optimisation'
10
-
11
- module ActionController
12
- # == Routing
13
- #
14
- # The routing module provides URL rewriting in native Ruby. It's a way to
15
- # redirect incoming requests to controllers and actions. This replaces
16
- # mod_rewrite rules. Best of all, Rails' Routing works with any web server.
17
- # Routes are defined in <tt>config/routes.rb</tt>.
18
- #
19
- # Consider the following route, installed by Rails when you generate your
20
- # application:
21
- #
22
- # map.connect ':controller/:action/:id'
23
- #
24
- # This route states that it expects requests to consist of a
25
- # <tt>:controller</tt> followed by an <tt>:action</tt> that in turn is fed
26
- # some <tt>:id</tt>.
27
- #
28
- # Suppose you get an incoming request for <tt>/blog/edit/22</tt>, you'll end up
29
- # with:
30
- #
31
- # params = { :controller => 'blog',
32
- # :action => 'edit',
33
- # :id => '22'
34
- # }
35
- #
36
- # Think of creating routes as drawing a map for your requests. The map tells
37
- # them where to go based on some predefined pattern:
38
- #
39
- # ActionController::Routing::Routes.draw do |map|
40
- # Pattern 1 tells some request to go to one place
41
- # Pattern 2 tell them to go to another
42
- # ...
43
- # end
44
- #
45
- # The following symbols are special:
46
- #
47
- # :controller maps to your controller name
48
- # :action maps to an action with your controllers
49
- #
50
- # Other names simply map to a parameter as in the case of <tt>:id</tt>.
51
- #
52
- # == Route priority
53
- #
54
- # Not all routes are created equally. Routes have priority defined by the
55
- # order of appearance of the routes in the <tt>config/routes.rb</tt> file. The priority goes
56
- # from top to bottom. The last route in that file is at the lowest priority
57
- # and will be applied last. If no route matches, 404 is returned.
58
- #
59
- # Within blocks, the empty pattern is at the highest priority.
60
- # In practice this works out nicely:
61
- #
62
- # ActionController::Routing::Routes.draw do |map|
63
- # map.with_options :controller => 'blog' do |blog|
64
- # blog.show '', :action => 'list'
65
- # end
66
- # map.connect ':controller/:action/:view'
67
- # end
68
- #
69
- # In this case, invoking blog controller (with an URL like '/blog/')
70
- # without parameters will activate the 'list' action by default.
71
- #
72
- # == Defaults routes and default parameters
73
- #
74
- # Setting a default route is straightforward in Rails - you simply append a
75
- # Hash at the end of your mapping to set any default parameters.
76
- #
77
- # Example:
78
- #
79
- # ActionController::Routing:Routes.draw do |map|
80
- # map.connect ':controller/:action/:id', :controller => 'blog'
81
- # end
82
- #
83
- # This sets up +blog+ as the default controller if no other is specified.
84
- # This means visiting '/' would invoke the blog controller.
85
- #
86
- # More formally, you can include arbitrary parameters in the route, thus:
87
- #
88
- # map.connect ':controller/:action/:id', :action => 'show', :page => 'Dashboard'
89
- #
90
- # This will pass the :page parameter to all incoming requests that match this route.
91
- #
92
- # Note: The default routes, as provided by the Rails generator, make all actions in every
93
- # controller accessible via GET requests. You should consider removing them or commenting
94
- # them out if you're using named routes and resources.
95
- #
96
- # == Named routes
97
- #
98
- # Routes can be named with the syntax <tt>map.name_of_route options</tt>,
99
- # allowing for easy reference within your source as +name_of_route_url+
100
- # for the full URL and +name_of_route_path+ for the URI path.
101
- #
102
- # Example:
103
- #
104
- # # In routes.rb
105
- # map.login 'login', :controller => 'accounts', :action => 'login'
106
- #
107
- # # With render, redirect_to, tests, etc.
108
- # redirect_to login_url
109
- #
110
- # Arguments can be passed as well.
111
- #
112
- # redirect_to show_item_path(:id => 25)
113
- #
114
- # Use <tt>map.root</tt> as a shorthand to name a route for the root path "".
115
- #
116
- # # In routes.rb
117
- # map.root :controller => 'blogs'
118
- #
119
- # # would recognize http://www.example.com/ as
120
- # params = { :controller => 'blogs', :action => 'index' }
121
- #
122
- # # and provide these named routes
123
- # root_url # => 'http://www.example.com/'
124
- # root_path # => ''
125
- #
126
- # You can also specify an already-defined named route in your <tt>map.root</tt> call:
127
- #
128
- # # In routes.rb
129
- # map.new_session :controller => 'sessions', :action => 'new'
130
- # map.root :new_session
131
- #
132
- # Note: when using +with_options+, the route is simply named after the
133
- # method you call on the block parameter rather than map.
134
- #
135
- # # In routes.rb
136
- # map.with_options :controller => 'blog' do |blog|
137
- # blog.show '', :action => 'list'
138
- # blog.delete 'delete/:id', :action => 'delete',
139
- # blog.edit 'edit/:id', :action => 'edit'
140
- # end
141
- #
142
- # # provides named routes for show, delete, and edit
143
- # link_to @article.title, show_path(:id => @article.id)
144
- #
145
- # == Pretty URLs
146
- #
147
- # Routes can generate pretty URLs. For example:
148
- #
149
- # map.connect 'articles/:year/:month/:day',
150
- # :controller => 'articles',
151
- # :action => 'find_by_date',
152
- # :year => /\d{4}/,
153
- # :month => /\d{1,2}/,
154
- # :day => /\d{1,2}/
155
- #
156
- # Using the route above, the URL "http://localhost:3000/articles/2005/11/06"
157
- # maps to
158
- #
159
- # params = {:year => '2005', :month => '11', :day => '06'}
160
- #
161
- # == Regular Expressions and parameters
162
- # You can specify a regular expression to define a format for a parameter.
163
- #
164
- # map.geocode 'geocode/:postalcode', :controller => 'geocode',
165
- # :action => 'show', :postalcode => /\d{5}(-\d{4})?/
166
- #
167
- # or, more formally:
168
- #
169
- # map.geocode 'geocode/:postalcode', :controller => 'geocode',
170
- # :action => 'show', :requirements => { :postalcode => /\d{5}(-\d{4})?/ }
171
- #
172
- # Formats can include the 'ignorecase' and 'extended syntax' regular
173
- # expression modifiers:
174
- #
175
- # map.geocode 'geocode/:postalcode', :controller => 'geocode',
176
- # :action => 'show', :postalcode => /hx\d\d\s\d[a-z]{2}/i
177
- #
178
- # map.geocode 'geocode/:postalcode', :controller => 'geocode',
179
- # :action => 'show',:requirements => {
180
- # :postalcode => /# Postcode format
181
- # \d{5} #Prefix
182
- # (-\d{4})? #Suffix
183
- # /x
184
- # }
185
- #
186
- # Using the multiline match modifier will raise an ArgumentError.
187
- # Encoding regular expression modifiers are silently ignored. The
188
- # match will always use the default encoding or ASCII.
189
- #
190
- # == Route globbing
191
- #
192
- # Specifying <tt>*[string]</tt> as part of a rule like:
193
- #
194
- # map.connect '*path' , :controller => 'blog' , :action => 'unrecognized?'
195
- #
196
- # will glob all remaining parts of the route that were not recognized earlier.
197
- # The globbed values are in <tt>params[:path]</tt> as an array of path segments.
198
- #
199
- # == Route conditions
200
- #
201
- # With conditions you can define restrictions on routes. Currently the only valid condition is <tt>:method</tt>.
202
- #
203
- # * <tt>:method</tt> - Allows you to specify which method can access the route. Possible values are <tt>:post</tt>,
204
- # <tt>:get</tt>, <tt>:put</tt>, <tt>:delete</tt> and <tt>:any</tt>. The default value is <tt>:any</tt>,
205
- # <tt>:any</tt> means that any method can access the route.
206
- #
207
- # Example:
208
- #
209
- # map.connect 'post/:id', :controller => 'posts', :action => 'show',
210
- # :conditions => { :method => :get }
211
- # map.connect 'post/:id', :controller => 'posts', :action => 'create_comment',
212
- # :conditions => { :method => :post }
213
- #
214
- # Now, if you POST to <tt>/posts/:id</tt>, it will route to the <tt>create_comment</tt> action. A GET on the same
215
- # URL will route to the <tt>show</tt> action.
216
- #
217
- # == Reloading routes
218
- #
219
- # You can reload routes if you feel you must:
220
- #
221
- # ActionController::Routing::Routes.reload
222
- #
223
- # This will clear all named routes and reload routes.rb if the file has been modified from
224
- # last load. To absolutely force reloading, use <tt>reload!</tt>.
225
- #
226
- # == Testing Routes
227
- #
228
- # The two main methods for testing your routes:
229
- #
230
- # === +assert_routing+
231
- #
232
- # def test_movie_route_properly_splits
233
- # opts = {:controller => "plugin", :action => "checkout", :id => "2"}
234
- # assert_routing "plugin/checkout/2", opts
235
- # end
236
- #
237
- # +assert_routing+ lets you test whether or not the route properly resolves into options.
238
- #
239
- # === +assert_recognizes+
240
- #
241
- # def test_route_has_options
242
- # opts = {:controller => "plugin", :action => "show", :id => "12"}
243
- # assert_recognizes opts, "/plugins/show/12"
244
- # end
245
- #
246
- # Note the subtle difference between the two: +assert_routing+ tests that
247
- # a URL fits options while +assert_recognizes+ tests that a URL
248
- # breaks into parameters properly.
249
- #
250
- # In tests you can simply pass the URL or named route to +get+ or +post+.
251
- #
252
- # def send_to_jail
253
- # get '/jail'
254
- # assert_response :success
255
- # assert_template "jail/front"
256
- # end
257
- #
258
- # def goes_to_login
259
- # get login_url
260
- # #...
261
- # end
262
- #
263
- # == View a list of all your routes
264
- #
265
- # Run <tt>rake routes</tt>.
266
- #
267
- module Routing
268
- SEPARATORS = %w( / . ? )
269
-
270
- HTTP_METHODS = [:get, :head, :post, :put, :delete, :options]
271
-
272
- ALLOWED_REQUIREMENTS_FOR_OPTIMISATION = [:controller, :action].to_set
273
-
274
- mattr_accessor :generate_best_match
275
- self.generate_best_match = true
276
-
277
- # The root paths which may contain controller files
278
- mattr_accessor :controller_paths
279
- self.controller_paths = []
280
-
281
- # A helper module to hold URL related helpers.
282
- module Helpers
283
- include PolymorphicRoutes
284
- end
285
-
286
- class << self
287
- # Expects an array of controller names as the first argument.
288
- # Executes the passed block with only the named controllers named available.
289
- # This method is used in internal Rails testing.
290
- def with_controllers(names)
291
- prior_controllers = @possible_controllers
292
- use_controllers! names
293
- yield
294
- ensure
295
- use_controllers! prior_controllers
296
- end
297
-
298
- # Returns an array of paths, cleaned of double-slashes and relative path references.
299
- # * "\\\" and "//" become "\\" or "/".
300
- # * "/foo/bar/../config" becomes "/foo/config".
301
- # The returned array is sorted by length, descending.
302
- def normalize_paths(paths)
303
- # do the hokey-pokey of path normalization...
304
- paths = paths.collect do |path|
305
- path = path.
306
- gsub("//", "/"). # replace double / chars with a single
307
- gsub("\\\\", "\\"). # replace double \ chars with a single
308
- gsub(%r{(.)[\\/]$}, '\1') # drop final / or \ if path ends with it
309
-
310
- # eliminate .. paths where possible
311
- re = %r{[^/\\]+[/\\]\.\.[/\\]}
312
- path.gsub!(re, "") while path.match(re)
313
- path
314
- end
315
-
316
- # start with longest path, first
317
- paths = paths.uniq.sort_by { |path| - path.length }
318
- end
319
-
320
- # Returns the array of controller names currently available to ActionController::Routing.
321
- def possible_controllers
322
- unless @possible_controllers
323
- @possible_controllers = []
324
-
325
- paths = controller_paths.select { |path| File.directory?(path) && path != "." }
326
-
327
- seen_paths = Hash.new {|h, k| h[k] = true; false}
328
- normalize_paths(paths).each do |load_path|
329
- Dir["#{load_path}/**/*_controller.rb"].collect do |path|
330
- next if seen_paths[path.gsub(%r{^\.[/\\]}, "")]
331
-
332
- controller_name = path[(load_path.length + 1)..-1]
333
-
334
- controller_name.gsub!(/_controller\.rb\Z/, '')
335
- @possible_controllers << controller_name
336
- end
337
- end
338
-
339
- # remove duplicates
340
- @possible_controllers.uniq!
341
- end
342
- @possible_controllers
343
- end
344
-
345
- # Replaces the internal list of controllers available to ActionController::Routing with the passed argument.
346
- # ActionController::Routing.use_controllers!([ "posts", "comments", "admin/comments" ])
347
- def use_controllers!(controller_names)
348
- @possible_controllers = controller_names
349
- end
350
-
351
- # Returns a controller path for a new +controller+ based on a +previous+ controller path.
352
- # Handles 4 scenarios:
353
- #
354
- # * stay in the previous controller:
355
- # controller_relative_to( nil, "groups/discussion" ) # => "groups/discussion"
356
- #
357
- # * stay in the previous namespace:
358
- # controller_relative_to( "posts", "groups/discussion" ) # => "groups/posts"
359
- #
360
- # * forced move to the root namespace:
361
- # controller_relative_to( "/posts", "groups/discussion" ) # => "posts"
362
- #
363
- # * previous namespace is root:
364
- # controller_relative_to( "posts", "anything_with_no_slashes" ) # =>"posts"
365
- #
366
- def controller_relative_to(controller, previous)
367
- if controller.nil? then previous
368
- elsif controller[0] == ?/ then controller[1..-1]
369
- elsif %r{^(.*)/} =~ previous then "#{$1}/#{controller}"
370
- else controller
371
- end
372
- end
373
- end
374
-
375
- Routes = RouteSet.new
376
-
377
- ActiveSupport::Inflector.module_eval do
378
- # Ensures that routes are reloaded when Rails inflections are updated.
379
- def inflections_with_route_reloading(&block)
380
- (inflections_without_route_reloading(&block)).tap {
381
- ActionController::Routing::Routes.reload! if block_given?
382
- }
383
- end
384
-
385
- alias_method_chain :inflections, :route_reloading
386
- end
387
- end
388
- end