actionpack 2.3.18 → 3.0.0.beta

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 (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
@@ -62,9 +62,10 @@ module ActionController #:nodoc:
62
62
  # expire_page "/lists/show"
63
63
  def expire_page(path)
64
64
  return unless perform_caching
65
+ path = page_cache_path(path)
65
66
 
66
- benchmark "Expired page: #{page_cache_file(path)}" do
67
- File.delete(page_cache_path(path)) if File.exist?(page_cache_path(path))
67
+ instrument_page_cache :expire_page, path do
68
+ File.delete(path) if File.exist?(path)
68
69
  end
69
70
  end
70
71
 
@@ -72,10 +73,11 @@ module ActionController #:nodoc:
72
73
  # cache_page "I'm the cached content", "/lists/show"
73
74
  def cache_page(content, path)
74
75
  return unless perform_caching
76
+ path = page_cache_path(path)
75
77
 
76
- benchmark "Cached page: #{page_cache_file(path)}" do
77
- FileUtils.makedirs(File.dirname(page_cache_path(path)))
78
- File.open(page_cache_path(path), "wb+") { |f| f.write(content) }
78
+ instrument_page_cache :write_page, path do
79
+ FileUtils.makedirs(File.dirname(path))
80
+ File.open(path, "wb+") { |f| f.write(content) }
79
81
  end
80
82
  end
81
83
 
@@ -105,6 +107,10 @@ module ActionController #:nodoc:
105
107
  def page_cache_path(path)
106
108
  page_cache_directory + page_cache_file(path)
107
109
  end
110
+
111
+ def instrument_page_cache(name, path)
112
+ ActiveSupport::Notifications.instrument("action_controller.#{name}", :path => path){ yield }
113
+ end
108
114
  end
109
115
 
110
116
  # Expires the page that was cached with the +options+ as a key. Example:
@@ -149,4 +155,4 @@ module ActionController #:nodoc:
149
155
  end
150
156
  end
151
157
  end
152
- end
158
+ end
@@ -51,5 +51,47 @@ module ActionController #:nodoc:
51
51
  end
52
52
  end
53
53
  end
54
+
55
+ if defined?(ActiveRecord) and defined?(ActiveRecord::Observer)
56
+ class Sweeper < ActiveRecord::Observer #:nodoc:
57
+ attr_accessor :controller
58
+
59
+ def before(controller)
60
+ self.controller = controller
61
+ callback(:before) if controller.perform_caching
62
+ end
63
+
64
+ def after(controller)
65
+ callback(:after) if controller.perform_caching
66
+ # Clean up, so that the controller can be collected after this request
67
+ self.controller = nil
68
+ end
69
+
70
+ protected
71
+ # gets the action cache path for the given options.
72
+ def action_path_for(options)
73
+ Actions::ActionCachePath.new(controller, options).path
74
+ end
75
+
76
+ # Retrieve instance variables set in the controller.
77
+ def assigns(key)
78
+ controller.instance_variable_get("@#{key}")
79
+ end
80
+
81
+ private
82
+ def callback(timing)
83
+ controller_callback_method_name = "#{timing}_#{controller.controller_name.underscore}"
84
+ action_callback_method_name = "#{controller_callback_method_name}_#{controller.action_name}"
85
+
86
+ __send__(controller_callback_method_name) if respond_to?(controller_callback_method_name, true)
87
+ __send__(action_callback_method_name) if respond_to?(action_callback_method_name, true)
88
+ end
89
+
90
+ def method_missing(method, *arguments, &block)
91
+ return if @controller.nil?
92
+ @controller.__send__(method, *arguments, &block)
93
+ end
94
+ end
95
+ end
54
96
  end
55
97
  end
@@ -0,0 +1,5 @@
1
+ ActionController::AbstractRequest = ActionController::Request = ActionDispatch::Request
2
+ ActionController::AbstractResponse = ActionController::Response = ActionDispatch::Response
3
+ ActionController::Routing = ActionDispatch::Routing
4
+ ActionController::Routing::Routes = ActionDispatch::Routing::RouteSet.new
5
+ ActionController::UrlWriter = ActionController::UrlFor
@@ -0,0 +1,28 @@
1
+ module ActionController
2
+ class Dispatcher
3
+ class << self
4
+ def before_dispatch(*args, &block)
5
+ ActiveSupport::Deprecation.warn "ActionController::Dispatcher.before_dispatch is deprecated. " <<
6
+ "Please use ActionDispatch::Callbacks.before instead.", caller
7
+ ActionDispatch::Callbacks.before(*args, &block)
8
+ end
9
+
10
+ def after_dispatch(*args, &block)
11
+ ActiveSupport::Deprecation.warn "ActionController::Dispatcher.after_dispatch is deprecated. " <<
12
+ "Please use ActionDispatch::Callbacks.after instead.", caller
13
+ ActionDispatch::Callbacks.after(*args, &block)
14
+ end
15
+
16
+ def to_prepare(*args, &block)
17
+ ActiveSupport::Deprecation.warn "ActionController::Dispatcher.to_prepare is deprecated. " <<
18
+ "Please use config.to_prepare instead", caller
19
+ ActionDispatch::Callbacks.after(*args, &block)
20
+ end
21
+
22
+ def new
23
+ ActiveSupport::Deprecation.warn "ActionController::Dispatcher.new is deprecated, use Rails.application instead."
24
+ Rails.application
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,2 @@
1
+ ActionController::Integration = ActionDispatch::Integration
2
+ ActionController::IntegrationTest = ActionDispatch::IntegrationTest
@@ -0,0 +1 @@
1
+ ActionController::PerformanceTest = ActionDispatch::PerformanceTest
@@ -0,0 +1,125 @@
1
+ require 'active_support/core_ext/class/attribute'
2
+
3
+ module ActionController
4
+ # ActionController::Metal provides a way to get a valid Rack application from a controller.
5
+ #
6
+ # In AbstractController, dispatching is triggered directly by calling #process on a new controller.
7
+ # ActionController::Metal provides an #action method that returns a valid Rack application for a
8
+ # given action. Other rack builders, such as Rack::Builder, Rack::URLMap, and the Rails router,
9
+ # can dispatch directly to the action returned by FooController.action(:index).
10
+ class Metal < AbstractController::Base
11
+ abstract!
12
+
13
+ # :api: public
14
+ attr_internal :params, :env
15
+
16
+ # Returns the last part of the controller's name, underscored, without the ending
17
+ # "Controller". For instance, MyApp::MyPostsController would return "my_posts" for
18
+ # controller_name
19
+ #
20
+ # ==== Returns
21
+ # String
22
+ def self.controller_name
23
+ @controller_name ||= controller_path.split("/").last
24
+ end
25
+
26
+ # Delegates to the class' #controller_name
27
+ def controller_name
28
+ self.class.controller_name
29
+ end
30
+
31
+ # The details below can be overridden to support a specific
32
+ # Request and Response object. The default ActionController::Base
33
+ # implementation includes RackDelegation, which makes a request
34
+ # and response object available. You might wish to control the
35
+ # environment and response manually for performance reasons.
36
+
37
+ attr_internal :status, :headers, :content_type, :response
38
+
39
+ def initialize(*)
40
+ @_headers = {}
41
+ super
42
+ end
43
+
44
+ # Basic implementations for content_type=, location=, and headers are
45
+ # provided to reduce the dependency on the RackDelegation module
46
+ # in Renderer and Redirector.
47
+
48
+ def content_type=(type)
49
+ headers["Content-Type"] = type.to_s
50
+ end
51
+
52
+ def location=(url)
53
+ headers["Location"] = url
54
+ end
55
+
56
+ def status=(status)
57
+ @_status = Rack::Utils.status_code(status)
58
+ end
59
+
60
+ # :api: private
61
+ def dispatch(name, env)
62
+ @_env = env
63
+ @_env['action_controller.instance'] = self
64
+ process(name)
65
+ to_a
66
+ end
67
+
68
+ # :api: private
69
+ def to_a
70
+ response ? response.to_a : [status, headers, response_body]
71
+ end
72
+
73
+ class ActionEndpoint
74
+ @@endpoints = Hash.new {|h,k| h[k] = Hash.new {|sh,sk| sh[sk] = {} } }
75
+
76
+ def self.for(controller, action, stack)
77
+ @@endpoints[controller][action][stack] ||= begin
78
+ endpoint = new(controller, action)
79
+ stack.build(endpoint)
80
+ end
81
+ end
82
+
83
+ def initialize(controller, action)
84
+ @controller, @action = controller, action
85
+ @_formats = [Mime::HTML]
86
+ end
87
+
88
+ def call(env)
89
+ @controller.new.dispatch(@action, env)
90
+ end
91
+ end
92
+
93
+ class_attribute :middleware_stack
94
+ self.middleware_stack = ActionDispatch::MiddlewareStack.new
95
+
96
+ def self.inherited(base)
97
+ self.middleware_stack = base.middleware_stack.dup
98
+ end
99
+
100
+ def self.use(*args)
101
+ middleware_stack.use(*args)
102
+ end
103
+
104
+ def self.middleware
105
+ middleware_stack
106
+ end
107
+
108
+ def self.call(env)
109
+ action(env['action_dispatch.request.path_parameters'][:action]).call(env)
110
+ end
111
+
112
+ # Return a rack endpoint for the given action. Memoize the endpoint, so
113
+ # multiple calls into MyController.action will return the same object
114
+ # for the same action.
115
+ #
116
+ # ==== Parameters
117
+ # action<#to_s>:: An action name
118
+ #
119
+ # ==== Returns
120
+ # Proc:: A rack application
121
+ def self.action(name)
122
+ ActionEndpoint.for(self, name, middleware_stack)
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,141 @@
1
+ module ActionController
2
+ module Compatibility
3
+ extend ActiveSupport::Concern
4
+
5
+ include AbstractController::Compatibility
6
+
7
+ class ::ActionController::ActionControllerError < StandardError #:nodoc:
8
+ end
9
+
10
+ # Temporary hax
11
+ included do
12
+ ::ActionController::UnknownAction = ::AbstractController::ActionNotFound
13
+ ::ActionController::DoubleRenderError = ::AbstractController::DoubleRenderError
14
+
15
+ cattr_accessor :session_options
16
+ self.session_options = {}
17
+
18
+ cattr_accessor :relative_url_root
19
+ self.relative_url_root = ENV['RAILS_RELATIVE_URL_ROOT']
20
+
21
+ class << self
22
+ delegate :default_charset=, :to => "ActionDispatch::Response"
23
+ delegate :resources_path_names, :to => "ActionController::Routing::Routes"
24
+ delegate :resources_path_names=, :to => "ActionController::Routing::Routes"
25
+ end
26
+
27
+ # cattr_reader :protected_instance_variables
28
+ cattr_accessor :protected_instance_variables
29
+ self.protected_instance_variables = %w(@assigns @performed_redirect @performed_render
30
+ @variables_added @request_origin @url
31
+ @parent_controller @action_name
32
+ @before_filter_chain_aborted @_headers @_params
33
+ @_response)
34
+
35
+ # Controls the resource action separator
36
+ cattr_accessor :resource_action_separator
37
+ self.resource_action_separator = "/"
38
+
39
+ cattr_accessor :use_accept_header
40
+ self.use_accept_header = true
41
+
42
+ self.page_cache_directory = defined?(Rails.public_path) ? Rails.public_path : ""
43
+
44
+ # Prepends all the URL-generating helpers from AssetHelper. This makes it possible to easily move javascripts, stylesheets,
45
+ # and images to a dedicated asset server away from the main web server. Example:
46
+ # ActionController::Base.asset_host = "http://assets.example.com"
47
+ cattr_accessor :asset_host
48
+
49
+ cattr_accessor :ip_spoofing_check
50
+ self.ip_spoofing_check = true
51
+
52
+ cattr_accessor :trusted_proxies
53
+ end
54
+
55
+ # For old tests
56
+ def initialize_template_class(*) end
57
+ def assign_shortcuts(*) end
58
+
59
+ # TODO: Remove this after we flip
60
+ def template
61
+ @template ||= view_context
62
+ end
63
+
64
+ def process_action(*)
65
+ template
66
+ super
67
+ end
68
+
69
+ module ClassMethods
70
+ def consider_all_requests_local
71
+ ActiveSupport::Deprecation.warn "ActionController::Base.consider_all_requests_local is deprecated, " <<
72
+ "use Rails.application.config.consider_all_requests_local instead"
73
+ Rails.application.config.consider_all_requests_local
74
+ end
75
+
76
+ def consider_all_requests_local=(value)
77
+ ActiveSupport::Deprecation.warn "ActionController::Base.consider_all_requests_local= is no longer effective. " <<
78
+ "Please configure it on your application with config.consider_all_requests_local="
79
+ end
80
+
81
+ def allow_concurrency
82
+ ActiveSupport::Deprecation.warn "ActionController::Base.allow_concurrency is deprecated, " <<
83
+ "use Rails.application.config.allow_concurrency instead"
84
+ Rails.application.config.allow_concurrency
85
+ end
86
+
87
+ def allow_concurrency=(value)
88
+ ActiveSupport::Deprecation.warn "ActionController::Base.allow_concurrency= is no longer effective. " <<
89
+ "Please configure it on your application with config.allow_concurrency="
90
+ end
91
+
92
+ def rescue_action(env)
93
+ raise env["action_dispatch.rescue.exception"]
94
+ end
95
+
96
+ # Defines the storage option for cached fragments
97
+ def cache_store=(store_option)
98
+ @@cache_store = ActiveSupport::Cache.lookup_store(store_option)
99
+ end
100
+ end
101
+
102
+ delegate :consider_all_requests_local, :consider_all_requests_local=,
103
+ :allow_concurrency, :allow_concurrency=, :to => :"self.class"
104
+
105
+ def render_to_body(options)
106
+ if options.is_a?(Hash) && options.key?(:template)
107
+ options[:template].sub!(/^\//, '')
108
+ end
109
+
110
+ options[:text] = nil if options.delete(:nothing) == true
111
+ options[:text] = " " if options.key?(:text) && options[:text].nil?
112
+
113
+ super || " "
114
+ end
115
+
116
+ def _handle_method_missing
117
+ method_missing(@_action_name.to_sym)
118
+ end
119
+
120
+ def method_for_action(action_name)
121
+ super || (respond_to?(:method_missing) && "_handle_method_missing")
122
+ end
123
+
124
+ def performed?
125
+ response_body
126
+ end
127
+
128
+ # ==== Request only view path switching ====
129
+ def append_view_path(path)
130
+ view_paths.push(*path)
131
+ end
132
+
133
+ def prepend_view_path(path)
134
+ view_paths.unshift(*path)
135
+ end
136
+
137
+ def view_paths
138
+ view_context.view_paths
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,86 @@
1
+ module ActionController
2
+ module ConditionalGet
3
+ extend ActiveSupport::Concern
4
+
5
+ include RackDelegation
6
+ include Head
7
+
8
+ # Sets the etag, last_modified, or both on the response and renders a
9
+ # "304 Not Modified" response if the request is already fresh.
10
+ #
11
+ # Parameters:
12
+ # * <tt>:etag</tt>
13
+ # * <tt>:last_modified</tt>
14
+ # * <tt>:public</tt> By default the Cache-Control header is private, set this to true if you want your application to be cachable by other devices (proxy caches).
15
+ #
16
+ # Example:
17
+ #
18
+ # def show
19
+ # @article = Article.find(params[:id])
20
+ # fresh_when(:etag => @article, :last_modified => @article.created_at.utc, :public => true)
21
+ # end
22
+ #
23
+ # This will render the show template if the request isn't sending a matching etag or
24
+ # If-Modified-Since header and just a "304 Not Modified" response if there's a match.
25
+ #
26
+ def fresh_when(options)
27
+ options.assert_valid_keys(:etag, :last_modified, :public)
28
+
29
+ response.etag = options[:etag] if options[:etag]
30
+ response.last_modified = options[:last_modified] if options[:last_modified]
31
+ response.cache_control[:public] = true if options[:public]
32
+
33
+ head :not_modified if request.fresh?(response)
34
+ end
35
+
36
+ # Sets the etag and/or last_modified on the response and checks it against
37
+ # the client request. If the request doesn't match the options provided, the
38
+ # request is considered stale and should be generated from scratch. Otherwise,
39
+ # it's fresh and we don't need to generate anything and a reply of "304 Not Modified" is sent.
40
+ #
41
+ # Parameters:
42
+ # * <tt>:etag</tt>
43
+ # * <tt>:last_modified</tt>
44
+ # * <tt>:public</tt> By default the Cache-Control header is private, set this to true if you want your application to be cachable by other devices (proxy caches).
45
+ #
46
+ # Example:
47
+ #
48
+ # def show
49
+ # @article = Article.find(params[:id])
50
+ #
51
+ # if stale?(:etag => @article, :last_modified => @article.created_at.utc)
52
+ # @statistics = @article.really_expensive_call
53
+ # respond_to do |format|
54
+ # # all the supported formats
55
+ # end
56
+ # end
57
+ # end
58
+ def stale?(options)
59
+ fresh_when(options)
60
+ !request.fresh?(response)
61
+ end
62
+
63
+ # Sets a HTTP 1.1 Cache-Control header. Defaults to issuing a "private" instruction, so that
64
+ # intermediate caches shouldn't cache the response.
65
+ #
66
+ # Examples:
67
+ # expires_in 20.minutes
68
+ # expires_in 3.hours, :public => true
69
+ # expires in 3.hours, 'max-stale' => 5.hours, :public => true
70
+ #
71
+ # This method will overwrite an existing Cache-Control header.
72
+ # See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html for more possibilities.
73
+ def expires_in(seconds, options = {}) #:doc:
74
+ response.cache_control.merge!(:max_age => seconds, :public => options.delete(:public))
75
+ options.delete(:private)
76
+
77
+ response.cache_control[:extras] = options.map {|k,v| "#{k}=#{v}"}
78
+ end
79
+
80
+ # Sets a HTTP 1.1 Cache-Control header of "no-cache" so no caching should occur by the browser or
81
+ # intermediate caches (like caching proxy servers).
82
+ def expires_now #:doc:
83
+ response.cache_control.replace(:no_cache => true)
84
+ end
85
+ end
86
+ end