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,17 @@
1
+ require 'active_support/testing/performance'
2
+ require 'active_support/testing/default'
3
+
4
+ if defined?(ActiveSupport::Testing::Performance)
5
+ module ActionDispatch
6
+ # An integration test that runs a code profiler on your test methods.
7
+ # Profiling output for combinations of each test method, measurement, and
8
+ # output format are written to your tmp/performance directory.
9
+ #
10
+ # By default, process_time is measured and both flat and graph_html output
11
+ # formats are written, so you'll have two output files per test method.
12
+ class PerformanceTest < ActionDispatch::IntegrationTest
13
+ include ActiveSupport::Testing::Performance
14
+ include ActiveSupport::Testing::Default
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,42 @@
1
+ module ActionDispatch
2
+ module TestProcess
3
+ def assigns(key = nil)
4
+ assigns = {}
5
+ @controller.instance_variable_names.each do |ivar|
6
+ next if ActionController::Base.protected_instance_variables.include?(ivar)
7
+ assigns[ivar[1..-1]] = @controller.instance_variable_get(ivar)
8
+ end
9
+
10
+ key.nil? ? assigns : assigns[key.to_s]
11
+ end
12
+
13
+ def session
14
+ @request.session
15
+ end
16
+
17
+ def flash
18
+ @request.flash
19
+ end
20
+
21
+ def cookies
22
+ @request.cookies.merge(@response.cookies)
23
+ end
24
+
25
+ def redirect_to_url
26
+ @response.redirect_url
27
+ end
28
+
29
+ # Shortcut for <tt>ARack::Test::UploadedFile.new(ActionController::TestCase.fixture_path + path, type)</tt>:
30
+ #
31
+ # post :change_avatar, :avatar => fixture_file_upload('/files/spongebob.png', 'image/png')
32
+ #
33
+ # To upload binary files on Windows, pass <tt>:binary</tt> as the last parameter.
34
+ # This will not affect other platforms:
35
+ #
36
+ # post :change_avatar, :avatar => fixture_file_upload('/files/spongebob.png', 'image/png', :binary)
37
+ def fixture_file_upload(path, mime_type = nil, binary = false)
38
+ fixture_path = ActionController::TestCase.send(:fixture_path) if ActionController::TestCase.respond_to?(:fixture_path)
39
+ Rack::Test::UploadedFile.new("#{fixture_path}#{path}", mime_type, binary)
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,83 @@
1
+ module ActionDispatch
2
+ class TestRequest < Request
3
+ DEFAULT_ENV = Rack::MockRequest.env_for('/')
4
+
5
+ def self.new(env = {})
6
+ super
7
+ end
8
+
9
+ def initialize(env = {})
10
+ super(DEFAULT_ENV.merge(env))
11
+
12
+ self.host = 'test.host'
13
+ self.remote_addr = '0.0.0.0'
14
+ self.user_agent = 'Rails Testing'
15
+ end
16
+
17
+ def env
18
+ write_cookies!
19
+ delete_nil_values!
20
+ super
21
+ end
22
+
23
+ def request_method=(method)
24
+ @env['REQUEST_METHOD'] = method.to_s.upcase
25
+ end
26
+
27
+ def host=(host)
28
+ @env['HTTP_HOST'] = host
29
+ end
30
+
31
+ def port=(number)
32
+ @env['SERVER_PORT'] = number.to_i
33
+ end
34
+
35
+ def request_uri=(uri)
36
+ @env['REQUEST_URI'] = uri
37
+ end
38
+
39
+ def path=(path)
40
+ @env['PATH_INFO'] = path
41
+ end
42
+
43
+ def action=(action_name)
44
+ path_parameters["action"] = action_name.to_s
45
+ end
46
+
47
+ def if_modified_since=(last_modified)
48
+ @env['HTTP_IF_MODIFIED_SINCE'] = last_modified
49
+ end
50
+
51
+ def if_none_match=(etag)
52
+ @env['HTTP_IF_NONE_MATCH'] = etag
53
+ end
54
+
55
+ def remote_addr=(addr)
56
+ @env['REMOTE_ADDR'] = addr
57
+ end
58
+
59
+ def user_agent=(user_agent)
60
+ @env['HTTP_USER_AGENT'] = user_agent
61
+ end
62
+
63
+ def accept=(mime_types)
64
+ @env.delete('action_dispatch.request.accepts')
65
+ @env['HTTP_ACCEPT'] = Array(mime_types).collect { |mime_types| mime_types.to_s }.join(",")
66
+ end
67
+
68
+ def cookies
69
+ @cookies ||= super
70
+ end
71
+
72
+ private
73
+ def write_cookies!
74
+ unless @cookies.blank?
75
+ @env['HTTP_COOKIE'] = @cookies.map { |name, value| "#{name}=#{value};" }.join(' ')
76
+ end
77
+ end
78
+
79
+ def delete_nil_values!
80
+ @env.delete_if { |k, v| v.nil? }
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,136 @@
1
+ module ActionDispatch
2
+ # Integration test methods such as ActionDispatch::Integration::Session#get
3
+ # and ActionDispatch::Integration::Session#post return objects of class
4
+ # TestResponse, which represent the HTTP response results of the requested
5
+ # controller actions.
6
+ #
7
+ # See Response for more information on controller response objects.
8
+ class TestResponse < Response
9
+ def self.from_response(response)
10
+ new.tap do |resp|
11
+ resp.status = response.status
12
+ resp.headers = response.headers
13
+ resp.body = response.body
14
+ end
15
+ end
16
+
17
+ module DeprecatedHelpers
18
+ def template
19
+ ActiveSupport::Deprecation.warn("response.template has been deprecated. Use controller.template instead", caller)
20
+ @template
21
+ end
22
+ attr_writer :template
23
+
24
+ def session
25
+ ActiveSupport::Deprecation.warn("response.session has been deprecated. Use request.session instead", caller)
26
+ @request.session
27
+ end
28
+
29
+ def assigns
30
+ ActiveSupport::Deprecation.warn("response.assigns has been deprecated. Use controller.assigns instead", caller)
31
+ @template.controller.assigns
32
+ end
33
+
34
+ def layout
35
+ ActiveSupport::Deprecation.warn("response.layout has been deprecated. Use template.layout instead", caller)
36
+ @template.layout
37
+ end
38
+
39
+ def redirected_to
40
+ ::ActiveSupport::Deprecation.warn("response.redirected_to is deprecated. Use response.redirect_url instead", caller)
41
+ redirect_url
42
+ end
43
+
44
+ def redirect_url_match?(pattern)
45
+ ::ActiveSupport::Deprecation.warn("response.redirect_url_match? is deprecated. Use assert_match(/foo/, response.redirect_url) instead", caller)
46
+ return false if redirect_url.nil?
47
+ p = Regexp.new(pattern) if pattern.class == String
48
+ p = pattern if pattern.class == Regexp
49
+ return false if p.nil?
50
+ p.match(redirect_url) != nil
51
+ end
52
+
53
+ # Returns the template of the file which was used to
54
+ # render this response (or nil)
55
+ def rendered
56
+ ActiveSupport::Deprecation.warn("response.rendered has been deprecated. Use tempate.rendered instead", caller)
57
+ @template.instance_variable_get(:@_rendered)
58
+ end
59
+
60
+ # A shortcut to the flash. Returns an empty hash if no session flash exists.
61
+ def flash
62
+ ActiveSupport::Deprecation.warn("response.flash has been deprecated. Use request.flash instead", caller)
63
+ request.session['flash'] || {}
64
+ end
65
+
66
+ # Do we have a flash?
67
+ def has_flash?
68
+ ActiveSupport::Deprecation.warn("response.has_flash? has been deprecated. Use flash.any? instead", caller)
69
+ !flash.empty?
70
+ end
71
+
72
+ # Do we have a flash that has contents?
73
+ def has_flash_with_contents?
74
+ ActiveSupport::Deprecation.warn("response.has_flash_with_contents? has been deprecated. Use flash.any? instead", caller)
75
+ !flash.empty?
76
+ end
77
+
78
+ # Does the specified flash object exist?
79
+ def has_flash_object?(name=nil)
80
+ ActiveSupport::Deprecation.warn("response.has_flash_object? has been deprecated. Use flash[name] instead", caller)
81
+ !flash[name].nil?
82
+ end
83
+
84
+ # Does the specified object exist in the session?
85
+ def has_session_object?(name=nil)
86
+ ActiveSupport::Deprecation.warn("response.has_session_object? has been deprecated. Use session[name] instead", caller)
87
+ !session[name].nil?
88
+ end
89
+
90
+ # A shortcut to the template.assigns
91
+ def template_objects
92
+ ActiveSupport::Deprecation.warn("response.template_objects has been deprecated. Use tempate.assigns instead", caller)
93
+ @template.assigns || {}
94
+ end
95
+
96
+ # Does the specified template object exist?
97
+ def has_template_object?(name=nil)
98
+ ActiveSupport::Deprecation.warn("response.has_template_object? has been deprecated. Use tempate.assigns[name].nil? instead", caller)
99
+ !template_objects[name].nil?
100
+ end
101
+
102
+ # Returns binary content (downloadable file), converted to a String
103
+ def binary_content
104
+ ActiveSupport::Deprecation.warn("response.binary_content has been deprecated. Use response.body instead", caller)
105
+ body
106
+ end
107
+ end
108
+ include DeprecatedHelpers
109
+
110
+ # Was the response successful?
111
+ def success?
112
+ (200..299).include?(response_code)
113
+ end
114
+
115
+ # Was the URL not found?
116
+ def missing?
117
+ response_code == 404
118
+ end
119
+
120
+ # Were we redirected?
121
+ def redirect?
122
+ (300..399).include?(response_code)
123
+ end
124
+
125
+ # Was there a server-side error?
126
+ def error?
127
+ (500..599).include?(response_code)
128
+ end
129
+ alias_method :server_error?, :error?
130
+
131
+ # Was there a client client?
132
+ def client_error?
133
+ (400..499).include?(response_code)
134
+ end
135
+ end
136
+ end
@@ -1,8 +1,8 @@
1
1
  module ActionPack #:nodoc:
2
2
  module VERSION #:nodoc:
3
- MAJOR = 2
4
- MINOR = 3
5
- TINY = 18
3
+ MAJOR = 3
4
+ MINOR = 0
5
+ TINY = "0.beta"
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -21,38 +21,41 @@
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
23
 
24
- begin
25
- require 'active_support'
26
- rescue LoadError
27
- activesupport_path = "#{File.dirname(__FILE__)}/../../activesupport/lib"
28
- if File.directory?(activesupport_path)
29
- $:.unshift activesupport_path
30
- require 'active_support'
31
- end
32
- end
24
+ activesupport_path = File.expand_path('../../../activesupport/lib', __FILE__)
25
+ $:.unshift(activesupport_path) if File.directory?(activesupport_path) && !$:.include?(activesupport_path)
26
+ require 'active_support/ruby/shim'
27
+ require 'active_support/core_ext/class/attribute_accessors'
28
+
29
+ require 'action_pack'
33
30
 
34
31
  module ActionView
35
- def self.load_all!
36
- [Base, InlineTemplate, TemplateError]
32
+ extend ActiveSupport::Autoload
33
+
34
+ eager_autoload do
35
+ autoload :Context
36
+ autoload :Template
37
+ autoload :Helpers
38
+
39
+ autoload_under "render" do
40
+ autoload :Partials
41
+ autoload :Rendering
42
+ end
43
+
44
+ autoload :MissingTemplate, 'action_view/base'
45
+ autoload :Resolver, 'action_view/template/resolver'
46
+ autoload :PathResolver, 'action_view/template/resolver'
47
+ autoload :PathSet, 'action_view/paths'
48
+ autoload :FileSystemResolverWithFallback, 'action_view/template/resolver'
49
+
50
+ autoload :TemplateError, 'action_view/template/error'
51
+ autoload :TemplateHandler, 'action_view/template'
52
+ autoload :TemplateHandlers, 'action_view/template'
37
53
  end
38
54
 
39
- autoload :Base, 'action_view/base'
40
- autoload :Helpers, 'action_view/helpers'
41
- autoload :InlineTemplate, 'action_view/inline_template'
42
- autoload :Partials, 'action_view/partials'
43
- autoload :PathSet, 'action_view/paths'
44
- autoload :Renderable, 'action_view/renderable'
45
- autoload :RenderablePartial, 'action_view/renderable_partial'
46
- autoload :Template, 'action_view/template'
47
- autoload :ReloadableTemplate, 'action_view/reloadable_template'
48
- autoload :TemplateError, 'action_view/template_error'
49
- autoload :TemplateHandler, 'action_view/template_handler'
50
- autoload :TemplateHandlers, 'action_view/template_handlers'
51
- autoload :Helpers, 'action_view/helpers'
55
+ autoload :TestCase, 'action_view/test_case'
52
56
  end
53
57
 
54
58
  require 'active_support/core_ext/string/output_safety'
55
-
56
- ActionView::SafeBuffer = ActiveSupport::Deprecation::DeprecatedConstantProxy.new('ActionView::SafeBuffer', 'ActiveSupport::SafeBuffer')
59
+ require 'action_view/base'
57
60
 
58
61
  I18n.load_path << "#{File.dirname(__FILE__)}/action_view/locale/en.yml"
@@ -1,3 +1,7 @@
1
+ require 'active_support/core_ext/module/attr_internal'
2
+ require 'active_support/core_ext/module/delegation'
3
+ require 'active_support/core_ext/class/attribute'
4
+
1
5
  module ActionView #:nodoc:
2
6
  class ActionViewError < StandardError #:nodoc:
3
7
  end
@@ -5,12 +9,18 @@ module ActionView #:nodoc:
5
9
  class MissingTemplate < ActionViewError #:nodoc:
6
10
  attr_reader :path
7
11
 
8
- def initialize(paths, path, template_format = nil)
12
+ def initialize(paths, path, details, partial)
9
13
  @path = path
10
- full_template_path = path.include?('.') ? path : "#{path}.erb"
11
14
  display_paths = paths.compact.join(":")
12
- template_type = (path =~ /layouts/i) ? 'layout' : 'template'
13
- super("Missing #{template_type} #{full_template_path} in view path #{display_paths}")
15
+ template_type = if partial
16
+ "partial"
17
+ elsif path =~ /layouts/i
18
+ 'layout'
19
+ else
20
+ 'template'
21
+ end
22
+
23
+ super("Missing #{template_type} #{path} with #{details.inspect} in view path #{display_paths}")
14
24
  end
15
25
  end
16
26
 
@@ -160,19 +170,39 @@ module ActionView #:nodoc:
160
170
  #
161
171
  # See the ActionView::Helpers::PrototypeHelper::GeneratorMethods documentation for more details.
162
172
  class Base
163
- include Helpers, Partials, ::ERB::Util
173
+ module Subclasses
174
+ end
175
+
176
+ include Helpers, Rendering, Partials, ::ERB::Util
177
+
178
+ def config
179
+ self.config = DEFAULT_CONFIG unless @config
180
+ @config
181
+ end
182
+
183
+ def config=(config)
184
+ @config = ActiveSupport::OrderedOptions.new.merge(config)
185
+ end
186
+
164
187
  extend ActiveSupport::Memoizable
165
188
 
166
- attr_accessor :base_path, :assigns, :template_extension
167
- attr_accessor :controller
189
+ attr_accessor :base_path, :assigns, :template_extension, :formats
190
+ attr_internal :captures
168
191
 
169
- attr_writer :template_format
192
+ def reset_formats(formats)
193
+ @formats = formats
170
194
 
171
- attr_accessor :output_buffer
195
+ if defined?(AbstractController::HashKey)
196
+ # This is expensive, but we need to reset this when the format is updated,
197
+ # which currently only happens
198
+ Thread.current[:format_locale_key] =
199
+ AbstractController::HashKey.get(self.class, formats, I18n.locale)
200
+ end
201
+ end
172
202
 
173
203
  class << self
174
- delegate :erb_trim_mode=, :to => 'ActionView::TemplateHandlers::ERB'
175
- delegate :logger, :to => 'ActionController::Base'
204
+ delegate :erb_trim_mode=, :to => 'ActionView::Template::Handlers::ERB'
205
+ delegate :logger, :to => 'ActionController::Base', :allow_nil => true
176
206
  end
177
207
 
178
208
  @@debug_rjs = false
@@ -189,174 +219,97 @@ module ActionView #:nodoc:
189
219
 
190
220
  # :nodoc:
191
221
  def self.xss_safe?
192
- false
222
+ true
193
223
  end
194
224
 
195
225
  def self.cache_template_loading?
196
226
  ActionController::Base.allow_concurrency || (cache_template_loading.nil? ? !ActiveSupport::Dependencies.load? : cache_template_loading)
197
227
  end
198
228
 
199
- attr_internal :request
200
-
201
- delegate :request_forgery_protection_token, :params, :session, :cookies, :response, :headers,
202
- :flash, :logger, :action_name, :controller_name, :to => :controller
229
+ attr_internal :request, :layout
203
230
 
204
- module CompiledTemplates #:nodoc:
205
- # holds compiled template code
231
+ def controller_path
232
+ @controller_path ||= controller && controller.controller_path
206
233
  end
207
- include CompiledTemplates
234
+
235
+ delegate :request_forgery_protection_token, :template, :params, :session, :cookies, :response, :headers,
236
+ :flash, :action_name, :controller_name, :to => :controller
237
+
238
+ delegate :logger, :to => :controller, :allow_nil => true
239
+
240
+ delegate :find, :to => :view_paths
241
+
242
+ include Context
208
243
 
209
244
  def self.process_view_paths(value)
210
245
  ActionView::PathSet.new(Array(value))
211
246
  end
212
247
 
248
+ class_attribute :helpers
213
249
  attr_reader :helpers
214
250
 
215
- class ProxyModule < Module
216
- def initialize(receiver)
217
- @receiver = receiver
218
- end
251
+ def self.for_controller(controller)
252
+ @views ||= {}
253
+
254
+ # TODO: Decouple this so helpers are a separate concern in AV just like
255
+ # they are in AC.
256
+ if controller.class.respond_to?(:_helper_serial)
257
+ klass = @views[controller.class._helper_serial] ||= Class.new(self) do
258
+ # Try to make stack traces clearer
259
+ class_eval <<-ruby_eval, __FILE__, __LINE__ + 1
260
+ def self.name
261
+ "ActionView for #{controller.class}"
262
+ end
219
263
 
220
- def include(*args)
221
- super(*args)
222
- @receiver.extend(*args)
264
+ def inspect
265
+ "#<#{self.class.name}>"
266
+ end
267
+ ruby_eval
268
+
269
+ if controller.respond_to?(:_helpers)
270
+ include controller._helpers
271
+ self.helpers = controller._helpers
272
+ end
273
+ end
274
+ else
275
+ klass = self
223
276
  end
277
+
278
+ klass.new(controller.class.view_paths, {}, controller)
224
279
  end
225
280
 
226
- def initialize(view_paths = [], assigns_for_first_render = {}, controller = nil)#:nodoc:
227
- @assigns = assigns_for_first_render
228
- @assigns_added = nil
229
- @controller = controller
230
- @helpers = ProxyModule.new(self)
231
- self.view_paths = view_paths
281
+ def initialize(view_paths = [], assigns_for_first_render = {}, controller = nil, formats = nil)#:nodoc:
282
+ @config = nil
283
+ @formats = formats
284
+ @assigns = assigns_for_first_render.each { |key, value| instance_variable_set("@#{key}", value) }
285
+ @helpers = self.class.helpers || Module.new
232
286
 
233
- @_first_render = nil
234
- @_current_render = nil
287
+ @_controller = controller
288
+ @_content_for = Hash.new {|h,k| h[k] = ActiveSupport::SafeBuffer.new }
289
+ @_virtual_path = nil
290
+ self.view_paths = view_paths
235
291
  end
236
292
 
293
+ attr_internal :controller, :template
237
294
  attr_reader :view_paths
238
295
 
239
296
  def view_paths=(paths)
240
297
  @view_paths = self.class.process_view_paths(paths)
241
- # we might be using ReloadableTemplates, so we need to let them know this a new request
242
- @view_paths.load!
243
298
  end
244
299
 
245
- # Returns the result of a render that's dictated by the options hash. The primary options are:
246
- #
247
- # * <tt>:partial</tt> - See ActionView::Partials.
248
- # * <tt>:update</tt> - Calls update_page with the block given.
249
- # * <tt>:file</tt> - Renders an explicit template file (this used to be the old default), add :locals to pass in those.
250
- # * <tt>:inline</tt> - Renders an inline template similar to how it's done in the controller.
251
- # * <tt>:text</tt> - Renders the text passed in out.
252
- #
253
- # If no options hash is passed or :update specified, the default is to render a partial and use the second parameter
254
- # as the locals hash.
255
- def render(options = {}, local_assigns = {}, &block) #:nodoc:
256
- local_assigns ||= {}
257
-
258
- case options
259
- when Hash
260
- options = options.reverse_merge(:locals => {})
261
- if options[:layout]
262
- _render_with_layout(options, local_assigns, &block)
263
- elsif options[:file]
264
- template = self.view_paths.find_template(options[:file], template_format)
265
- template.render_template(self, options[:locals])
266
- elsif options[:partial]
267
- render_partial(options)
268
- elsif options[:inline]
269
- InlineTemplate.new(options[:inline], options[:type]).render(self, options[:locals])
270
- elsif options[:text]
271
- options[:text]
272
- end
273
- when :update
274
- update_page(&block)
275
- else
276
- render_partial(:partial => options, :locals => local_assigns)
277
- end
300
+ def punctuate_body!(part)
301
+ flush_output_buffer
302
+ response.body_parts << part
303
+ nil
278
304
  end
279
305
 
280
- # The format to be used when choosing between multiple templates with
281
- # the same name but differing formats. See +Request#template_format+
282
- # for more details.
283
- def template_format
284
- if defined? @template_format
285
- @template_format
286
- elsif controller && controller.respond_to?(:request)
287
- @template_format = controller.request.template_format.to_sym
288
- else
289
- @template_format = :html
306
+ # Evaluates the local assigns and controller ivars, pushes them to the view.
307
+ def _evaluate_assigns_and_ivars #:nodoc:
308
+ if controller
309
+ variables = controller.instance_variable_names
310
+ variables -= controller.protected_instance_variables if controller.respond_to?(:protected_instance_variables)
311
+ variables.each { |name| instance_variable_set(name, controller.instance_variable_get(name)) }
290
312
  end
291
313
  end
292
-
293
- # Access the current template being rendered.
294
- # Returns a ActionView::Template object.
295
- def template
296
- @_current_render
297
- end
298
-
299
- def template=(template) #:nodoc:
300
- @_first_render ||= template
301
- @_current_render = template
302
- end
303
-
304
- def with_template(current_template)
305
- last_template, self.template = template, current_template
306
- yield
307
- ensure
308
- self.template = last_template
309
- end
310
-
311
- private
312
- # Evaluates the local assigns and controller ivars, pushes them to the view.
313
- def _evaluate_assigns_and_ivars #:nodoc:
314
- unless @assigns_added
315
- @assigns.each { |key, value| instance_variable_set("@#{key}", value) }
316
- _copy_ivars_from_controller
317
- @assigns_added = true
318
- end
319
- end
320
-
321
- def _copy_ivars_from_controller #:nodoc:
322
- if @controller
323
- variables = @controller.instance_variable_names
324
- variables -= @controller.protected_instance_variables if @controller.respond_to?(:protected_instance_variables)
325
- variables.each { |name| instance_variable_set(name, @controller.instance_variable_get(name)) }
326
- end
327
- end
328
-
329
- def _set_controller_content_type(content_type) #:nodoc:
330
- if controller.respond_to?(:response)
331
- controller.response.content_type ||= content_type
332
- end
333
- end
334
-
335
- def _render_with_layout(options, local_assigns, &block) #:nodoc:
336
- partial_layout = options.delete(:layout)
337
-
338
- if block_given?
339
- begin
340
- @_proc_for_layout = block
341
- concat(render(options.merge(:partial => partial_layout)))
342
- ensure
343
- @_proc_for_layout = nil
344
- end
345
- else
346
- begin
347
- original_content_for_layout = @content_for_layout if defined?(@content_for_layout)
348
- @content_for_layout = render(options)
349
-
350
- if (options[:inline] || options[:file] || options[:text])
351
- @cached_content_for_layout = @content_for_layout
352
- render(:file => partial_layout, :locals => local_assigns)
353
- else
354
- render(options.merge(:partial => partial_layout))
355
- end
356
- ensure
357
- @content_for_layout = original_content_for_layout
358
- end
359
- end
360
- end
361
314
  end
362
315
  end