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,32 +0,0 @@
1
- require 'abstract_unit'
2
-
3
- class DeprecatedBaseMethodsTest < ActionController::TestCase
4
- class Target < ActionController::Base
5
- def home_url(greeting)
6
- "http://example.com/#{greeting}"
7
- end
8
-
9
- def raises_name_error
10
- this_method_doesnt_exist
11
- end
12
-
13
- def rescue_action(e) raise e end
14
- end
15
-
16
- tests Target
17
-
18
- def test_log_error_silences_deprecation_warnings
19
- get :raises_name_error
20
- rescue => e
21
- assert_not_deprecated { @controller.send :log_error, e }
22
- end
23
-
24
- if defined? Test::Unit::Error
25
- def test_assertion_failed_error_silences_deprecation_warnings
26
- get :raises_name_error
27
- rescue => e
28
- error = Test::Unit::Error.new('testing ur doodz', e)
29
- assert_not_deprecated { error.message }
30
- end
31
- end
32
- end
@@ -1,144 +0,0 @@
1
- require 'abstract_unit'
2
-
3
- class DispatcherTest < Test::Unit::TestCase
4
- Dispatcher = ActionController::Dispatcher
5
- Reloader = ActionController::Reloader
6
-
7
- def setup
8
- ENV['REQUEST_METHOD'] = 'GET'
9
- reset_dispatcher
10
- Dispatcher.stubs(:require_dependency)
11
- end
12
-
13
- def teardown
14
- ENV.delete 'REQUEST_METHOD'
15
- reset_dispatcher
16
- end
17
-
18
- def test_clears_dependencies_after_dispatch_if_in_loading_mode
19
- ActiveSupport::Dependencies.expects(:clear).once
20
- # Close the response so dependencies kicks in
21
- dispatch(false).last.close
22
- end
23
-
24
- def test_reloads_routes_before_dispatch_if_in_loading_mode
25
- ActionController::Routing::Routes.expects(:reload).once
26
- dispatch(false)
27
- end
28
-
29
- def test_leaves_dependencies_after_dispatch_if_not_in_loading_mode
30
- ActionController::Routing::Routes.expects(:reload).never
31
- ActiveSupport::Dependencies.expects(:clear).never
32
-
33
- dispatch
34
- end
35
-
36
- def test_builds_middleware_stack_only_during_initialization_if_not_in_loading_mode
37
- dispatcher = create_dispatcher
38
- assert_not_nil dispatcher.instance_variable_get(:"@app")
39
- dispatcher.instance_variable_set(:"@app", lambda { |env| })
40
- dispatcher.expects(:build_middleware_stack).never
41
- dispatcher.call(nil)
42
- dispatcher.call(nil)
43
- end
44
-
45
- def test_rebuilds_middleware_stack_on_every_request_if_in_loading_mode
46
- dispatcher = create_dispatcher(false)
47
- dispatcher.instance_variable_set(:"@app", lambda { |env| })
48
- dispatcher.expects(:build_middleware_stack).twice
49
- dispatcher.call(nil)
50
- Reloader.default_lock.unlock
51
- dispatcher.call(nil)
52
- end
53
-
54
- def test_doesnt_wrap_call_in_reloader_if_not_in_loading_mode
55
- Reloader.expects(:run).never
56
- dispatch
57
- end
58
-
59
- def test_wraps_call_in_reloader_if_in_loading_mode
60
- Reloader.expects(:run).once
61
- dispatch(false)
62
- end
63
-
64
- # Stub out dispatch error logger
65
- class << Dispatcher
66
- def log_failsafe_exception(status, exception); end
67
- end
68
-
69
- def test_failsafe_response
70
- Dispatcher.any_instance.expects(:dispatch).raises('b00m')
71
- ActionController::Failsafe.any_instance.expects(:log_failsafe_exception)
72
-
73
- response = nil
74
- assert_nothing_raised do
75
- response = dispatch
76
- end
77
- assert_equal 3, response.size
78
- assert_equal 500, response[0]
79
- assert_equal({"Content-Type" => "text/html"}, response[1])
80
- assert_match /500 Internal Server Error/, response[2].join
81
- end
82
-
83
- def test_prepare_callbacks
84
- a = b = c = nil
85
- Dispatcher.to_prepare { |*args| a = b = c = 1 }
86
- Dispatcher.to_prepare { |*args| b = c = 2 }
87
- Dispatcher.to_prepare { |*args| c = 3 }
88
-
89
- # Ensure to_prepare callbacks are not run when defined
90
- assert_nil a || b || c
91
-
92
- # Run callbacks
93
- Dispatcher.run_prepare_callbacks
94
-
95
- assert_equal 1, a
96
- assert_equal 2, b
97
- assert_equal 3, c
98
-
99
- # Make sure they are only run once
100
- a = b = c = nil
101
- dispatch
102
- assert_nil a || b || c
103
- end
104
-
105
- def test_to_prepare_with_identifier_replaces
106
- a = b = nil
107
- Dispatcher.to_prepare(:unique_id) { |*args| a = b = 1 }
108
- Dispatcher.to_prepare(:unique_id) { |*args| a = 2 }
109
-
110
- Dispatcher.run_prepare_callbacks
111
- assert_equal 2, a
112
- assert_equal nil, b
113
- end
114
-
115
- private
116
- def dispatch(cache_classes = true)
117
- ActionController::Routing::RouteSet.any_instance.stubs(:call).returns([200, {}, 'response'])
118
- Dispatcher.define_dispatcher_callbacks(cache_classes)
119
- Dispatcher.new.call({'rack.input' => StringIO.new('')})
120
- end
121
-
122
- def create_dispatcher(cache_classes = true)
123
- Dispatcher.define_dispatcher_callbacks(cache_classes)
124
- Dispatcher.new
125
- end
126
-
127
- def reset_dispatcher
128
- Dispatcher.middleware = ActionController::MiddlewareStack.new do |middleware|
129
- middlewares = File.expand_path(File.join(File.dirname(__FILE__), "../../lib/action_controller/middlewares.rb"))
130
- middleware.instance_eval(File.read(middlewares))
131
- end
132
-
133
- # Clear callbacks as they are redefined by Dispatcher#define_dispatcher_callbacks
134
- Dispatcher.instance_variable_set("@prepare_dispatch_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
135
- Dispatcher.instance_variable_set("@before_dispatch_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
136
- Dispatcher.instance_variable_set("@after_dispatch_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
137
-
138
- Dispatcher.define_dispatcher_callbacks(true)
139
- end
140
-
141
- def assert_subclasses(howmany, klass, message = klass.subclasses.inspect)
142
- assert_equal howmany, klass.subclasses.size, message
143
- end
144
- end
@@ -1,53 +0,0 @@
1
- require 'abstract_unit'
2
-
3
- class DomAssertionsTest < ActionView::TestCase
4
- def setup
5
- super
6
- @html_only = '<ul><li>foo</li><li>bar</li></ul>'
7
- @html_with_meaningless_whitespace = %{
8
- <ul>
9
- <li>\tfoo </li>
10
- <li>
11
- bar
12
- </li>
13
- </ul>
14
- }
15
- @more_html_with_meaningless_whitespace = %{<ul>
16
-
17
- <li>foo</li>
18
-
19
- <li>bar</li></ul>}
20
- end
21
-
22
- test "assert_dom_equal strips meaningless whitespace from expected string" do
23
- assert_dom_equal @html_with_meaningless_whitespace, @html_only
24
- end
25
-
26
- test "assert_dom_equal strips meaningless whitespace from actual string" do
27
- assert_dom_equal @html_only, @html_with_meaningless_whitespace
28
- end
29
-
30
- test "assert_dom_equal strips meaningless whitespace from both expected and actual strings" do
31
- assert_dom_equal @more_html_with_meaningless_whitespace, @html_with_meaningless_whitespace
32
- end
33
-
34
- test "assert_dom_not_equal strips meaningless whitespace from expected string" do
35
- assert_assertion_fails { assert_dom_not_equal @html_with_meaningless_whitespace, @html_only }
36
- end
37
-
38
- test "assert_dom_not_equal strips meaningless whitespace from actual string" do
39
- assert_assertion_fails { assert_dom_not_equal @html_only, @html_with_meaningless_whitespace }
40
- end
41
-
42
- test "assert_dom_not_equal strips meaningless whitespace from both expected and actual strings" do
43
- assert_assertion_fails do
44
- assert_dom_not_equal @more_html_with_meaningless_whitespace, @html_with_meaningless_whitespace
45
- end
46
- end
47
-
48
- private
49
-
50
- def assert_assertion_fails
51
- assert_raise(ActiveSupport::TestCase::Assertion) { yield }
52
- end
53
- end
@@ -1,60 +0,0 @@
1
- require 'abstract_unit'
2
- require 'stringio'
3
- require 'logger'
4
-
5
- class FailsafeTest < ActionController::TestCase
6
- FIXTURE_PUBLIC = "#{File.dirname(__FILE__)}/../fixtures/failsafe".freeze
7
-
8
- def setup
9
- @old_error_file_path = ActionController::Failsafe.error_file_path
10
- ActionController::Failsafe.error_file_path = FIXTURE_PUBLIC
11
- @app = mock
12
- @log_io = StringIO.new
13
- @logger = Logger.new(@log_io)
14
- @failsafe = ActionController::Failsafe.new(@app)
15
- @failsafe.stubs(:failsafe_logger).returns(@logger)
16
- end
17
-
18
- def teardown
19
- ActionController::Failsafe.error_file_path = @old_error_file_path
20
- end
21
-
22
- def app_will_raise_error!
23
- @app.expects(:call).then.raises(RuntimeError.new("Printer on fire"))
24
- end
25
-
26
- def test_calls_app_and_returns_its_return_value
27
- @app.expects(:call).returns([200, { "Content-Type" => "text/html" }, "ok"])
28
- assert_equal [200, { "Content-Type" => "text/html" }, "ok"], @failsafe.call({})
29
- end
30
-
31
- def test_writes_to_log_file_on_exception
32
- app_will_raise_error!
33
- @failsafe.call({})
34
- assert_match /Printer on fire/, @log_io.string # Logs exception message.
35
- assert_match /failsafe_test\.rb/, @log_io.string # Logs backtrace.
36
- end
37
-
38
- def test_returns_500_internal_server_error_on_exception
39
- app_will_raise_error!
40
- response = @failsafe.call({})
41
- assert_equal 3, response.size # It is a valid Rack response.
42
- assert_equal 500, response[0] # Status is 500.
43
- end
44
-
45
- def test_renders_error_page_file_with_erb
46
- app_will_raise_error!
47
- response = @failsafe.call({})
48
- assert_equal 500, response[0]
49
- assert_equal "hello my world", response[2].join
50
- end
51
-
52
- def test_returns_a_default_message_if_erb_rendering_failed
53
- app_will_raise_error!
54
- @failsafe.expects(:render_template).raises(RuntimeError.new("Harddisk is crashing"))
55
- response = @failsafe.call({})
56
- assert_equal 500, response[0]
57
- assert_match /500 Internal Server Error/, response[2].join
58
- assert_match %r(please read this web application's log file), response[2].join
59
- end
60
- end
@@ -1,33 +0,0 @@
1
- class << Object; alias_method :const_available?, :const_defined?; end
2
-
3
- class ContentController < Class.new(ActionController::Base)
4
- end
5
- class NotAController
6
- end
7
- module Admin
8
- class << self; alias_method :const_available?, :const_defined?; end
9
- class UserController < Class.new(ActionController::Base); end
10
- class NewsFeedController < Class.new(ActionController::Base); end
11
- end
12
-
13
- # For speed test
14
- class SpeedController < ActionController::Base; end
15
- class SearchController < SpeedController; end
16
- class VideosController < SpeedController; end
17
- class VideoFileController < SpeedController; end
18
- class VideoSharesController < SpeedController; end
19
- class VideoAbusesController < SpeedController; end
20
- class VideoUploadsController < SpeedController; end
21
- class VideoVisitsController < SpeedController; end
22
- class UsersController < SpeedController; end
23
- class SettingsController < SpeedController; end
24
- class ChannelsController < SpeedController; end
25
- class ChannelVideosController < SpeedController; end
26
- class SessionsController < SpeedController; end
27
- class LostPasswordsController < SpeedController; end
28
- class PagesController < SpeedController; end
29
-
30
- ActionController::Routing::Routes.draw do |map|
31
- map.route_one 'route_one', :controller => 'elsewhere', :action => 'flash_me'
32
- map.connect ':controller/:action/:id'
33
- end
@@ -1,19 +0,0 @@
1
- class Customer < Struct.new(:name, :id)
2
- def to_param
3
- id.to_s
4
- end
5
- end
6
-
7
- class BadCustomer < Customer
8
- end
9
-
10
- class GoodCustomer < Customer
11
- end
12
-
13
- module Quiz
14
- class Question < Struct.new(:name, :id)
15
- def to_param
16
- id.to_s
17
- end
18
- end
19
- end
@@ -1,52 +0,0 @@
1
- require 'abstract_unit'
2
-
3
- class FilterParamController < ActionController::Base
4
- end
5
-
6
- class FilterParamTest < Test::Unit::TestCase
7
- def setup
8
- @controller = FilterParamController.new
9
- end
10
-
11
- def test_filter_parameters
12
- assert FilterParamController.respond_to?(:filter_parameter_logging)
13
- assert !@controller.respond_to?(:filter_parameters)
14
-
15
- FilterParamController.filter_parameter_logging
16
- assert @controller.respond_to?(:filter_parameters)
17
-
18
- test_hashes = [[{},{},[]],
19
- [{'foo'=>nil},{'foo'=>nil},[]],
20
- [{'foo'=>'bar'},{'foo'=>'bar'},[]],
21
- [{'foo'=>1},{'foo'=>1},[]],
22
- [{'foo'=>'bar'},{'foo'=>'bar'},%w'food'],
23
- [{'foo'=>'bar'},{'foo'=>'[FILTERED]'},%w'foo'],
24
- [{'foo'=>'bar', 'bar'=>'foo'},{'foo'=>'[FILTERED]', 'bar'=>'foo'},%w'foo baz'],
25
- [{'foo'=>'bar', 'baz'=>'foo'},{'foo'=>'[FILTERED]', 'baz'=>'[FILTERED]'},%w'foo baz'],
26
- [{'bar'=>{'foo'=>'bar','bar'=>'foo'}},{'bar'=>{'foo'=>'[FILTERED]','bar'=>'foo'}},%w'fo'],
27
- [{'foo'=>{'foo'=>'bar','bar'=>'foo'}},{'foo'=>'[FILTERED]'},%w'f banana'],
28
- [{'baz'=>[{'foo'=>'baz'}]}, {'baz'=>[{'foo'=>'[FILTERED]'}]}, %w(foo)],
29
- [{'baz'=>[{'foo'=>'baz'}, 1, 2, 3]}, {'baz'=>[{'foo'=>'[FILTERED]'}, 1, 2, 3]}, %w(foo)]]
30
-
31
- test_hashes.each do |before_filter, after_filter, filter_words|
32
- FilterParamController.filter_parameter_logging(*filter_words)
33
- assert_equal after_filter, @controller.__send__(:filter_parameters, before_filter)
34
-
35
- filter_words.push('blah')
36
- FilterParamController.filter_parameter_logging(*filter_words) do |key, value|
37
- value.reverse! if key =~ /bargain/
38
- end
39
-
40
- before_filter['barg'] = {'bargain'=>'gain', 'blah'=>'bar', 'bar'=>{'bargain'=>{'blah'=>'foo'}}}
41
- after_filter['barg'] = {'bargain'=>'niag', 'blah'=>'[FILTERED]', 'bar'=>{'bargain'=>{'blah'=>'[FILTERED]'}}}
42
-
43
- assert_equal after_filter, @controller.__send__(:filter_parameters, before_filter)
44
- end
45
- end
46
-
47
- def test_filter_parameters_is_protected
48
- FilterParamController.filter_parameter_logging(:foo)
49
- assert !FilterParamController.action_methods.include?('filter_parameters')
50
- assert_raise(NoMethodError) { @controller.filter_parameters([{'password' => '[FILTERED]'}]) }
51
- end
52
- end
@@ -1,885 +0,0 @@
1
- require 'abstract_unit'
2
-
3
- # FIXME: crashes Ruby 1.9
4
- class FilterTest < Test::Unit::TestCase
5
- class TestController < ActionController::Base
6
- before_filter :ensure_login
7
- after_filter :clean_up
8
-
9
- def show
10
- render :inline => "ran action"
11
- end
12
-
13
- private
14
- def ensure_login
15
- @ran_filter ||= []
16
- @ran_filter << "ensure_login"
17
- end
18
-
19
- def clean_up
20
- @ran_after_filter ||= []
21
- @ran_after_filter << "clean_up"
22
- end
23
- end
24
-
25
- class ChangingTheRequirementsController < TestController
26
- before_filter :ensure_login, :except => [:go_wild]
27
-
28
- def go_wild
29
- render :text => "gobble"
30
- end
31
- end
32
-
33
- class TestMultipleFiltersController < ActionController::Base
34
- before_filter :try_1
35
- before_filter :try_2
36
- before_filter :try_3
37
-
38
- (1..3).each do |i|
39
- define_method "fail_#{i}" do
40
- render :text => i.to_s
41
- end
42
- end
43
-
44
- protected
45
- (1..3).each do |i|
46
- define_method "try_#{i}" do
47
- instance_variable_set :@try, i
48
- if action_name == "fail_#{i}"
49
- head(404)
50
- end
51
- end
52
- end
53
- end
54
-
55
- class RenderingController < ActionController::Base
56
- before_filter :render_something_else
57
-
58
- def show
59
- @ran_action = true
60
- render :inline => "ran action"
61
- end
62
-
63
- private
64
- def render_something_else
65
- render :inline => "something else"
66
- end
67
- end
68
-
69
- class ConditionalFilterController < ActionController::Base
70
- def show
71
- render :inline => "ran action"
72
- end
73
-
74
- def another_action
75
- render :inline => "ran action"
76
- end
77
-
78
- def show_without_filter
79
- render :inline => "ran action without filter"
80
- end
81
-
82
- private
83
- def ensure_login
84
- @ran_filter ||= []
85
- @ran_filter << "ensure_login"
86
- end
87
-
88
- def clean_up_tmp
89
- @ran_filter ||= []
90
- @ran_filter << "clean_up_tmp"
91
- end
92
-
93
- def rescue_action(e) raise(e) end
94
- end
95
-
96
- class ConditionalCollectionFilterController < ConditionalFilterController
97
- before_filter :ensure_login, :except => [ :show_without_filter, :another_action ]
98
- end
99
-
100
- class OnlyConditionSymController < ConditionalFilterController
101
- before_filter :ensure_login, :only => :show
102
- end
103
-
104
- class ExceptConditionSymController < ConditionalFilterController
105
- before_filter :ensure_login, :except => :show_without_filter
106
- end
107
-
108
- class BeforeAndAfterConditionController < ConditionalFilterController
109
- before_filter :ensure_login, :only => :show
110
- after_filter :clean_up_tmp, :only => :show
111
- end
112
-
113
- class OnlyConditionProcController < ConditionalFilterController
114
- before_filter(:only => :show) {|c| c.instance_variable_set(:"@ran_proc_filter", true) }
115
- end
116
-
117
- class ExceptConditionProcController < ConditionalFilterController
118
- before_filter(:except => :show_without_filter) {|c| c.instance_variable_set(:"@ran_proc_filter", true) }
119
- end
120
-
121
- class ConditionalClassFilter
122
- def self.filter(controller) controller.instance_variable_set(:"@ran_class_filter", true) end
123
- end
124
-
125
- class OnlyConditionClassController < ConditionalFilterController
126
- before_filter ConditionalClassFilter, :only => :show
127
- end
128
-
129
- class ExceptConditionClassController < ConditionalFilterController
130
- before_filter ConditionalClassFilter, :except => :show_without_filter
131
- end
132
-
133
- class AnomolousYetValidConditionController < ConditionalFilterController
134
- before_filter(ConditionalClassFilter, :ensure_login, Proc.new {|c| c.instance_variable_set(:"@ran_proc_filter1", true)}, :except => :show_without_filter) { |c| c.instance_variable_set(:"@ran_proc_filter2", true)}
135
- end
136
-
137
- class ConditionalOptionsFilter < ConditionalFilterController
138
- before_filter :ensure_login, :if => Proc.new { |c| true }
139
- before_filter :clean_up_tmp, :if => Proc.new { |c| false }
140
- end
141
-
142
- class EmptyFilterChainController < TestController
143
- self.filter_chain.clear
144
- def show
145
- @action_executed = true
146
- render :text => "yawp!"
147
- end
148
- end
149
-
150
- class PrependingController < TestController
151
- prepend_before_filter :wonderful_life
152
- # skip_before_filter :fire_flash
153
-
154
- private
155
- def wonderful_life
156
- @ran_filter ||= []
157
- @ran_filter << "wonderful_life"
158
- end
159
- end
160
-
161
- class SkippingAndLimitedController < TestController
162
- skip_before_filter :ensure_login
163
- before_filter :ensure_login, :only => :index
164
-
165
- def index
166
- render :text => 'ok'
167
- end
168
-
169
- def public
170
- end
171
- end
172
-
173
- class SkippingAndReorderingController < TestController
174
- skip_before_filter :ensure_login
175
- before_filter :find_record
176
- before_filter :ensure_login
177
-
178
- private
179
- def find_record
180
- @ran_filter ||= []
181
- @ran_filter << "find_record"
182
- end
183
- end
184
-
185
- class ConditionalSkippingController < TestController
186
- skip_before_filter :ensure_login, :only => [ :login ]
187
- skip_after_filter :clean_up, :only => [ :login ]
188
-
189
- before_filter :find_user, :only => [ :change_password ]
190
-
191
- def login
192
- render :inline => "ran action"
193
- end
194
-
195
- def change_password
196
- render :inline => "ran action"
197
- end
198
-
199
- protected
200
- def find_user
201
- @ran_filter ||= []
202
- @ran_filter << "find_user"
203
- end
204
- end
205
-
206
- class ConditionalParentOfConditionalSkippingController < ConditionalFilterController
207
- before_filter :conditional_in_parent, :only => [:show, :another_action]
208
- after_filter :conditional_in_parent, :only => [:show, :another_action]
209
-
210
- private
211
-
212
- def conditional_in_parent
213
- @ran_filter ||= []
214
- @ran_filter << 'conditional_in_parent'
215
- end
216
- end
217
-
218
- class ChildOfConditionalParentController < ConditionalParentOfConditionalSkippingController
219
- skip_before_filter :conditional_in_parent, :only => :another_action
220
- skip_after_filter :conditional_in_parent, :only => :another_action
221
- end
222
-
223
- class AnotherChildOfConditionalParentController < ConditionalParentOfConditionalSkippingController
224
- skip_before_filter :conditional_in_parent, :only => :show
225
- end
226
-
227
- class ProcController < PrependingController
228
- before_filter(proc { |c| c.instance_variable_set(:"@ran_proc_filter", true) })
229
- end
230
-
231
- class ImplicitProcController < PrependingController
232
- before_filter { |c| c.instance_variable_set(:"@ran_proc_filter", true) }
233
- end
234
-
235
- class AuditFilter
236
- def self.filter(controller)
237
- controller.instance_variable_set(:"@was_audited", true)
238
- end
239
- end
240
-
241
- class AroundFilter
242
- def before(controller)
243
- @execution_log = "before"
244
- controller.class.execution_log << " before aroundfilter " if controller.respond_to? :execution_log
245
- controller.instance_variable_set(:"@before_ran", true)
246
- end
247
-
248
- def after(controller)
249
- controller.instance_variable_set(:"@execution_log", @execution_log + " and after")
250
- controller.instance_variable_set(:"@after_ran", true)
251
- controller.class.execution_log << " after aroundfilter " if controller.respond_to? :execution_log
252
- end
253
- end
254
-
255
- class AppendedAroundFilter
256
- def before(controller)
257
- controller.class.execution_log << " before appended aroundfilter "
258
- end
259
-
260
- def after(controller)
261
- controller.class.execution_log << " after appended aroundfilter "
262
- end
263
- end
264
-
265
- class AuditController < ActionController::Base
266
- before_filter(AuditFilter)
267
-
268
- def show
269
- render :text => "hello"
270
- end
271
- end
272
-
273
- class AroundFilterController < PrependingController
274
- around_filter AroundFilter.new
275
- end
276
-
277
- class BeforeAfterClassFilterController < PrependingController
278
- begin
279
- filter = AroundFilter.new
280
- before_filter filter
281
- after_filter filter
282
- end
283
- end
284
-
285
- class MixedFilterController < PrependingController
286
- cattr_accessor :execution_log
287
-
288
- def initialize
289
- @@execution_log = ""
290
- end
291
-
292
- before_filter { |c| c.class.execution_log << " before procfilter " }
293
- prepend_around_filter AroundFilter.new
294
-
295
- after_filter { |c| c.class.execution_log << " after procfilter " }
296
- append_around_filter AppendedAroundFilter.new
297
- end
298
-
299
- class MixedSpecializationController < ActionController::Base
300
- class OutOfOrder < StandardError; end
301
-
302
- before_filter :first
303
- before_filter :second, :only => :foo
304
-
305
- def foo
306
- render :text => 'foo'
307
- end
308
-
309
- def bar
310
- render :text => 'bar'
311
- end
312
-
313
- protected
314
- def first
315
- @first = true
316
- end
317
-
318
- def second
319
- raise OutOfOrder unless @first
320
- end
321
- end
322
-
323
- class DynamicDispatchController < ActionController::Base
324
- before_filter :choose
325
-
326
- %w(foo bar baz).each do |action|
327
- define_method(action) { render :text => action }
328
- end
329
-
330
- private
331
- def choose
332
- self.action_name = params[:choose]
333
- end
334
- end
335
-
336
- class PrependingBeforeAndAfterController < ActionController::Base
337
- prepend_before_filter :before_all
338
- prepend_after_filter :after_all
339
- before_filter :between_before_all_and_after_all
340
-
341
- def before_all
342
- @ran_filter ||= []
343
- @ran_filter << 'before_all'
344
- end
345
-
346
- def after_all
347
- @ran_filter ||= []
348
- @ran_filter << 'after_all'
349
- end
350
-
351
- def between_before_all_and_after_all
352
- @ran_filter ||= []
353
- @ran_filter << 'between_before_all_and_after_all'
354
- end
355
- def show
356
- render :text => 'hello'
357
- end
358
- end
359
-
360
- class ErrorToRescue < Exception; end
361
-
362
- class RescuingAroundFilterWithBlock
363
- def filter(controller)
364
- begin
365
- yield
366
- rescue ErrorToRescue => ex
367
- controller.__send__ :render, :text => "I rescued this: #{ex.inspect}"
368
- end
369
- end
370
- end
371
-
372
- class RescuedController < ActionController::Base
373
- around_filter RescuingAroundFilterWithBlock.new
374
-
375
- def show
376
- raise ErrorToRescue.new("Something made the bad noise.")
377
- end
378
-
379
- private
380
- def rescue_action(exception)
381
- raise exception
382
- end
383
- end
384
-
385
- class NonYieldingAroundFilterController < ActionController::Base
386
-
387
- before_filter :filter_one
388
- around_filter :non_yielding_filter
389
- before_filter :filter_two
390
- after_filter :filter_three
391
-
392
- def index
393
- render :inline => "index"
394
- end
395
-
396
- #make sure the controller complains
397
- def rescue_action(e); raise e; end
398
-
399
- private
400
-
401
- def filter_one
402
- @filters ||= []
403
- @filters << "filter_one"
404
- end
405
-
406
- def filter_two
407
- @filters << "filter_two"
408
- end
409
-
410
- def non_yielding_filter
411
- @filters << "zomg it didn't yield"
412
- @filter_return_value
413
- end
414
-
415
- def filter_three
416
- @filters << "filter_three"
417
- end
418
-
419
- end
420
-
421
- def test_non_yielding_around_filters_not_returning_false_do_not_raise
422
- controller = NonYieldingAroundFilterController.new
423
- controller.instance_variable_set "@filter_return_value", true
424
- assert_nothing_raised do
425
- test_process(controller, "index")
426
- end
427
- end
428
-
429
- def test_non_yielding_around_filters_returning_false_do_not_raise
430
- controller = NonYieldingAroundFilterController.new
431
- controller.instance_variable_set "@filter_return_value", false
432
- assert_nothing_raised do
433
- test_process(controller, "index")
434
- end
435
- end
436
-
437
- def test_after_filters_are_not_run_if_around_filter_returns_false
438
- controller = NonYieldingAroundFilterController.new
439
- controller.instance_variable_set "@filter_return_value", false
440
- test_process(controller, "index")
441
- assert_equal ["filter_one", "zomg it didn't yield"], controller.assigns['filters']
442
- end
443
-
444
- def test_after_filters_are_not_run_if_around_filter_does_not_yield
445
- controller = NonYieldingAroundFilterController.new
446
- controller.instance_variable_set "@filter_return_value", true
447
- test_process(controller, "index")
448
- assert_equal ["filter_one", "zomg it didn't yield"], controller.assigns['filters']
449
- end
450
-
451
- def test_empty_filter_chain
452
- assert_equal 0, EmptyFilterChainController.filter_chain.size
453
- assert test_process(EmptyFilterChainController).template.assigns['action_executed']
454
- end
455
-
456
- def test_added_filter_to_inheritance_graph
457
- assert_equal [ :ensure_login ], TestController.before_filters
458
- end
459
-
460
- def test_base_class_in_isolation
461
- assert_equal [ ], ActionController::Base.before_filters
462
- end
463
-
464
- def test_prepending_filter
465
- assert_equal [ :wonderful_life, :ensure_login ], PrependingController.before_filters
466
- end
467
-
468
- def test_running_filters
469
- assert_equal %w( wonderful_life ensure_login ), test_process(PrependingController).template.assigns["ran_filter"]
470
- end
471
-
472
- def test_running_filters_with_proc
473
- assert test_process(ProcController).template.assigns["ran_proc_filter"]
474
- end
475
-
476
- def test_running_filters_with_implicit_proc
477
- assert test_process(ImplicitProcController).template.assigns["ran_proc_filter"]
478
- end
479
-
480
- def test_running_filters_with_class
481
- assert test_process(AuditController).template.assigns["was_audited"]
482
- end
483
-
484
- def test_running_anomolous_yet_valid_condition_filters
485
- response = test_process(AnomolousYetValidConditionController)
486
- assert_equal %w( ensure_login ), response.template.assigns["ran_filter"]
487
- assert response.template.assigns["ran_class_filter"]
488
- assert response.template.assigns["ran_proc_filter1"]
489
- assert response.template.assigns["ran_proc_filter2"]
490
-
491
- response = test_process(AnomolousYetValidConditionController, "show_without_filter")
492
- assert_equal nil, response.template.assigns["ran_filter"]
493
- assert !response.template.assigns["ran_class_filter"]
494
- assert !response.template.assigns["ran_proc_filter1"]
495
- assert !response.template.assigns["ran_proc_filter2"]
496
- end
497
-
498
- def test_running_conditional_options
499
- response = test_process(ConditionalOptionsFilter)
500
- assert_equal %w( ensure_login ), response.template.assigns["ran_filter"]
501
- end
502
-
503
- def test_running_collection_condition_filters
504
- assert_equal %w( ensure_login ), test_process(ConditionalCollectionFilterController).template.assigns["ran_filter"]
505
- assert_equal nil, test_process(ConditionalCollectionFilterController, "show_without_filter").template.assigns["ran_filter"]
506
- assert_equal nil, test_process(ConditionalCollectionFilterController, "another_action").template.assigns["ran_filter"]
507
- end
508
-
509
- def test_running_only_condition_filters
510
- assert_equal %w( ensure_login ), test_process(OnlyConditionSymController).template.assigns["ran_filter"]
511
- assert_equal nil, test_process(OnlyConditionSymController, "show_without_filter").template.assigns["ran_filter"]
512
-
513
- assert test_process(OnlyConditionProcController).template.assigns["ran_proc_filter"]
514
- assert !test_process(OnlyConditionProcController, "show_without_filter").template.assigns["ran_proc_filter"]
515
-
516
- assert test_process(OnlyConditionClassController).template.assigns["ran_class_filter"]
517
- assert !test_process(OnlyConditionClassController, "show_without_filter").template.assigns["ran_class_filter"]
518
- end
519
-
520
- def test_running_except_condition_filters
521
- assert_equal %w( ensure_login ), test_process(ExceptConditionSymController).template.assigns["ran_filter"]
522
- assert_equal nil, test_process(ExceptConditionSymController, "show_without_filter").template.assigns["ran_filter"]
523
-
524
- assert test_process(ExceptConditionProcController).template.assigns["ran_proc_filter"]
525
- assert !test_process(ExceptConditionProcController, "show_without_filter").template.assigns["ran_proc_filter"]
526
-
527
- assert test_process(ExceptConditionClassController).template.assigns["ran_class_filter"]
528
- assert !test_process(ExceptConditionClassController, "show_without_filter").template.assigns["ran_class_filter"]
529
- end
530
-
531
- def test_running_before_and_after_condition_filters
532
- assert_equal %w( ensure_login clean_up_tmp), test_process(BeforeAndAfterConditionController).template.assigns["ran_filter"]
533
- assert_equal nil, test_process(BeforeAndAfterConditionController, "show_without_filter").template.assigns["ran_filter"]
534
- end
535
-
536
- def test_around_filter
537
- controller = test_process(AroundFilterController)
538
- assert controller.template.assigns["before_ran"]
539
- assert controller.template.assigns["after_ran"]
540
- end
541
-
542
- def test_before_after_class_filter
543
- controller = test_process(BeforeAfterClassFilterController)
544
- assert controller.template.assigns["before_ran"]
545
- assert controller.template.assigns["after_ran"]
546
- end
547
-
548
- def test_having_properties_in_around_filter
549
- controller = test_process(AroundFilterController)
550
- assert_equal "before and after", controller.template.assigns["execution_log"]
551
- end
552
-
553
- def test_prepending_and_appending_around_filter
554
- controller = test_process(MixedFilterController)
555
- assert_equal " before aroundfilter before procfilter before appended aroundfilter " +
556
- " after appended aroundfilter after aroundfilter after procfilter ",
557
- MixedFilterController.execution_log
558
- end
559
-
560
- def test_rendering_breaks_filtering_chain
561
- response = test_process(RenderingController)
562
- assert_equal "something else", response.body
563
- assert !response.template.assigns["ran_action"]
564
- end
565
-
566
- def test_filters_with_mixed_specialization_run_in_order
567
- assert_nothing_raised do
568
- response = test_process(MixedSpecializationController, 'bar')
569
- assert_equal 'bar', response.body
570
- end
571
-
572
- assert_nothing_raised do
573
- response = test_process(MixedSpecializationController, 'foo')
574
- assert_equal 'foo', response.body
575
- end
576
- end
577
-
578
- def test_dynamic_dispatch
579
- %w(foo bar baz).each do |action|
580
- request = ActionController::TestRequest.new
581
- request.query_parameters[:choose] = action
582
- response = DynamicDispatchController.process(request, ActionController::TestResponse.new)
583
- assert_equal action, response.body
584
- end
585
- end
586
-
587
- def test_running_prepended_before_and_after_filter
588
- assert_equal 3, PrependingBeforeAndAfterController.filter_chain.length
589
- response = test_process(PrependingBeforeAndAfterController)
590
- assert_equal %w( before_all between_before_all_and_after_all after_all ), response.template.assigns["ran_filter"]
591
- end
592
-
593
- def test_skipping_and_limiting_controller
594
- assert_equal %w( ensure_login ), test_process(SkippingAndLimitedController, "index").template.assigns["ran_filter"]
595
- assert_nil test_process(SkippingAndLimitedController, "public").template.assigns["ran_filter"]
596
- end
597
-
598
- def test_skipping_and_reordering_controller
599
- assert_equal %w( find_record ensure_login ), test_process(SkippingAndReorderingController, "index").template.assigns["ran_filter"]
600
- end
601
-
602
- def test_conditional_skipping_of_filters
603
- assert_nil test_process(ConditionalSkippingController, "login").template.assigns["ran_filter"]
604
- assert_equal %w( ensure_login find_user ), test_process(ConditionalSkippingController, "change_password").template.assigns["ran_filter"]
605
-
606
- assert_nil test_process(ConditionalSkippingController, "login").template.controller.instance_variable_get("@ran_after_filter")
607
- assert_equal %w( clean_up ), test_process(ConditionalSkippingController, "change_password").template.controller.instance_variable_get("@ran_after_filter")
608
- end
609
-
610
- def test_conditional_skipping_of_filters_when_parent_filter_is_also_conditional
611
- assert_equal %w( conditional_in_parent conditional_in_parent ), test_process(ChildOfConditionalParentController).template.assigns['ran_filter']
612
- assert_nil test_process(ChildOfConditionalParentController, 'another_action').template.assigns['ran_filter']
613
- end
614
-
615
- def test_condition_skipping_of_filters_when_siblings_also_have_conditions
616
- assert_equal %w( conditional_in_parent conditional_in_parent ), test_process(ChildOfConditionalParentController).template.assigns['ran_filter'], "1"
617
- assert_equal nil, test_process(AnotherChildOfConditionalParentController).template.assigns['ran_filter']
618
- assert_equal %w( conditional_in_parent conditional_in_parent ), test_process(ChildOfConditionalParentController).template.assigns['ran_filter']
619
- end
620
-
621
- def test_changing_the_requirements
622
- assert_equal nil, test_process(ChangingTheRequirementsController, "go_wild").template.assigns['ran_filter']
623
- end
624
-
625
- def test_a_rescuing_around_filter
626
- response = nil
627
- assert_nothing_raised do
628
- response = test_process(RescuedController)
629
- end
630
-
631
- assert response.success?
632
- assert_equal("I rescued this: #<FilterTest::ErrorToRescue: Something made the bad noise.>", response.body)
633
- end
634
-
635
- private
636
- def test_process(controller, action = "show")
637
- ActionController::Base.class_eval { include ActionController::ProcessWithTest } unless ActionController::Base < ActionController::ProcessWithTest
638
- request = ActionController::TestRequest.new
639
- request.action = action
640
- controller = controller.new if controller.is_a?(Class)
641
- controller.process_with_test(request, ActionController::TestResponse.new)
642
- end
643
- end
644
-
645
-
646
-
647
- class PostsController < ActionController::Base
648
- def rescue_action(e); raise e; end
649
-
650
- module AroundExceptions
651
- class Error < StandardError ; end
652
- class Before < Error ; end
653
- class After < Error ; end
654
- end
655
- include AroundExceptions
656
-
657
- class DefaultFilter
658
- include AroundExceptions
659
- end
660
-
661
- module_eval %w(raises_before raises_after raises_both no_raise no_filter).map { |action| "def #{action}; default_action end" }.join("\n")
662
-
663
- private
664
- def default_action
665
- render :inline => "#{action_name} called"
666
- end
667
- end
668
-
669
- class ControllerWithSymbolAsFilter < PostsController
670
- around_filter :raise_before, :only => :raises_before
671
- around_filter :raise_after, :only => :raises_after
672
- around_filter :without_exception, :only => :no_raise
673
-
674
- private
675
- def raise_before
676
- raise Before
677
- yield
678
- end
679
-
680
- def raise_after
681
- yield
682
- raise After
683
- end
684
-
685
- def without_exception
686
- # Do stuff...
687
- 1 + 1
688
-
689
- yield
690
-
691
- # Do stuff...
692
- 1 + 1
693
- end
694
- end
695
-
696
- class ControllerWithFilterClass < PostsController
697
- class YieldingFilter < DefaultFilter
698
- def self.filter(controller)
699
- yield
700
- raise After
701
- end
702
- end
703
-
704
- around_filter YieldingFilter, :only => :raises_after
705
- end
706
-
707
- class ControllerWithFilterInstance < PostsController
708
- class YieldingFilter < DefaultFilter
709
- def filter(controller)
710
- yield
711
- raise After
712
- end
713
- end
714
-
715
- around_filter YieldingFilter.new, :only => :raises_after
716
- end
717
-
718
- class ControllerWithFilterMethod < PostsController
719
- class YieldingFilter < DefaultFilter
720
- def filter(controller)
721
- yield
722
- raise After
723
- end
724
- end
725
-
726
- around_filter YieldingFilter.new.method(:filter), :only => :raises_after
727
- end
728
-
729
- class ControllerWithProcFilter < PostsController
730
- around_filter(:only => :no_raise) do |c,b|
731
- c.instance_variable_set(:"@before", true)
732
- b.call
733
- c.instance_variable_set(:"@after", true)
734
- end
735
- end
736
-
737
- class ControllerWithNestedFilters < ControllerWithSymbolAsFilter
738
- around_filter :raise_before, :raise_after, :without_exception, :only => :raises_both
739
- end
740
-
741
- class ControllerWithAllTypesOfFilters < PostsController
742
- before_filter :before
743
- around_filter :around
744
- after_filter :after
745
- around_filter :around_again
746
-
747
- private
748
- def before
749
- @ran_filter ||= []
750
- @ran_filter << 'before'
751
- end
752
-
753
- def around
754
- @ran_filter << 'around (before yield)'
755
- yield
756
- @ran_filter << 'around (after yield)'
757
- end
758
-
759
- def after
760
- @ran_filter << 'after'
761
- end
762
-
763
- def around_again
764
- @ran_filter << 'around_again (before yield)'
765
- yield
766
- @ran_filter << 'around_again (after yield)'
767
- end
768
- end
769
-
770
- class ControllerWithTwoLessFilters < ControllerWithAllTypesOfFilters
771
- skip_filter :around_again
772
- skip_filter :after
773
- end
774
-
775
- class YieldingAroundFiltersTest < Test::Unit::TestCase
776
- include PostsController::AroundExceptions
777
-
778
- def test_filters_registering
779
- assert_equal 1, ControllerWithFilterMethod.filter_chain.size
780
- assert_equal 1, ControllerWithFilterClass.filter_chain.size
781
- assert_equal 1, ControllerWithFilterInstance.filter_chain.size
782
- assert_equal 3, ControllerWithSymbolAsFilter.filter_chain.size
783
- assert_equal 6, ControllerWithNestedFilters.filter_chain.size
784
- assert_equal 4, ControllerWithAllTypesOfFilters.filter_chain.size
785
- end
786
-
787
- def test_base
788
- controller = PostsController
789
- assert_nothing_raised { test_process(controller,'no_raise') }
790
- assert_nothing_raised { test_process(controller,'raises_before') }
791
- assert_nothing_raised { test_process(controller,'raises_after') }
792
- assert_nothing_raised { test_process(controller,'no_filter') }
793
- end
794
-
795
- def test_with_symbol
796
- controller = ControllerWithSymbolAsFilter
797
- assert_nothing_raised { test_process(controller,'no_raise') }
798
- assert_raise(Before) { test_process(controller,'raises_before') }
799
- assert_raise(After) { test_process(controller,'raises_after') }
800
- assert_nothing_raised { test_process(controller,'no_raise') }
801
- end
802
-
803
- def test_with_class
804
- controller = ControllerWithFilterClass
805
- assert_nothing_raised { test_process(controller,'no_raise') }
806
- assert_raise(After) { test_process(controller,'raises_after') }
807
- end
808
-
809
- def test_with_instance
810
- controller = ControllerWithFilterInstance
811
- assert_nothing_raised { test_process(controller,'no_raise') }
812
- assert_raise(After) { test_process(controller,'raises_after') }
813
- end
814
-
815
- def test_with_method
816
- controller = ControllerWithFilterMethod
817
- assert_nothing_raised { test_process(controller,'no_raise') }
818
- assert_raise(After) { test_process(controller,'raises_after') }
819
- end
820
-
821
- def test_with_proc
822
- controller = test_process(ControllerWithProcFilter,'no_raise')
823
- assert controller.template.assigns['before']
824
- assert controller.template.assigns['after']
825
- end
826
-
827
- def test_nested_filters
828
- controller = ControllerWithNestedFilters
829
- assert_nothing_raised do
830
- begin
831
- test_process(controller,'raises_both')
832
- rescue Before, After
833
- end
834
- end
835
- assert_raise Before do
836
- begin
837
- test_process(controller,'raises_both')
838
- rescue After
839
- end
840
- end
841
- end
842
-
843
- def test_filter_order_with_all_filter_types
844
- controller = test_process(ControllerWithAllTypesOfFilters,'no_raise')
845
- assert_equal 'before around (before yield) around_again (before yield) around_again (after yield) around (after yield) after',controller.template.assigns['ran_filter'].join(' ')
846
- end
847
-
848
- def test_filter_order_with_skip_filter_method
849
- controller = test_process(ControllerWithTwoLessFilters,'no_raise')
850
- assert_equal 'before around (before yield) around (after yield)',controller.template.assigns['ran_filter'].join(' ')
851
- end
852
-
853
- def test_first_filter_in_multiple_before_filter_chain_halts
854
- controller = ::FilterTest::TestMultipleFiltersController.new
855
- response = test_process(controller, 'fail_1')
856
- assert_equal ' ', response.body
857
- assert_equal 1, controller.instance_variable_get(:@try)
858
- assert controller.instance_variable_get(:@before_filter_chain_aborted)
859
- end
860
-
861
- def test_second_filter_in_multiple_before_filter_chain_halts
862
- controller = ::FilterTest::TestMultipleFiltersController.new
863
- response = test_process(controller, 'fail_2')
864
- assert_equal ' ', response.body
865
- assert_equal 2, controller.instance_variable_get(:@try)
866
- assert controller.instance_variable_get(:@before_filter_chain_aborted)
867
- end
868
-
869
- def test_last_filter_in_multiple_before_filter_chain_halts
870
- controller = ::FilterTest::TestMultipleFiltersController.new
871
- response = test_process(controller, 'fail_3')
872
- assert_equal ' ', response.body
873
- assert_equal 3, controller.instance_variable_get(:@try)
874
- assert controller.instance_variable_get(:@before_filter_chain_aborted)
875
- end
876
-
877
- protected
878
- def test_process(controller, action = "show")
879
- ActionController::Base.class_eval { include ActionController::ProcessWithTest } unless ActionController::Base < ActionController::ProcessWithTest
880
- request = ActionController::TestRequest.new
881
- request.action = action
882
- controller = controller.new if controller.is_a?(Class)
883
- controller.process_with_test(request, ActionController::TestResponse.new)
884
- end
885
- end