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,217 +0,0 @@
1
- require 'abstract_unit'
2
- require 'pp' # require 'pp' early to prevent hidden_methods from not picking up the pretty-print methods until too late
3
-
4
- # Provide some controller to run the tests on.
5
- module Submodule
6
- class ContainedEmptyController < ActionController::Base
7
- end
8
- class ContainedNonEmptyController < ActionController::Base
9
- def public_action
10
- render :nothing => true
11
- end
12
-
13
- hide_action :hidden_action
14
- def hidden_action
15
- raise "Noooo!"
16
- end
17
-
18
- def another_hidden_action
19
- end
20
- hide_action :another_hidden_action
21
- end
22
- class SubclassedController < ContainedNonEmptyController
23
- hide_action :public_action # Hiding it here should not affect the superclass.
24
- end
25
- end
26
- class EmptyController < ActionController::Base
27
- end
28
- class NonEmptyController < ActionController::Base
29
- def public_action
30
- end
31
-
32
- hide_action :hidden_action
33
- def hidden_action
34
- end
35
- end
36
-
37
- class MethodMissingController < ActionController::Base
38
-
39
- hide_action :shouldnt_be_called
40
- def shouldnt_be_called
41
- raise "NO WAY!"
42
- end
43
-
44
- protected
45
-
46
- def method_missing(selector)
47
- render :text => selector.to_s
48
- end
49
-
50
- end
51
-
52
- class DefaultUrlOptionsController < ActionController::Base
53
- def default_url_options_action
54
- end
55
-
56
- def default_url_options(options = nil)
57
- { :host => 'www.override.com', :action => 'new', :bacon => 'chunky' }
58
- end
59
- end
60
-
61
- class ControllerClassTests < Test::Unit::TestCase
62
- def test_controller_path
63
- assert_equal 'empty', EmptyController.controller_path
64
- assert_equal EmptyController.controller_path, EmptyController.new.controller_path
65
- assert_equal 'submodule/contained_empty', Submodule::ContainedEmptyController.controller_path
66
- assert_equal Submodule::ContainedEmptyController.controller_path, Submodule::ContainedEmptyController.new.controller_path
67
- end
68
- def test_controller_name
69
- assert_equal 'empty', EmptyController.controller_name
70
- assert_equal 'contained_empty', Submodule::ContainedEmptyController.controller_name
71
- end
72
- end
73
-
74
- class ControllerInstanceTests < Test::Unit::TestCase
75
- def setup
76
- @empty = EmptyController.new
77
- @contained = Submodule::ContainedEmptyController.new
78
- @empty_controllers = [@empty, @contained, Submodule::SubclassedController.new]
79
-
80
- @non_empty_controllers = [NonEmptyController.new,
81
- Submodule::ContainedNonEmptyController.new]
82
- end
83
-
84
- def test_action_methods
85
- @empty_controllers.each do |c|
86
- hide_mocha_methods_from_controller(c)
87
- assert_equal Set.new, c.__send__(:action_methods), "#{c.controller_path} should be empty!"
88
- end
89
- @non_empty_controllers.each do |c|
90
- hide_mocha_methods_from_controller(c)
91
- assert_equal Set.new(%w(public_action)), c.__send__(:action_methods), "#{c.controller_path} should not be empty!"
92
- end
93
- end
94
-
95
- protected
96
- # Mocha adds some public instance methods to Object that would be
97
- # considered actions, so explicitly hide_action them.
98
- def hide_mocha_methods_from_controller(controller)
99
- mocha_methods = [
100
- :expects, :mocha, :mocha_inspect, :reset_mocha, :stubba_object,
101
- :stubba_method, :stubs, :verify, :__metaclass__, :__is_a__, :to_matcher,
102
- ]
103
- controller.class.__send__(:hide_action, *mocha_methods)
104
- end
105
- end
106
-
107
-
108
- class PerformActionTest < ActionController::TestCase
109
- class MockLogger
110
- attr_reader :logged
111
-
112
- def initialize
113
- @logged = []
114
- end
115
-
116
- def method_missing(method, *args)
117
- @logged << args.first
118
- end
119
- end
120
-
121
- def use_controller(controller_class)
122
- @controller = controller_class.new
123
-
124
- # enable a logger so that (e.g.) the benchmarking stuff runs, so we can get
125
- # a more accurate simulation of what happens in "real life".
126
- @controller.logger = Logger.new(nil)
127
-
128
- @request = ActionController::TestRequest.new
129
- @response = ActionController::TestResponse.new
130
-
131
- @request.host = "www.nextangle.com"
132
-
133
- rescue_action_in_public!
134
- end
135
-
136
- def test_get_on_priv_should_show_selector
137
- use_controller MethodMissingController
138
- get :shouldnt_be_called
139
- assert_response :success
140
- assert_equal 'shouldnt_be_called', @response.body
141
- end
142
-
143
- def test_method_missing_is_not_an_action_name
144
- use_controller MethodMissingController
145
- assert ! @controller.__send__(:action_methods).include?('method_missing')
146
-
147
- get :method_missing
148
- assert_response :success
149
- assert_equal 'method_missing', @response.body
150
- end
151
-
152
- def test_get_on_hidden_should_fail
153
- use_controller NonEmptyController
154
- get :hidden_action
155
- assert_response 404
156
-
157
- get :another_hidden_action
158
- assert_response 404
159
- end
160
-
161
- def test_namespaced_action_should_log_module_name
162
- use_controller Submodule::ContainedNonEmptyController
163
- @controller.logger = MockLogger.new
164
- get :public_action
165
- assert_match /Processing\sSubmodule::ContainedNonEmptyController#public_action/, @controller.logger.logged[1]
166
- end
167
- end
168
-
169
- class DefaultUrlOptionsTest < ActionController::TestCase
170
- tests DefaultUrlOptionsController
171
-
172
- def setup
173
- @request.host = 'www.example.com'
174
- rescue_action_in_public!
175
- end
176
-
177
- def test_default_url_options_are_used_if_set
178
- ActionController::Routing::Routes.draw do |map|
179
- map.default_url_options 'default_url_options', :controller => 'default_url_options'
180
- map.connect ':controller/:action/:id'
181
- end
182
-
183
- get :default_url_options_action # Make a dummy request so that the controller is initialized properly.
184
-
185
- assert_equal 'http://www.override.com/default_url_options/new?bacon=chunky', @controller.url_for(:controller => 'default_url_options')
186
- assert_equal 'http://www.override.com/default_url_options?bacon=chunky', @controller.send(:default_url_options_url)
187
- ensure
188
- ActionController::Routing::Routes.load!
189
- end
190
- end
191
-
192
- class EmptyUrlOptionsTest < ActionController::TestCase
193
- tests NonEmptyController
194
-
195
- def setup
196
- @request.host = 'www.example.com'
197
- rescue_action_in_public!
198
- end
199
-
200
- def test_ensure_url_for_works_as_expected_when_called_with_no_options_if_default_url_options_is_not_set
201
- get :public_action
202
- assert_equal "http://www.example.com/non_empty/public_action", @controller.url_for
203
- end
204
- end
205
-
206
- class EnsureNamedRoutesWorksTicket22BugTest < Test::Unit::TestCase
207
- def test_named_routes_still_work
208
- ActionController::Routing::Routes.draw do |map|
209
- map.resources :things
210
- end
211
- EmptyController.send :include, ActionController::UrlWriter
212
-
213
- assert_equal '/things', EmptyController.new.send(:things_path)
214
- ensure
215
- ActionController::Routing::Routes.load!
216
- end
217
- end
@@ -1,32 +0,0 @@
1
- require 'abstract_unit'
2
-
3
- # Provide some static controllers.
4
- class BenchmarkedController < ActionController::Base
5
- def public_action
6
- render :nothing => true
7
- end
8
-
9
- def rescue_action(e)
10
- raise e
11
- end
12
- end
13
-
14
- class BenchmarkTest < ActionController::TestCase
15
- tests BenchmarkedController
16
-
17
- class MockLogger
18
- def method_missing(*args)
19
- end
20
- end
21
-
22
- def setup
23
- # benchmark doesn't do anything unless a logger is set
24
- @controller.logger = MockLogger.new
25
- @request.host = "test.actioncontroller.i"
26
- end
27
-
28
- def test_with_http_1_0_request
29
- @request.host = nil
30
- assert_nothing_raised { get :public_action }
31
- end
32
- end
@@ -1,743 +0,0 @@
1
- require 'fileutils'
2
- require 'abstract_unit'
3
- require 'active_record_unit'
4
-
5
- CACHE_DIR = 'test_cache'
6
- # Don't change '/../temp/' cavalierly or you might hose something you don't want hosed
7
- FILE_STORE_PATH = File.join(File.dirname(__FILE__), '/../temp/', CACHE_DIR)
8
- ActionController::Base.page_cache_directory = FILE_STORE_PATH
9
- ActionController::Base.cache_store = :file_store, FILE_STORE_PATH
10
-
11
- # Force sweeper classes to load
12
- ActionController::Caching::Sweeper
13
- ActionController::Caching::Sweeping
14
-
15
- class PageCachingTestController < ActionController::Base
16
- caches_page :ok, :no_content, :if => Proc.new { |c| !c.request.format.json? }
17
- caches_page :found, :not_found
18
-
19
- def ok
20
- head :ok
21
- end
22
-
23
- def no_content
24
- head :no_content
25
- end
26
-
27
- def found
28
- redirect_to :action => 'ok'
29
- end
30
-
31
- def not_found
32
- head :not_found
33
- end
34
-
35
- def custom_path
36
- render :text => "Super soaker"
37
- cache_page("Super soaker", "/index.html")
38
- end
39
-
40
- def expire_custom_path
41
- expire_page("/index.html")
42
- head :ok
43
- end
44
-
45
- def trailing_slash
46
- render :text => "Sneak attack"
47
- end
48
- end
49
-
50
- class PageCachingTest < ActionController::TestCase
51
- def setup
52
- ActionController::Base.perform_caching = true
53
-
54
- ActionController::Routing::Routes.draw do |map|
55
- map.main '', :controller => 'posts', :format => nil
56
- map.formatted_posts 'posts.:format', :controller => 'posts'
57
- map.resources :posts
58
- map.connect ':controller/:action/:id'
59
- end
60
-
61
- @request = ActionController::TestRequest.new
62
- @request.host = 'hostname.com'
63
-
64
- @response = ActionController::TestResponse.new
65
- @controller = PageCachingTestController.new
66
-
67
- @params = {:controller => 'posts', :action => 'index', :only_path => true, :skip_relative_url_root => true}
68
- @rewriter = ActionController::UrlRewriter.new(@request, @params)
69
-
70
- FileUtils.rm_rf(File.dirname(FILE_STORE_PATH))
71
- FileUtils.mkdir_p(FILE_STORE_PATH)
72
- end
73
-
74
- def teardown
75
- FileUtils.rm_rf(File.dirname(FILE_STORE_PATH))
76
- ActionController::Routing::Routes.clear!
77
- ActionController::Base.perform_caching = false
78
- end
79
-
80
- def test_page_caching_resources_saves_to_correct_path_with_extension_even_if_default_route
81
- @params[:format] = 'rss'
82
- assert_equal '/posts.rss', @rewriter.rewrite(@params)
83
- @params[:format] = nil
84
- assert_equal '/', @rewriter.rewrite(@params)
85
- end
86
-
87
- def test_should_cache_get_with_ok_status
88
- get :ok
89
- assert_response :ok
90
- assert_page_cached :ok, "get with ok status should have been cached"
91
- end
92
-
93
- def test_should_cache_with_custom_path
94
- get :custom_path
95
- assert File.exist?("#{FILE_STORE_PATH}/index.html")
96
- end
97
-
98
- def test_should_expire_cache_with_custom_path
99
- get :custom_path
100
- assert File.exist?("#{FILE_STORE_PATH}/index.html")
101
-
102
- get :expire_custom_path
103
- assert !File.exist?("#{FILE_STORE_PATH}/index.html")
104
- end
105
-
106
- def test_should_cache_without_trailing_slash_on_url
107
- @controller.class.cache_page 'cached content', '/page_caching_test/trailing_slash'
108
- assert File.exist?("#{FILE_STORE_PATH}/page_caching_test/trailing_slash.html")
109
- end
110
-
111
- def test_should_cache_with_trailing_slash_on_url
112
- @controller.class.cache_page 'cached content', '/page_caching_test/trailing_slash/'
113
- assert File.exist?("#{FILE_STORE_PATH}/page_caching_test/trailing_slash.html")
114
- end
115
-
116
- def test_should_cache_ok_at_custom_path
117
- @request.stubs(:path).returns("/index.html")
118
- get :ok
119
- assert_response :ok
120
- assert File.exist?("#{FILE_STORE_PATH}/index.html")
121
- end
122
-
123
- [:ok, :no_content, :found, :not_found].each do |status|
124
- [:get, :post, :put, :delete].each do |method|
125
- unless method == :get and status == :ok
126
- define_method "test_shouldnt_cache_#{method}_with_#{status}_status" do
127
- send(method, status)
128
- assert_response status
129
- assert_page_not_cached status, "#{method} with #{status} status shouldn't have been cached"
130
- end
131
- end
132
- end
133
- end
134
-
135
- def test_page_caching_conditional_options
136
- get :ok, :format=>'json'
137
- assert_page_not_cached :ok
138
- end
139
-
140
- private
141
- def assert_page_cached(action, message = "#{action} should have been cached")
142
- assert page_cached?(action), message
143
- end
144
-
145
- def assert_page_not_cached(action, message = "#{action} shouldn't have been cached")
146
- assert !page_cached?(action), message
147
- end
148
-
149
- def page_cached?(action)
150
- File.exist? "#{FILE_STORE_PATH}/page_caching_test/#{action}.html"
151
- end
152
- end
153
-
154
- class ActionCachingTestController < ActionController::Base
155
- caches_action :index, :redirected, :forbidden, :if => Proc.new { |c| !c.request.format.json? }, :expires_in => 1.hour
156
- caches_action :show, :cache_path => 'http://test.host/custom/show'
157
- caches_action :edit, :cache_path => Proc.new { |c| c.params[:id] ? "http://test.host/#{c.params[:id]};edit" : "http://test.host/edit" }
158
- caches_action :with_layout
159
- caches_action :layout_false, :layout => false
160
- caches_action :record_not_found, :four_oh_four, :simple_runtime_error
161
-
162
- layout 'talk_from_action.erb'
163
-
164
- def index
165
- @cache_this = MockTime.now.to_f.to_s
166
- render :text => @cache_this
167
- end
168
-
169
- def redirected
170
- redirect_to :action => 'index'
171
- end
172
-
173
- def forbidden
174
- render :text => "Forbidden"
175
- response.status = "403 Forbidden"
176
- end
177
-
178
- def with_layout
179
- @cache_this = MockTime.now.to_f.to_s
180
- render :text => @cache_this, :layout => true
181
- end
182
-
183
- def record_not_found
184
- raise ActiveRecord::RecordNotFound, "oops!"
185
- end
186
-
187
- def four_oh_four
188
- render :text => "404'd!", :status => 404
189
- end
190
-
191
- def simple_runtime_error
192
- raise "oops!"
193
- end
194
-
195
- alias_method :show, :index
196
- alias_method :edit, :index
197
- alias_method :destroy, :index
198
- alias_method :layout_false, :with_layout
199
-
200
- def expire
201
- expire_action :controller => 'action_caching_test', :action => 'index'
202
- render :nothing => true
203
- end
204
-
205
- def expire_xml
206
- expire_action :controller => 'action_caching_test', :action => 'index', :format => 'xml'
207
- render :nothing => true
208
- end
209
- end
210
-
211
- class MockTime < Time
212
- # Let Time spicy to assure that Time.now != Time.now
213
- def to_f
214
- super+rand
215
- end
216
- end
217
-
218
- class ActionCachingMockController
219
- attr_accessor :mock_url_for
220
- attr_accessor :mock_path
221
-
222
- def initialize
223
- yield self if block_given?
224
- end
225
-
226
- def url_for(*args)
227
- @mock_url_for
228
- end
229
-
230
- def request
231
- mocked_path = @mock_path
232
- Object.new.instance_eval(<<-EVAL)
233
- def path; '#{@mock_path}' end
234
- def format; 'all' end
235
- def cache_format; nil end
236
- self
237
- EVAL
238
- end
239
- end
240
-
241
- class ActionCacheTest < ActionController::TestCase
242
- def setup
243
- reset!
244
- FileUtils.mkdir_p(FILE_STORE_PATH)
245
- @path_class = ActionController::Caching::Actions::ActionCachePath
246
- @mock_controller = ActionCachingMockController.new
247
- end
248
-
249
- def teardown
250
- FileUtils.rm_rf(File.dirname(FILE_STORE_PATH))
251
- end
252
-
253
- def test_simple_action_cache
254
- get :index
255
- cached_time = content_to_cache
256
- assert_equal cached_time, @response.body
257
- assert fragment_exist?('hostname.com/action_caching_test')
258
- reset!
259
-
260
- get :index
261
- assert_equal cached_time, @response.body
262
- end
263
-
264
- def test_simple_action_not_cached
265
- get :destroy
266
- cached_time = content_to_cache
267
- assert_equal cached_time, @response.body
268
- assert !fragment_exist?('hostname.com/action_caching_test/destroy')
269
- reset!
270
-
271
- get :destroy
272
- assert_not_equal cached_time, @response.body
273
- end
274
-
275
- def test_action_cache_with_layout
276
- get :with_layout
277
- cached_time = content_to_cache
278
- assert_not_equal cached_time, @response.body
279
- assert fragment_exist?('hostname.com/action_caching_test/with_layout')
280
- reset!
281
-
282
- get :with_layout
283
- assert_not_equal cached_time, @response.body
284
-
285
- assert_equal @response.body, read_fragment('hostname.com/action_caching_test/with_layout')
286
- end
287
-
288
- def test_action_cache_with_layout_and_layout_cache_false
289
- get :layout_false
290
- cached_time = content_to_cache
291
- assert_not_equal cached_time, @response.body
292
- assert fragment_exist?('hostname.com/action_caching_test/layout_false')
293
- reset!
294
-
295
- get :layout_false
296
- assert_not_equal cached_time, @response.body
297
-
298
- assert_equal cached_time, read_fragment('hostname.com/action_caching_test/layout_false')
299
- end
300
-
301
- def test_action_cache_conditional_options
302
- old_use_accept_header = ActionController::Base.use_accept_header
303
- ActionController::Base.use_accept_header = true
304
- @request.env['HTTP_ACCEPT'] = 'application/json'
305
- get :index
306
- assert !fragment_exist?('hostname.com/action_caching_test')
307
- ActionController::Base.use_accept_header = old_use_accept_header
308
- end
309
-
310
- def test_action_cache_with_store_options
311
- MockTime.expects(:now).returns(12345).once
312
- @controller.expects(:read_fragment).with('hostname.com/action_caching_test', :expires_in => 1.hour).once
313
- @controller.expects(:write_fragment).with('hostname.com/action_caching_test', '12345.0', :expires_in => 1.hour).once
314
- get :index
315
- end
316
-
317
- def test_action_cache_with_custom_cache_path
318
- get :show
319
- cached_time = content_to_cache
320
- assert_equal cached_time, @response.body
321
- assert fragment_exist?('test.host/custom/show')
322
- reset!
323
-
324
- get :show
325
- assert_equal cached_time, @response.body
326
- end
327
-
328
- def test_action_cache_with_custom_cache_path_in_block
329
- get :edit
330
- assert fragment_exist?('test.host/edit')
331
- reset!
332
-
333
- get :edit, :id => 1
334
- assert fragment_exist?('test.host/1;edit')
335
- end
336
-
337
- def test_cache_expiration
338
- get :index
339
- cached_time = content_to_cache
340
- reset!
341
-
342
- get :index
343
- assert_equal cached_time, @response.body
344
- reset!
345
-
346
- get :expire
347
- reset!
348
-
349
- get :index
350
- new_cached_time = content_to_cache
351
- assert_not_equal cached_time, @response.body
352
- reset!
353
-
354
- get :index
355
- assert_response :success
356
- assert_equal new_cached_time, @response.body
357
- end
358
-
359
- def test_cache_expiration_isnt_affected_by_request_format
360
- get :index
361
- cached_time = content_to_cache
362
- reset!
363
-
364
- @request.set_REQUEST_URI "/action_caching_test/expire.xml"
365
- get :expire, :format => :xml
366
- reset!
367
-
368
- get :index
369
- new_cached_time = content_to_cache
370
- assert_not_equal cached_time, @response.body
371
- end
372
-
373
- def test_cache_is_scoped_by_subdomain
374
- @request.host = 'jamis.hostname.com'
375
- get :index
376
- jamis_cache = content_to_cache
377
-
378
- reset!
379
-
380
- @request.host = 'david.hostname.com'
381
- get :index
382
- david_cache = content_to_cache
383
- assert_not_equal jamis_cache, @response.body
384
-
385
- reset!
386
-
387
- @request.host = 'jamis.hostname.com'
388
- get :index
389
- assert_equal jamis_cache, @response.body
390
-
391
- reset!
392
-
393
- @request.host = 'david.hostname.com'
394
- get :index
395
- assert_equal david_cache, @response.body
396
- end
397
-
398
- def test_redirect_is_not_cached
399
- get :redirected
400
- assert_response :redirect
401
- reset!
402
-
403
- get :redirected
404
- assert_response :redirect
405
- end
406
-
407
- def test_forbidden_is_not_cached
408
- get :forbidden
409
- assert_response :forbidden
410
- reset!
411
-
412
- get :forbidden
413
- assert_response :forbidden
414
- end
415
-
416
- def test_xml_version_of_resource_is_treated_as_different_cache
417
- with_routing do |set|
418
- set.draw do |map|
419
- map.connect ':controller/:action.:format'
420
- map.connect ':controller/:action'
421
- end
422
-
423
- get :index, :format => 'xml'
424
- cached_time = content_to_cache
425
- assert_equal cached_time, @response.body
426
- assert fragment_exist?('hostname.com/action_caching_test/index.xml')
427
- reset!
428
-
429
- get :index, :format => 'xml'
430
- assert_equal cached_time, @response.body
431
- assert_equal 'application/xml', @response.content_type
432
- reset!
433
-
434
- get :expire_xml
435
- reset!
436
-
437
- get :index, :format => 'xml'
438
- assert_not_equal cached_time, @response.body
439
- end
440
- end
441
-
442
- def test_correct_content_type_is_returned_for_cache_hit
443
- # run it twice to cache it the first time
444
- get :index, :id => 'content-type.xml'
445
- get :index, :id => 'content-type.xml'
446
- assert_equal 'application/xml', @response.content_type
447
- end
448
-
449
- def test_correct_content_type_is_returned_for_cache_hit_on_action_with_string_key
450
- # run it twice to cache it the first time
451
- get :show, :format => 'xml'
452
- get :show, :format => 'xml'
453
- assert_equal 'application/xml', @response.content_type
454
- end
455
-
456
- def test_correct_content_type_is_returned_for_cache_hit_on_action_with_string_key_from_proc
457
- # run it twice to cache it the first time
458
- get :edit, :id => 1, :format => 'xml'
459
- get :edit, :id => 1, :format => 'xml'
460
- assert_equal 'application/xml', @response.content_type
461
- end
462
-
463
- def test_empty_path_is_normalized
464
- @mock_controller.mock_url_for = 'http://example.org/'
465
- @mock_controller.mock_path = '/'
466
-
467
- assert_equal 'example.org/index', @path_class.path_for(@mock_controller, {})
468
- end
469
-
470
- def test_file_extensions
471
- get :index, :id => 'kitten.jpg'
472
- get :index, :id => 'kitten.jpg'
473
-
474
- assert_response :success
475
- end
476
-
477
- def test_record_not_found_returns_404_for_multiple_requests
478
- get :record_not_found
479
- assert_response 404
480
- get :record_not_found
481
- assert_response 404
482
- end
483
-
484
- def test_four_oh_four_returns_404_for_multiple_requests
485
- get :four_oh_four
486
- assert_response 404
487
- get :four_oh_four
488
- assert_response 404
489
- end
490
-
491
- def test_simple_runtime_error_returns_500_for_multiple_requests
492
- get :simple_runtime_error
493
- assert_response 500
494
- get :simple_runtime_error
495
- assert_response 500
496
- end
497
-
498
- private
499
- def content_to_cache
500
- assigns(:cache_this)
501
- end
502
-
503
- def reset!
504
- @request = ActionController::TestRequest.new
505
- @response = ActionController::TestResponse.new
506
- @controller = ActionCachingTestController.new
507
- @request.host = 'hostname.com'
508
- end
509
-
510
- def fragment_exist?(path)
511
- @controller.fragment_exist?(path)
512
- end
513
-
514
- def read_fragment(path)
515
- @controller.read_fragment(path)
516
- end
517
- end
518
-
519
- class FragmentCachingTestController < ActionController::Base
520
- def some_action; end;
521
- end
522
-
523
- class FragmentCachingTest < ActionController::TestCase
524
- def setup
525
- ActionController::Base.perform_caching = true
526
- @store = ActiveSupport::Cache::MemoryStore.new
527
- ActionController::Base.cache_store = @store
528
- @controller = FragmentCachingTestController.new
529
- @params = {:controller => 'posts', :action => 'index'}
530
- @request = ActionController::TestRequest.new
531
- @response = ActionController::TestResponse.new
532
- @controller.params = @params
533
- @controller.request = @request
534
- @controller.response = @response
535
- @controller.send(:initialize_current_url)
536
- @controller.send(:initialize_template_class, @response)
537
- @controller.send(:assign_shortcuts, @request, @response)
538
- end
539
-
540
- def test_fragment_cache_key
541
- assert_equal 'views/what a key', @controller.fragment_cache_key('what a key')
542
- assert_equal "views/test.host/fragment_caching_test/some_action",
543
- @controller.fragment_cache_key(:controller => 'fragment_caching_test',:action => 'some_action')
544
- end
545
-
546
- def test_read_fragment_with_caching_enabled
547
- @store.write('views/name', 'value')
548
- assert_equal 'value', @controller.read_fragment('name')
549
- end
550
-
551
- def test_read_fragment_with_caching_disabled
552
- ActionController::Base.perform_caching = false
553
- @store.write('views/name', 'value')
554
- assert_nil @controller.read_fragment('name')
555
- end
556
-
557
- def test_fragment_exist_with_caching_enabled
558
- @store.write('views/name', 'value')
559
- assert @controller.fragment_exist?('name')
560
- assert !@controller.fragment_exist?('other_name')
561
- end
562
-
563
- def test_fragment_exist_with_caching_disabled
564
- ActionController::Base.perform_caching = false
565
- @store.write('views/name', 'value')
566
- assert !@controller.fragment_exist?('name')
567
- assert !@controller.fragment_exist?('other_name')
568
- end
569
-
570
- def test_write_fragment_with_caching_enabled
571
- assert_nil @store.read('views/name')
572
- assert_equal 'value', @controller.write_fragment('name', 'value')
573
- assert_equal 'value', @store.read('views/name')
574
- end
575
-
576
- def test_write_fragment_with_caching_disabled
577
- assert_nil @store.read('views/name')
578
- ActionController::Base.perform_caching = false
579
- assert_equal 'value', @controller.write_fragment('name', 'value')
580
- assert_nil @store.read('views/name')
581
- end
582
-
583
- def test_expire_fragment_with_simple_key
584
- @store.write('views/name', 'value')
585
- @controller.expire_fragment 'name'
586
- assert_nil @store.read('views/name')
587
- end
588
-
589
- def test_expire_fragment_with_regexp
590
- @store.write('views/name', 'value')
591
- @store.write('views/another_name', 'another_value')
592
- @store.write('views/primalgrasp', 'will not expire ;-)')
593
-
594
- @controller.expire_fragment /name/
595
-
596
- assert_nil @store.read('views/name')
597
- assert_nil @store.read('views/another_name')
598
- assert_equal 'will not expire ;-)', @store.read('views/primalgrasp')
599
- end
600
-
601
- def test_fragment_for_with_disabled_caching
602
- ActionController::Base.perform_caching = false
603
-
604
- @store.write('views/expensive', 'fragment content')
605
- fragment_computed = false
606
-
607
- buffer = 'generated till now -> '.html_safe
608
- @controller.fragment_for(buffer, 'expensive') { fragment_computed = true }
609
-
610
- assert fragment_computed
611
- assert_equal 'generated till now -> ', buffer
612
- end
613
-
614
- def test_fragment_for
615
- @store.write('views/expensive', 'fragment content')
616
- fragment_computed = false
617
-
618
- buffer = 'generated till now -> '.html_safe
619
- @controller.fragment_for(buffer, 'expensive') { fragment_computed = true }
620
-
621
- assert !fragment_computed
622
- assert_equal 'generated till now -> fragment content', buffer
623
- end
624
-
625
- def test_html_safety
626
- assert_nil @store.read('views/name')
627
- content = 'value'.html_safe
628
- assert_equal content, @controller.write_fragment('name', content)
629
-
630
- cached = @store.read('views/name')
631
- assert_equal content, cached
632
- assert_equal String, cached.class
633
-
634
- html_safe = @controller.read_fragment('name')
635
- assert_equal content, html_safe
636
- assert html_safe.html_safe?
637
- end
638
- end
639
-
640
- class FunctionalCachingController < ActionController::Base
641
- def fragment_cached
642
- end
643
-
644
- def html_fragment_cached_with_partial
645
- respond_to do |format|
646
- format.html
647
- end
648
- end
649
-
650
- def js_fragment_cached_with_partial
651
- respond_to do |format|
652
- format.js
653
- end
654
- end
655
-
656
- def formatted_fragment_cached
657
- respond_to do |format|
658
- format.html
659
- format.xml
660
- format.js
661
- end
662
- end
663
-
664
- def rescue_action(e)
665
- raise e
666
- end
667
- end
668
-
669
- class FunctionalFragmentCachingTest < ActionController::TestCase
670
- def setup
671
- ActionController::Base.perform_caching = true
672
- @store = ActiveSupport::Cache::MemoryStore.new
673
- ActionController::Base.cache_store = @store
674
- @controller = FunctionalCachingController.new
675
- @request = ActionController::TestRequest.new
676
- @response = ActionController::TestResponse.new
677
- end
678
-
679
- def test_fragment_caching
680
- get :fragment_cached
681
- assert_response :success
682
- expected_body = <<-CACHED
683
- Hello
684
- This bit's fragment cached
685
- CACHED
686
- assert_equal expected_body, @response.body
687
-
688
- assert_equal "This bit's fragment cached", @store.read('views/test.host/functional_caching/fragment_cached')
689
- end
690
-
691
- def test_fragment_caching_in_partials
692
- get :html_fragment_cached_with_partial
693
- assert_response :success
694
- assert_match /Fragment caching in a partial/, @response.body
695
- assert_match "Fragment caching in a partial", @store.read('views/test.host/functional_caching/html_fragment_cached_with_partial')
696
- end
697
-
698
- def test_render_inline_before_fragment_caching
699
- get :inline_fragment_cached
700
- assert_response :success
701
- assert_match /Some inline content/, @response.body
702
- assert_match /Some cached content/, @response.body
703
- assert_match "Some cached content", @store.read('views/test.host/functional_caching/inline_fragment_cached')
704
- end
705
-
706
- def test_fragment_caching_in_rjs_partials
707
- xhr :get, :js_fragment_cached_with_partial
708
- assert_response :success
709
- assert_match /Fragment caching in a partial/, @response.body
710
- assert_match "Fragment caching in a partial", @store.read('views/test.host/functional_caching/js_fragment_cached_with_partial')
711
- end
712
-
713
- def test_html_formatted_fragment_caching
714
- get :formatted_fragment_cached, :format => "html"
715
- assert_response :success
716
- expected_body = "<body>\n<p>ERB</p>\n</body>"
717
-
718
- assert_equal expected_body, @response.body
719
-
720
- assert_equal "<p>ERB</p>", @store.read('views/test.host/functional_caching/formatted_fragment_cached')
721
- end
722
-
723
- def test_xml_formatted_fragment_caching
724
- get :formatted_fragment_cached, :format => "xml"
725
- assert_response :success
726
- expected_body = "<body>\n <p>Builder</p>\n</body>\n"
727
-
728
- assert_equal expected_body, @response.body
729
-
730
- assert_equal " <p>Builder</p>\n", @store.read('views/test.host/functional_caching/formatted_fragment_cached')
731
- end
732
-
733
- def test_js_formatted_fragment_caching
734
- get :formatted_fragment_cached, :format => "js"
735
- assert_response :success
736
- expected_body = %(title = "Hey";\n$("element_1").visualEffect("highlight");\n) +
737
- %($("element_2").visualEffect("highlight");\nfooter = "Bye";)
738
- assert_equal expected_body, @response.body
739
-
740
- assert_equal ['$("element_1").visualEffect("highlight");', '$("element_2").visualEffect("highlight");'],
741
- @store.read('views/test.host/functional_caching/formatted_fragment_cached')
742
- end
743
- end