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
data/CHANGELOG CHANGED
@@ -1,32 +1,4 @@
1
- *2.3.11 (February 9, 2011)*
2
-
3
- * Two security fixes. CVE-2011-0446, CVE-2011-0447
4
-
5
- *2.3.10 (October 15, 2010)*
6
-
7
- *2.3.9 (September 4, 2010)*
8
-
9
- * Version bump.
10
-
11
-
12
- *2.3.8 (May 24, 2010)*
13
-
14
- * HTML safety: fix compatibility *without* the optional rails_xss plugin.
15
-
16
-
17
- *2.3.7 (May 24, 2010)*
18
-
19
- * HTML safety: fix compatibility with the optional rails_xss plugin. [Nathan Weizenbaum, Santiago Pastorino]
20
-
21
-
22
- *2.3.6 (May 23, 2010)*
23
-
24
- * JSON: set Base.include_root_in_json = true to include a root value in the JSON: {"post": {"title": ...}}. Mirrors the Active Record option. #2584 [Matthew Moore, Joe Martinez, Elad Meidar, Santiago Pastorino]
25
-
26
- * Ruby 1.9: ERB template encoding using a magic comment at the top of the file. [Jeremy Kemper]
27
- <%# encoding: utf-8 %>
28
-
29
- * Fixed that default locale templates should be used if the current locale template is missing [DHH]
1
+ *Edge*
30
2
 
31
3
  * Fixed that PrototypeHelper#update_page should return html_safe [DHH]
32
4
 
@@ -34,7 +6,9 @@
34
6
 
35
7
  * Fixed that fragment caching should return a cache hit as html_safe (or it would all just get escaped) [DHH]
36
8
 
37
- * Introduce String#html_safe for rails_xss plugin and forward-compatibility with Rails 3. [Michael Koziarski, Santiago Pastorino, José Ignacio Costa]
9
+ * Added that ActionController::Base now does helper :all instead of relying on the default ApplicationController in Rails to do it [DHH]
10
+
11
+ * Added ActionDispatch::Request#authorization to access the http authentication header regardless of its proxy hiding [DHH]
38
12
 
39
13
  * Added :alert, :notice, and :flash as options to ActionController::Base#redirect_to that'll automatically set the proper flash before the redirection [DHH]. Examples:
40
14
 
@@ -47,45 +21,22 @@
47
21
 
48
22
  * Added ActionController::Base#notice/= and ActionController::Base#alert/= as a convenience accessors in both the controller and the view for flash[:notice]/= and flash[:alert]/= [DHH]
49
23
 
50
- * Added cookies.permanent, cookies.signed, and cookies.permanent.signed accessor for common cookie actions [DHH]. Examples:
51
24
 
52
- cookies.permanent[:prefers_open_id] = true
53
- # => Set-Cookie: prefers_open_id=true; path=/; expires=Sun, 16-Dec-2029 03:24:16 GMT
54
-
55
- cookies.signed[:discount] = 45
56
- # => Set-Cookie: discount=BAhpMg==--2c1c6906c90a3bc4fd54a51ffb41dffa4bf6b5f7; path=/
57
-
58
- cookies.signed[:discount]
59
- # => 45 (if the cookie was changed, you'll get a InvalidSignature exception)
60
-
61
- cookies.permanent.signed[:remember_me] = current_user.id
62
- # => Set-Cookie: discount=BAhU--848956038e692d7046deab32b7131856ab20e14e; path=/; expires=Sun, 16-Dec-2029 03:24:16 GMT
63
-
64
- ...to use the signed cookies, you need to set a secret to ActionController::Base.cookie_verifier_secret (automatically done in config/initializers/cookie_verification_secret.rb for new Rails applications).
65
-
66
-
67
- *2.3.5 (November 25, 2009)*
68
-
69
- * Minor Bug Fixes and deprecation warnings
70
-
71
- * Ruby 1.9 Support
72
-
73
- * Fix filtering parameters when there are Fixnum or other un-dupable values.
74
-
75
- * Improvements to ActionView::TestCase
76
-
77
- * Compatiblity with the rails_xss plugin
25
+ * Introduce grouped_collection_select helper. #1249 [Dan Codeape, Erik Ostrom]
78
26
 
79
- *2.3.4 (September 4, 2009)*
27
+ * Make sure javascript_include_tag/stylesheet_link_tag does not append ".js" or ".css" onto external urls. #1664 [Matthew Rudy Jacobs]
80
28
 
81
- * Sanitize multibyte strings before escaping them with escape_once. CVE-2009-3009
29
+ * Ruby 1.9: fix Content-Length for multibyte send_data streaming. #2661 [Sava Chankov]
82
30
 
83
- * Introduce grouped_collection_select helper. #1249 [Dan Codeape, Erik Ostrom]
31
+ * Ruby 1.9: ERB template encoding using a magic comment at the top of the file. [Jeremy Kemper]
32
+ <%# encoding: utf-8 %>
84
33
 
85
- * Ruby 1.9: fix Content-Length for multibyte send_data streaming. #2661 [Sava Chankov]
34
+ * Change integration test helpers to accept Rack environment instead of just HTTP Headers [Pratik Naik]
86
35
 
36
+ Before : get '/path', {}, 'Accept' => 'text/javascript'
37
+ After : get '/path', {}, 'HTTP_ACCEPT' => 'text/javascript'
87
38
 
88
- *2.3.3 (July 12, 2009)*
39
+ * Instead of checking Rails.env.test? in Failsafe middleware, check env["rails.raise_exceptions"] [Bryan Helmkamp]
89
40
 
90
41
  * Fixed that TestResponse.cookies was returning cookies unescaped #1867 [Doug McInnes]
91
42
 
@@ -1935,7 +1886,7 @@ superclass' view_paths. [Rick Olson]
1935
1886
 
1936
1887
  * Update documentation for erb trim syntax. #5651 [matt@mattmargolis.net]
1937
1888
 
1938
- * Pass :id => nil or :class => nil to error_messages_for to supress that html attribute. #3586 [olivier_ansaldi@yahoo.com]
1889
+ * Pass :id => nil or :class => nil to error_messages_for to supress that html attribute. #3586 [olivier_ansaldi@yahoo.com, sebastien@goetzilla.info]
1939
1890
 
1940
1891
  * Reset @html_document between requests so assert_tag works. #4810 [Jarkko Laine, easleydp@gmail.com]
1941
1892
 
@@ -2532,7 +2483,7 @@ superclass' view_paths. [Rick Olson]
2532
2483
 
2533
2484
  * Provide support for decimal columns to form helpers. Closes #5672. [Dave Thomas]
2534
2485
 
2535
- * Pass :id => nil or :class => nil to error_messages_for to supress that html attribute. #3586 [olivier_ansaldi@yahoo.com]
2486
+ * Pass :id => nil or :class => nil to error_messages_for to supress that html attribute. #3586 [olivier_ansaldi@yahoo.com, sebastien@goetzilla.info]
2536
2487
 
2537
2488
  * Reset @html_document between requests so assert_tag works. #4810 [Jarkko Laine, easleydp@gmail.com]
2538
2489
 
data/README CHANGED
@@ -37,15 +37,15 @@ A short rundown of the major features:
37
37
  def show
38
38
  @customer = find_customer
39
39
  end
40
-
40
+
41
41
  def update
42
42
  @customer = find_customer
43
43
  @customer.attributes = params[:customer]
44
- @customer.save ?
44
+ @customer.save ?
45
45
  redirect_to(:action => "show") :
46
46
  render(:action => "edit")
47
47
  end
48
-
48
+
49
49
  private
50
50
  def find_customer() Customer.find(params[:id]) end
51
51
  end
@@ -64,7 +64,7 @@ A short rundown of the major features:
64
64
  <% unless @person.is_client? %>
65
65
  Not for clients to see...
66
66
  <% end %>
67
-
67
+
68
68
  {Learn more}[link:classes/ActionView.html]
69
69
 
70
70
 
@@ -99,24 +99,24 @@ A short rundown of the major features:
99
99
  before_filter :authenticate, :cache, :audit
100
100
  after_filter { |c| c.response.body = Gzip::compress(c.response.body) }
101
101
  after_filter LocalizeFilter
102
-
102
+
103
103
  def index
104
104
  # Before this action is run, the user will be authenticated, the cache
105
105
  # will be examined to see if a valid copy of the results already
106
106
  # exists, and the action will be logged for auditing.
107
-
108
- # After this action has run, the output will first be localized then
107
+
108
+ # After this action has run, the output will first be localized then
109
109
  # compressed to minimize bandwidth usage
110
110
  end
111
-
111
+
112
112
  private
113
113
  def authenticate
114
114
  # Implement the filter with full access to both request and response
115
115
  end
116
116
  end
117
-
117
+
118
118
  {Learn more}[link:classes/ActionController/Filters/ClassMethods.html]
119
-
119
+
120
120
 
121
121
  * Helpers for forms, dates, action links, and text
122
122
 
@@ -124,26 +124,26 @@ A short rundown of the major features:
124
124
  <%= html_date_select(Date.today) %>
125
125
  <%= link_to "New post", :controller => "post", :action => "new" %>
126
126
  <%= truncate(post.title, :length => 25) %>
127
-
127
+
128
128
  {Learn more}[link:classes/ActionView/Helpers.html]
129
129
 
130
130
 
131
- * Layout sharing for template reuse (think simple version of Struts
131
+ * Layout sharing for template reuse (think simple version of Struts
132
132
  Tiles[http://jakarta.apache.org/struts/userGuide/dev_tiles.html])
133
133
 
134
134
  class WeblogController < ActionController::Base
135
135
  layout "weblog_layout"
136
-
136
+
137
137
  def hello_world
138
138
  end
139
139
  end
140
140
 
141
141
  Layout file (called weblog_layout):
142
142
  <html><body><%= yield %></body></html>
143
-
143
+
144
144
  Template for hello_world action:
145
145
  <h1>Hello world</h1>
146
-
146
+
147
147
  Result of running hello_world action:
148
148
  <html><body><h1>Hello world</h1></body></html>
149
149
 
@@ -155,26 +155,17 @@ A short rundown of the major features:
155
155
  map.connect 'clients/:client_name/:project_name/:controller/:action'
156
156
 
157
157
  Accessing /clients/37signals/basecamp/project/dash calls ProjectController#dash with
158
- { "client_name" => "37signals", "project_name" => "basecamp" }.
159
-
160
- From that URL you can redirect providing new parameters in a number of ways:
161
-
162
- redirect_to :action => "edit"
163
- # /clients/37signals/basecamp/project/edit
164
-
165
- redirect_to :client_name => "nextangle", :project_name => "rails"
166
- # /clients/nextangle/rails/project/dash
158
+ { "client_name" => "37signals", "project_name" => "basecamp" } in params[:params]
167
159
 
168
- {Learn more}[link:classes/ActionController/Base.html]
160
+ From that URL, you can rewrite the redirect in a number of ways:
169
161
 
162
+ redirect_to(:action => "edit") =>
163
+ /clients/37signals/basecamp/project/dash
170
164
 
171
- * JavaScript and Ajax integration
165
+ redirect_to(:client_name => "nextangle", :project_name => "rails") =>
166
+ /clients/nextangle/rails/project/dash
172
167
 
173
- link_to_function "Greeting", "alert('Hello world!')"
174
- link_to_remote "Delete this post", :update => "posts",
175
- :url => { :action => "destroy", :id => post.id }
176
-
177
- {Learn more}[link:classes/ActionView/Helpers/JavaScriptHelper.html]
168
+ {Learn more}[link:classes/ActionController/Base.html]
178
169
 
179
170
 
180
171
  * Easy testing of both controller and rendered template through ActionController::TestCase
@@ -218,18 +209,18 @@ A short rundown of the major features:
218
209
  class WeblogController < ActionController::Base
219
210
  caches_page :show
220
211
  caches_action :account
221
-
212
+
222
213
  def show
223
- # the output of the method will be cached as
214
+ # the output of the method will be cached as
224
215
  # ActionController::Base.page_cache_directory + "/weblog/show/n.html"
225
216
  # and the web server will pick it up without even hitting Rails
226
217
  end
227
-
218
+
228
219
  def account
229
220
  # the output of the method will be cached in the fragment store
230
221
  # but Rails is hit to retrieve it, so filters are run
231
222
  end
232
-
223
+
233
224
  def update
234
225
  List.update(params[:list][:id], params[:list])
235
226
  expire_page :action => "show", :id => params[:list][:id]
@@ -256,26 +247,26 @@ A short rundown of the major features:
256
247
  class AccountController < ActionController::Base
257
248
  scaffold :account
258
249
  end
259
-
250
+
260
251
  The AccountController now has the full CRUD range of actions and default
261
252
  templates: list, show, destroy, new, create, edit, update
262
-
253
+
263
254
  {Learn more}[link:classes/ActionController/Scaffolding/ClassMethods.html]
264
255
 
265
256
 
266
257
  * Form building for Active Record model objects
267
258
 
268
- The post object has a title (varchar), content (text), and
259
+ The post object has a title (varchar), content (text), and
269
260
  written_on (date)
270
261
 
271
262
  <%= form "post" %>
272
-
263
+
273
264
  ...will generate something like (the selects will have more options, of
274
265
  course):
275
-
266
+
276
267
  <form action="create" method="POST">
277
268
  <p>
278
- <b>Title:</b><br/>
269
+ <b>Title:</b><br/>
279
270
  <input type="text" name="post[title]" value="<%= @post.title %>" />
280
271
  </p>
281
272
  <p>
@@ -293,7 +284,7 @@ A short rundown of the major features:
293
284
  </form>
294
285
 
295
286
  This form generates a params[:post] array that can be used directly in a save action:
296
-
287
+
297
288
  class WeblogController < ActionController::Base
298
289
  def create
299
290
  post = Post.create(params[:post])
@@ -318,19 +309,19 @@ methods:
318
309
 
319
310
  class WeblogController < ActionController::Base
320
311
  layout "weblog/layout"
321
-
312
+
322
313
  def index
323
314
  @posts = Post.find(:all)
324
315
  end
325
-
316
+
326
317
  def show
327
318
  @post = Post.find(params[:id])
328
319
  end
329
-
320
+
330
321
  def new
331
322
  @post = Post.new
332
323
  end
333
-
324
+
334
325
  def create
335
326
  @post = Post.create(params[:post])
336
327
  redirect_to :action => "show", :id => @post.id
@@ -364,7 +355,7 @@ And the templates look like this:
364
355
 
365
356
  weblog/new.html.erb:
366
357
  <%= form "post" %>
367
-
358
+
368
359
  This simple setup will list all the posts in the system on the index page,
369
360
  which is called by accessing /weblog/. It uses the form builder for the Active
370
361
  Record model to make the new screen, which in turn hands everything over to
@@ -379,7 +370,7 @@ The latest version of Action Pack can be found at
379
370
 
380
371
  * http://rubyforge.org/project/showfiles.php?group_id=249
381
372
 
382
- Documentation can be found at
373
+ Documentation can be found at
383
374
 
384
375
  * http://api.rubyonrails.com
385
376
 
@@ -0,0 +1,22 @@
1
+ activesupport_path = File.expand_path('../../../activesupport/lib', __FILE__)
2
+ $:.unshift(activesupport_path) if File.directory?(activesupport_path) && !$:.include?(activesupport_path)
3
+
4
+ require 'active_support/ruby/shim'
5
+ require 'active_support/dependencies/autoload'
6
+ require 'active_support/core_ext/module/attr_internal'
7
+ require 'active_support/core_ext/module/delegation'
8
+
9
+ module AbstractController
10
+ extend ActiveSupport::Autoload
11
+
12
+ autoload :Base
13
+ autoload :Callbacks
14
+ autoload :Collector
15
+ autoload :Compatibility
16
+ autoload :Helpers
17
+ autoload :Layouts
18
+ autoload :LocalizedCache
19
+ autoload :Logger
20
+ autoload :Rendering
21
+ autoload :Translation
22
+ end
@@ -0,0 +1,191 @@
1
+ module AbstractController
2
+ class Error < StandardError; end
3
+ class ActionNotFound < StandardError; end
4
+
5
+ class Base
6
+ attr_internal :response_body
7
+ attr_internal :action_name
8
+ attr_internal :formats
9
+
10
+ class << self
11
+ attr_reader :abstract
12
+ alias_method :abstract?, :abstract
13
+
14
+ # Define a controller as abstract. See internal_methods for more
15
+ # details.
16
+ def abstract!
17
+ @abstract = true
18
+ end
19
+
20
+ def inherited(klass)
21
+ ::AbstractController::Base.descendants << klass.to_s
22
+ super
23
+ end
24
+
25
+ # A list of all descendents of AbstractController::Base. This is
26
+ # useful for initializers which need to add behavior to all controllers.
27
+ def descendants
28
+ @descendants ||= []
29
+ end
30
+
31
+ # A list of all internal methods for a controller. This finds the first
32
+ # abstract superclass of a controller, and gets a list of all public
33
+ # instance methods on that abstract class. Public instance methods of
34
+ # a controller would normally be considered action methods, so we
35
+ # are removing those methods on classes declared as abstract
36
+ # (ActionController::Metal and ActionController::Base are defined
37
+ # as abstract)
38
+ def internal_methods
39
+ controller = self
40
+ controller = controller.superclass until controller.abstract?
41
+ controller.public_instance_methods(true)
42
+ end
43
+
44
+ # The list of hidden actions to an empty Array. Defaults to an
45
+ # empty Array. This can be modified by other modules or subclasses
46
+ # to specify particular actions as hidden.
47
+ #
48
+ # ==== Returns
49
+ # Array[String]:: An array of method names that should not be
50
+ # considered actions.
51
+ def hidden_actions
52
+ []
53
+ end
54
+
55
+ # A list of method names that should be considered actions. This
56
+ # includes all public instance methods on a controller, less
57
+ # any internal methods (see #internal_methods), adding back in
58
+ # any methods that are internal, but still exist on the class
59
+ # itself. Finally, #hidden_actions are removed.
60
+ #
61
+ # ==== Returns
62
+ # Array[String]:: A list of all methods that should be considered
63
+ # actions.
64
+ def action_methods
65
+ @action_methods ||= begin
66
+ # All public instance methods of this class, including ancestors
67
+ methods = public_instance_methods(true).map { |m| m.to_s }.to_set -
68
+ # Except for public instance methods of Base and its ancestors
69
+ internal_methods.map { |m| m.to_s } +
70
+ # Be sure to include shadowed public instance methods of this class
71
+ public_instance_methods(false).map { |m| m.to_s } -
72
+ # And always exclude explicitly hidden actions
73
+ hidden_actions
74
+
75
+ # Clear out AS callback method pollution
76
+ methods.reject { |method| method =~ /_one_time_conditions/ }
77
+ end
78
+ end
79
+
80
+ # Returns the full controller name, underscored, without the ending Controller.
81
+ # For instance, MyApp::MyPostsController would return "my_app/my_posts" for
82
+ # controller_name.
83
+ #
84
+ # ==== Returns
85
+ # String
86
+ def controller_path
87
+ @controller_path ||= name && name.sub(/Controller$/, '').underscore
88
+ end
89
+ end
90
+
91
+ abstract!
92
+
93
+ # Initialize controller with nil formats.
94
+ def initialize #:nodoc:
95
+ @_formats = nil
96
+ end
97
+
98
+ # Calls the action going through the entire action dispatch stack.
99
+ #
100
+ # The actual method that is called is determined by calling
101
+ # #method_for_action. If no method can handle the action, then an
102
+ # ActionNotFound error is raised.
103
+ #
104
+ # ==== Returns
105
+ # self
106
+ def process(action, *args)
107
+ @_action_name = action_name = action.to_s
108
+
109
+ unless action_name = method_for_action(action_name)
110
+ raise ActionNotFound, "The action '#{action}' could not be found"
111
+ end
112
+
113
+ @_response_body = nil
114
+
115
+ process_action(action_name, *args)
116
+ end
117
+
118
+ # Delegates to the class' #controller_path
119
+ def controller_path
120
+ self.class.controller_path
121
+ end
122
+
123
+ def action_methods
124
+ self.class.action_methods
125
+ end
126
+
127
+ private
128
+ # Returns true if the name can be considered an action. This can
129
+ # be overridden in subclasses to modify the semantics of what
130
+ # can be considered an action.
131
+ #
132
+ # ==== Parameters
133
+ # name<String>:: The name of an action to be tested
134
+ #
135
+ # ==== Returns
136
+ # TrueClass, FalseClass
137
+ def action_method?(name)
138
+ self.class.action_methods.include?(name)
139
+ end
140
+
141
+ # Call the action. Override this in a subclass to modify the
142
+ # behavior around processing an action. This, and not #process,
143
+ # is the intended way to override action dispatching.
144
+ def process_action(method_name, *args)
145
+ send_action(method_name, *args)
146
+ end
147
+
148
+ # Actually call the method associated with the action. Override
149
+ # this method if you wish to change how action methods are called,
150
+ # not to add additional behavior around it. For example, you would
151
+ # override #send_action if you want to inject arguments into the
152
+ # method.
153
+ alias send_action send
154
+
155
+ # If the action name was not found, but a method called "action_missing"
156
+ # was found, #method_for_action will return "_handle_action_missing".
157
+ # This method calls #action_missing with the current action name.
158
+ def _handle_action_missing
159
+ action_missing(@_action_name)
160
+ end
161
+
162
+ # Takes an action name and returns the name of the method that will
163
+ # handle the action. In normal cases, this method returns the same
164
+ # name as it receives. By default, if #method_for_action receives
165
+ # a name that is not an action, it will look for an #action_missing
166
+ # method and return "_handle_action_missing" if one is found.
167
+ #
168
+ # Subclasses may override this method to add additional conditions
169
+ # that should be considered an action. For instance, an HTTP controller
170
+ # with a template matching the action name is considered to exist.
171
+ #
172
+ # If you override this method to handle additional cases, you may
173
+ # also provide a method (like _handle_method_missing) to handle
174
+ # the case.
175
+ #
176
+ # If none of these conditions are true, and method_for_action
177
+ # returns nil, an ActionNotFound exception will be raised.
178
+ #
179
+ # ==== Parameters
180
+ # action_name<String>:: An action name to find a method name for
181
+ #
182
+ # ==== Returns
183
+ # String:: The name of the method that handles the action
184
+ # nil:: No method name could be found. Raise ActionNotFound.
185
+ def method_for_action(action_name)
186
+ if action_method?(action_name) then action_name
187
+ elsif respond_to?(:action_missing, true) then "_handle_action_missing"
188
+ end
189
+ end
190
+ end
191
+ end