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
@@ -0,0 +1,28 @@
1
+ module ActionController
2
+ module Configuration
3
+ extend ActiveSupport::Concern
4
+
5
+ def config
6
+ @config ||= self.class.config
7
+ end
8
+
9
+ def config=(config)
10
+ @config = config
11
+ end
12
+
13
+ module ClassMethods
14
+ def default_config
15
+ @default_config ||= {}
16
+ end
17
+
18
+ def config
19
+ self.config ||= default_config
20
+ end
21
+
22
+ def config=(config)
23
+ @config = ActiveSupport::OrderedHash.new
24
+ @config.merge!(config)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,17 @@
1
+ module ActionController #:nodoc:
2
+ module Cookies
3
+ extend ActiveSupport::Concern
4
+
5
+ include RackDelegation
6
+
7
+ included do
8
+ helper_method :cookies
9
+ cattr_accessor :cookie_verifier_secret
10
+ end
11
+
12
+ private
13
+ def cookies
14
+ request.cookie_jar
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,46 @@
1
+ module ActionController
2
+ class ActionControllerError < StandardError #:nodoc:
3
+ end
4
+
5
+ class RenderError < ActionControllerError #:nodoc:
6
+ end
7
+
8
+ class RoutingError < ActionControllerError #:nodoc:
9
+ attr_reader :failures
10
+ def initialize(message, failures=[])
11
+ super(message)
12
+ @failures = failures
13
+ end
14
+ end
15
+
16
+ class MethodNotAllowed < ActionControllerError #:nodoc:
17
+ attr_reader :allowed_methods
18
+
19
+ def initialize(*allowed_methods)
20
+ super("Only #{allowed_methods.to_sentence(:locale => :en)} requests are allowed.")
21
+ end
22
+ end
23
+
24
+ class NotImplemented < MethodNotAllowed #:nodoc:
25
+ end
26
+
27
+ class UnknownController < ActionControllerError #:nodoc:
28
+ end
29
+
30
+ class MissingFile < ActionControllerError #:nodoc:
31
+ end
32
+
33
+ class RenderError < ActionControllerError #:nodoc:
34
+ end
35
+
36
+ class SessionOverflowError < ActionControllerError #:nodoc:
37
+ DEFAULT_MESSAGE = 'Your session data is larger than the data column in which it is to be stored. You must increase the size of your data column if you intend to store large data.'
38
+
39
+ def initialize(message = nil)
40
+ super(message || DEFAULT_MESSAGE)
41
+ end
42
+ end
43
+
44
+ class UnknownHttpMethod < ActionControllerError #:nodoc:
45
+ end
46
+ end
@@ -0,0 +1,28 @@
1
+ module ActionController #:nodoc:
2
+ module Flash
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ delegate :flash, :to => :request
7
+ delegate :alert, :notice, :to => "request.flash"
8
+ helper_method :alert, :notice
9
+ end
10
+
11
+ protected
12
+ def redirect_to(options = {}, response_status_and_flash = {}) #:doc:
13
+ if alert = response_status_and_flash.delete(:alert)
14
+ flash[:alert] = alert
15
+ end
16
+
17
+ if notice = response_status_and_flash.delete(:notice)
18
+ flash[:notice] = notice
19
+ end
20
+
21
+ if other_flashes = response_status_and_flash.delete(:flash)
22
+ flash.update(other_flashes)
23
+ end
24
+
25
+ super(options, response_status_and_flash)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,33 @@
1
+ module ActionController
2
+ module Head
3
+ extend ActiveSupport::Concern
4
+ include ActionController::UrlFor
5
+
6
+ # Return a response that has no content (merely headers). The options
7
+ # argument is interpreted to be a hash of header names and values.
8
+ # This allows you to easily return a response that consists only of
9
+ # significant headers:
10
+ #
11
+ # head :created, :location => person_path(@person)
12
+ #
13
+ # It can also be used to return exceptional conditions:
14
+ #
15
+ # return head(:method_not_allowed) unless request.post?
16
+ # return head(:bad_request) unless valid_request?
17
+ # render
18
+ def head(status, options = {})
19
+ options, status = status, nil if status.is_a?(Hash)
20
+ status ||= options.delete(:status) || :ok
21
+ location = options.delete(:location)
22
+
23
+ options.each do |key, value|
24
+ headers[key.to_s.dasherize.split(/-/).map { |v| v.capitalize }.join("-")] = value.to_s
25
+ end
26
+
27
+ self.status = status
28
+ self.location = url_for(location) if location
29
+ self.content_type = Mime[formats.first]
30
+ self.response_body = " "
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,116 @@
1
+ require 'active_support/core_ext/class/attribute'
2
+
3
+ module ActionController
4
+ # The Rails framework provides a large number of helpers for working with +assets+, +dates+, +forms+,
5
+ # +numbers+ and model objects, to name a few. These helpers are available to all templates
6
+ # by default.
7
+ #
8
+ # In addition to using the standard template helpers provided in the Rails framework, creating custom helpers to
9
+ # extract complicated logic or reusable functionality is strongly encouraged. By default, the controller will
10
+ # include a helper whose name matches that of the controller, e.g., <tt>MyController</tt> will automatically
11
+ # include <tt>MyHelper</tt>.
12
+ #
13
+ # Additional helpers can be specified using the +helper+ class method in <tt>ActionController::Base</tt> or any
14
+ # controller which inherits from it.
15
+ #
16
+ # ==== Examples
17
+ # The +to_s+ method from the Time class can be wrapped in a helper method to display a custom message if
18
+ # the Time object is blank:
19
+ #
20
+ # module FormattedTimeHelper
21
+ # def format_time(time, format=:long, blank_message="&nbsp;")
22
+ # time.blank? ? blank_message : time.to_s(format)
23
+ # end
24
+ # end
25
+ #
26
+ # FormattedTimeHelper can now be included in a controller, using the +helper+ class method:
27
+ #
28
+ # class EventsController < ActionController::Base
29
+ # helper FormattedTimeHelper
30
+ # def index
31
+ # @events = Event.find(:all)
32
+ # end
33
+ # end
34
+ #
35
+ # Then, in any view rendered by <tt>EventController</tt>, the <tt>format_time</tt> method can be called:
36
+ #
37
+ # <% @events.each do |event| -%>
38
+ # <p>
39
+ # <% format_time(event.time, :short, "N/A") %> | <%= event.name %>
40
+ # </p>
41
+ # <% end -%>
42
+ #
43
+ # Finally, assuming we have two event instances, one which has a time and one which does not,
44
+ # the output might look like this:
45
+ #
46
+ # 23 Aug 11:30 | Carolina Railhawks Soccer Match
47
+ # N/A | Carolina Railhaws Training Workshop
48
+ #
49
+ module Helpers
50
+ extend ActiveSupport::Concern
51
+
52
+ include AbstractController::Helpers
53
+
54
+ included do
55
+ class_attribute :helpers_path
56
+ self.helpers_path = []
57
+ end
58
+
59
+ module ClassMethods
60
+ def helpers_dir
61
+ ActiveSupport::Deprecation.warn "helpers_dir is deprecated, use helpers_path instead"
62
+ self.helpers_path
63
+ end
64
+
65
+ def helpers_dir=(value)
66
+ ActiveSupport::Deprecation.warn "helpers_dir= is deprecated, use helpers_path= instead"
67
+ self.helpers_path = Array(value)
68
+ end
69
+
70
+ # Declares helper accessors for controller attributes. For example, the
71
+ # following adds new +name+ and <tt>name=</tt> instance methods to a
72
+ # controller and makes them available to the view:
73
+ # helper_attr :name
74
+ # attr_accessor :name
75
+ #
76
+ # ==== Parameters
77
+ # *attrs<Array[String, Symbol]>:: Names of attributes to be converted
78
+ # into helpers.
79
+ def helper_attr(*attrs)
80
+ attrs.flatten.each { |attr| helper_method(attr, "#{attr}=") }
81
+ end
82
+
83
+ # Provides a proxy to access helpers methods from outside the view.
84
+ def helpers
85
+ @helper_proxy ||= ActionView::Base.new.extend(_helpers)
86
+ end
87
+
88
+ private
89
+ # Overwrite _modules_for_helpers to accept :all as argument, which loads
90
+ # all helpers in helpers_dir.
91
+ #
92
+ # ==== Parameters
93
+ # args<Array[String, Symbol, Module, all]>:: A list of helpers
94
+ #
95
+ # ==== Returns
96
+ # Array[Module]:: A normalized list of modules for the list of
97
+ # helpers provided.
98
+ def _modules_for_helpers(args)
99
+ args += all_application_helpers if args.delete(:all)
100
+ super(args)
101
+ end
102
+
103
+ # Extract helper names from files in app/helpers/**/*_helper.rb
104
+ def all_application_helpers
105
+ helpers = []
106
+ helpers_path.each do |path|
107
+ extract = /^#{Regexp.quote(path)}\/?(.*)_helper.rb$/
108
+ helpers += Dir["#{path}/**/*_helper.rb"].map { |file| file.sub(extract, '\1') }
109
+ end
110
+ helpers.sort!
111
+ helpers.uniq!
112
+ helpers
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,50 @@
1
+ require 'active_support/core_ext/class/attribute'
2
+
3
+ module ActionController
4
+ # ActionController::HideActions adds the ability to prevent public methods on a controller
5
+ # to be called as actions.
6
+ module HideActions
7
+ extend ActiveSupport::Concern
8
+
9
+ included do
10
+ class_attribute :hidden_actions
11
+ self.hidden_actions = Set.new
12
+ end
13
+
14
+ private
15
+
16
+ # Overrides AbstractController::Base#action_method? to return false if the
17
+ # action name is in the list of hidden actions.
18
+ def action_method?(action_name)
19
+ self.class.visible_action?(action_name) do
20
+ !self.class.hidden_actions.include?(action_name) && super
21
+ end
22
+ end
23
+
24
+ module ClassMethods
25
+ # Sets all of the actions passed in as hidden actions.
26
+ #
27
+ # ==== Parameters
28
+ # *args<#to_s>:: A list of actions
29
+ def hide_action(*args)
30
+ self.hidden_actions = hidden_actions.dup.merge(args.map(&:to_s))
31
+ end
32
+
33
+ def inherited(klass)
34
+ klass.instance_variable_set("@visible_actions", {})
35
+ super
36
+ end
37
+
38
+ def visible_action?(action_name)
39
+ return @visible_actions[action_name] if @visible_actions.key?(action_name)
40
+ @visible_actions[action_name] = yield
41
+ end
42
+
43
+ # Overrides AbstractController::Base#action_methods to remove any methods
44
+ # that are listed as hidden methods.
45
+ def action_methods
46
+ @action_methods ||= Set.new(super.reject {|name| hidden_actions.include?(name)})
47
+ end
48
+ end
49
+ end
50
+ end
@@ -1,3 +1,5 @@
1
+ require 'active_support/base64'
2
+
1
3
  module ActionController
2
4
  module HttpAuthentication
3
5
  # Makes it dead easy to do HTTP Basic authentication.
@@ -113,7 +115,7 @@ module ActionController
113
115
  end
114
116
 
115
117
  def authenticate_with_http_basic(&login_procedure)
116
- HttpAuthentication::Basic.authenticate(self, &login_procedure)
118
+ HttpAuthentication::Basic.authenticate(request, &login_procedure)
117
119
  end
118
120
 
119
121
  def request_http_basic_authentication(realm = "Application")
@@ -121,9 +123,9 @@ module ActionController
121
123
  end
122
124
  end
123
125
 
124
- def authenticate(controller, &login_procedure)
125
- unless authorization(controller.request).blank?
126
- login_procedure.call(*user_name_and_password(controller.request))
126
+ def authenticate(request, &login_procedure)
127
+ unless authorization(request).blank?
128
+ login_procedure.call(*user_name_and_password(request))
127
129
  end
128
130
  end
129
131
 
@@ -148,7 +150,8 @@ module ActionController
148
150
 
149
151
  def authentication_request(controller, realm)
150
152
  controller.headers["WWW-Authenticate"] = %(Basic realm="#{realm.gsub(/"/, "")}")
151
- controller.__send__ :render, :text => "HTTP Basic: Access denied.\n", :status => :unauthorized
153
+ controller.response_body = "HTTP Basic: Access denied.\n"
154
+ controller.status = 401
152
155
  end
153
156
  end
154
157
 
@@ -162,7 +165,7 @@ module ActionController
162
165
 
163
166
  # Authenticate with HTTP Digest, returns true or false
164
167
  def authenticate_with_http_digest(realm = "Application", &password_procedure)
165
- HttpAuthentication::Digest.authenticate(self, realm, &password_procedure)
168
+ HttpAuthentication::Digest.authenticate(request, realm, &password_procedure)
166
169
  end
167
170
 
168
171
  # Render output including the HTTP Digest authentication header
@@ -172,8 +175,8 @@ module ActionController
172
175
  end
173
176
 
174
177
  # Returns false on a valid response, true otherwise
175
- def authenticate(controller, realm, &password_procedure)
176
- authorization(controller.request) && validate_digest_response(controller.request, realm, &password_procedure)
178
+ def authenticate(request, realm, &password_procedure)
179
+ authorization(request) && validate_digest_response(request, realm, &password_procedure)
177
180
  end
178
181
 
179
182
  def authorization(request)
@@ -227,9 +230,9 @@ module ActionController
227
230
  end
228
231
 
229
232
  def decode_credentials(header)
230
- header.to_s.gsub(/^Digest\s+/,'').split(',').inject({}.with_indifferent_access) do |hash, pair|
233
+ header.to_s.gsub(/^Digest\s+/,'').split(',').inject({}) do |hash, pair|
231
234
  key, value = pair.split('=', 2)
232
- hash[key.strip] = value.to_s.gsub(/^"|"$/,'').gsub(/'/, '')
235
+ hash[key.strip.to_sym] = value.to_s.gsub(/^"|"$/,'').gsub(/'/, '')
233
236
  hash
234
237
  end
235
238
  end
@@ -241,7 +244,8 @@ module ActionController
241
244
  def authentication_request(controller, realm, message = nil)
242
245
  message ||= "HTTP Digest: Access denied.\n"
243
246
  authentication_header(controller, realm)
244
- controller.__send__ :render, :text => message, :status => :unauthorized
247
+ controller.response_body = message
248
+ controller.status = 401
245
249
  end
246
250
 
247
251
  # Uses an MD5 digest based on time to generate a value to be used only once.
@@ -275,12 +279,12 @@ module ActionController
275
279
  #
276
280
  # The nonce is opaque to the client. Composed of Time, and hash of Time with secret
277
281
  # key from the Rails session secret generated upon creation of project. Ensures
278
- # the time cannot be modifed by client.
282
+ # the time cannot be modified by client.
279
283
  def nonce(time = Time.now)
280
284
  t = time.to_i
281
285
  hashed = [t, secret_key]
282
286
  digest = ::Digest::MD5.hexdigest(hashed.join(":"))
283
- Base64.encode64("#{t}:#{digest}").gsub("\n", '')
287
+ ActiveSupport::Base64.encode64("#{t}:#{digest}").gsub("\n", '')
284
288
  end
285
289
 
286
290
  # Might want a shorter timeout depending on whether the request
@@ -289,8 +293,7 @@ module ActionController
289
293
  # allow a user to use new nonce without prompting user again for their
290
294
  # username and password.
291
295
  def validate_nonce(request, value, seconds_to_timeout=5*60)
292
- return false if value.nil?
293
- t = Base64.decode64(value).split(":").first.to_i
296
+ t = ActiveSupport::Base64.decode64(value).split(":").first.to_i
294
297
  nonce(t) == value && (t - Time.now.to_i).abs <= seconds_to_timeout
295
298
  end
296
299
 
@@ -0,0 +1,99 @@
1
+ require 'abstract_controller/logger'
2
+
3
+ module ActionController
4
+ # Adds instrumentation to several ends in ActionController::Base. It also provides
5
+ # some hooks related with process_action, this allows an ORM like ActiveRecord
6
+ # and/or DataMapper to plug in ActionController and show related information.
7
+ #
8
+ # Check ActiveRecord::Railties::ControllerRuntime for an example.
9
+ module Instrumentation
10
+ extend ActiveSupport::Concern
11
+
12
+ include AbstractController::Logger
13
+
14
+ attr_internal :view_runtime
15
+
16
+ def process_action(action, *args)
17
+ raw_payload = {
18
+ :controller => self.class.name,
19
+ :action => self.action_name,
20
+ :params => request.filtered_parameters,
21
+ :formats => request.formats.map(&:to_sym),
22
+ :method => request.method,
23
+ :path => (request.request_uri rescue "unknown")
24
+ }
25
+
26
+ ActiveSupport::Notifications.instrument("action_controller.start_processing", raw_payload.dup)
27
+
28
+ ActiveSupport::Notifications.instrument("action_controller.process_action", raw_payload) do |payload|
29
+ result = super
30
+ payload[:status] = response.status
31
+ append_info_to_payload(payload)
32
+ result
33
+ end
34
+ end
35
+
36
+ def render(*args)
37
+ render_output = nil
38
+ self.view_runtime = cleanup_view_runtime do
39
+ Benchmark.ms { render_output = super }
40
+ end
41
+ render_output
42
+ end
43
+
44
+ def send_file(path, options={})
45
+ ActiveSupport::Notifications.instrument("action_controller.send_file",
46
+ options.merge(:path => path)) do
47
+ super
48
+ end
49
+ end
50
+
51
+ def send_data(data, options = {})
52
+ ActiveSupport::Notifications.instrument("action_controller.send_data", options) do
53
+ super
54
+ end
55
+ end
56
+
57
+ def redirect_to(*args)
58
+ ActiveSupport::Notifications.instrument("action_controller.redirect_to") do |payload|
59
+ result = super
60
+ payload[:status] = self.status
61
+ payload[:location] = self.location
62
+ result
63
+ end
64
+ end
65
+
66
+ protected
67
+
68
+ # A hook which allows you to clean up any time taken into account in
69
+ # views wrongly, like database querying time.
70
+ #
71
+ # def cleanup_view_runtime
72
+ # super - time_taken_in_something_expensive
73
+ # end
74
+ #
75
+ # :api: plugin
76
+ def cleanup_view_runtime #:nodoc:
77
+ yield
78
+ end
79
+
80
+ # Everytime after an action is processed, this method is invoked
81
+ # with the payload, so you can add more information.
82
+ # :api: plugin
83
+ def append_info_to_payload(payload) #:nodoc:
84
+ payload[:view_runtime] = view_runtime
85
+ end
86
+
87
+ module ClassMethods
88
+ # A hook which allows other frameworks to log what happened during
89
+ # controller process action. This method should return an array
90
+ # with the messages to be added.
91
+ # :api: plugin
92
+ def log_process_action(payload) #:nodoc:
93
+ messages, view_runtime = [], payload[:view_runtime]
94
+ messages << ("Views: %.1fms" % view_runtime.to_f) if view_runtime
95
+ messages
96
+ end
97
+ end
98
+ end
99
+ end