actionpack 2.3.18 → 3.0.0.beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -9,7 +9,7 @@
9
9
  delimiter: ","
10
10
  # Number of decimals, behind the separator (the number 1 with a precision of 2 gives: 1.00)
11
11
  precision: 3
12
-
12
+
13
13
  # Used in number_to_currency()
14
14
  currency:
15
15
  format:
@@ -20,15 +20,15 @@
20
20
  separator: "."
21
21
  delimiter: ","
22
22
  precision: 2
23
-
23
+
24
24
  # Used in number_to_percentage()
25
25
  percentage:
26
26
  format:
27
27
  # These three are to override number.format and are optional
28
- # separator:
28
+ # separator:
29
29
  delimiter: ""
30
- # precision:
31
-
30
+ # precision:
31
+
32
32
  # Used in number_to_precision()
33
33
  precision:
34
34
  format:
@@ -36,12 +36,12 @@
36
36
  # separator:
37
37
  delimiter: ""
38
38
  # precision:
39
-
39
+
40
40
  # Used in number_to_human_size()
41
41
  human:
42
42
  format:
43
43
  # These three are to override number.format and are optional
44
- # separator:
44
+ # separator:
45
45
  delimiter: ""
46
46
  precision: 1
47
47
  storage_units:
@@ -63,37 +63,37 @@
63
63
  half_a_minute: "half a minute"
64
64
  less_than_x_seconds:
65
65
  one: "less than 1 second"
66
- other: "less than %{count} seconds"
66
+ other: "less than {{count}} seconds"
67
67
  x_seconds:
68
68
  one: "1 second"
69
- other: "%{count} seconds"
69
+ other: "{{count}} seconds"
70
70
  less_than_x_minutes:
71
71
  one: "less than a minute"
72
- other: "less than %{count} minutes"
72
+ other: "less than {{count}} minutes"
73
73
  x_minutes:
74
74
  one: "1 minute"
75
- other: "%{count} minutes"
75
+ other: "{{count}} minutes"
76
76
  about_x_hours:
77
77
  one: "about 1 hour"
78
- other: "about %{count} hours"
78
+ other: "about {{count}} hours"
79
79
  x_days:
80
80
  one: "1 day"
81
- other: "%{count} days"
81
+ other: "{{count}} days"
82
82
  about_x_months:
83
83
  one: "about 1 month"
84
- other: "about %{count} months"
84
+ other: "about {{count}} months"
85
85
  x_months:
86
86
  one: "1 month"
87
- other: "%{count} months"
87
+ other: "{{count}} months"
88
88
  about_x_years:
89
89
  one: "about 1 year"
90
- other: "about %{count} years"
90
+ other: "about {{count}} years"
91
91
  over_x_years:
92
92
  one: "over 1 year"
93
- other: "over %{count} years"
93
+ other: "over {{count}} years"
94
94
  almost_x_years:
95
95
  one: "almost 1 year"
96
- other: "almost %{count} years"
96
+ other: "almost {{count}} years"
97
97
  prompts:
98
98
  year: "Year"
99
99
  month: "Month"
@@ -102,16 +102,22 @@
102
102
  minute: "Minute"
103
103
  second: "Seconds"
104
104
 
105
- activerecord:
106
- errors:
107
- template:
108
- header:
109
- one: "1 error prohibited this %{model} from being saved"
110
- other: "%{count} errors prohibited this %{model} from being saved"
111
- # The variable :count is also available
112
- body: "There were problems with the following fields:"
105
+ errors:
106
+ template:
107
+ header:
108
+ one: "1 error prohibited this {{model}} from being saved"
109
+ other: "{{count}} errors prohibited this {{model}} from being saved"
110
+ # The variable :count is also available
111
+ body: "There were problems with the following fields:"
113
112
 
114
- support:
113
+ helpers:
115
114
  select:
116
- # default value for :prompt => true in FormOptionsHelper
115
+ # Default value for :prompt => true in FormOptionsHelper
117
116
  prompt: "Please select"
117
+
118
+ # Default translation keys for submit FormHelper
119
+ submit:
120
+ create: 'Create {{model}}'
121
+ update: 'Update {{model}}'
122
+ submit: 'Save {{model}}'
123
+
@@ -1,17 +1,17 @@
1
1
  module ActionView #:nodoc:
2
2
  class PathSet < Array #:nodoc:
3
- def self.type_cast(obj)
3
+ def self.type_cast(obj, cache = nil)
4
+ # TODO: Clean this up
4
5
  if obj.is_a?(String)
5
- if Base.cache_template_loading?
6
- Template::EagerPath.new(obj.to_s)
7
- else
8
- ReloadableTemplate::ReloadablePath.new(obj.to_s)
6
+ if cache.nil?
7
+ cache = !defined?(Rails.application) || Rails.application.config.cache_classes
9
8
  end
9
+ FileSystemResolverWithFallback.new(obj, :cache => cache)
10
10
  else
11
11
  obj
12
12
  end
13
13
  end
14
-
14
+
15
15
  def initialize(*args)
16
16
  super(*args).map! { |obj| self.class.type_cast(obj) }
17
17
  end
@@ -35,9 +35,26 @@ module ActionView #:nodoc:
35
35
  def unshift(*objs)
36
36
  super(*objs.map { |obj| self.class.type_cast(obj) })
37
37
  end
38
+
39
+ def find(path, details = {}, prefix = nil, partial = false)
40
+ template_path = path
41
+
42
+ each do |load_path|
43
+ if template = load_path.find(template_path, details, prefix, partial)
44
+ return template
45
+ end
46
+ end
47
+
48
+ raise ActionView::MissingTemplate.new(self, "#{prefix}/#{path}", details, partial)
49
+ end
38
50
 
39
- def load!
40
- each(&:load!)
51
+ def exists?(path, extension = nil, prefix = nil, partial = false)
52
+ template_path = path.sub(/^\//, '')
53
+
54
+ each do |load_path|
55
+ return true if template = load_path.find(template_path, extension, prefix, partial)
56
+ end
57
+ false
41
58
  end
42
59
 
43
60
  def find_template(original_template_path, format = nil, html_fallback = true)
@@ -45,31 +62,17 @@ module ActionView #:nodoc:
45
62
  template_path = original_template_path.sub(/^\//, '')
46
63
 
47
64
  each do |load_path|
48
- if format && (template = load_path["#{template_path}.#{I18n.locale}.#{format}"])
49
- return template
50
- # Try the default locale version if the current locale doesn't have one
51
- # (i.e. you haven't translated this view to German yet, but you have the English version on hand)
52
- elsif format && (template = load_path["#{template_path}.#{I18n.default_locale}.#{format}"])
53
- return template
54
- elsif format && (template = load_path["#{template_path}.#{format}"])
55
- return template
56
- elsif template = load_path["#{template_path}.#{I18n.locale}"]
57
- return template
58
- elsif template = load_path["#{template_path}.#{I18n.default_locale}"]
59
- return template
60
- elsif template = load_path[template_path]
65
+ if template = load_path.find(template_path, format)
61
66
  return template
62
67
  # Try to find html version if the format is javascript
63
68
  elsif format == :js && html_fallback && template = load_path["#{template_path}.#{I18n.locale}.html"]
64
69
  return template
65
- elsif format == :js && html_fallback && template = load_path["#{template_path}.#{I18n.default_locale}.html"]
66
- return template
67
70
  elsif format == :js && html_fallback && template = load_path["#{template_path}.html"]
68
71
  return template
69
72
  end
70
73
  end
71
74
 
72
- return Template.new(original_template_path) if File.file?(original_template_path)
75
+ return Template.new(original_template_path, original_template_path.to_s =~ /\A\// ? "" : ".") if File.file?(original_template_path)
73
76
 
74
77
  raise MissingTemplate.new(self, original_template_path, format)
75
78
  end
@@ -0,0 +1,17 @@
1
+ require "action_view"
2
+ require "rails"
3
+
4
+ module ActionView
5
+ class Railtie < Rails::Railtie
6
+ railtie_name :action_view
7
+
8
+ require "action_view/railties/subscriber"
9
+ subscriber ActionView::Railties::Subscriber.new
10
+
11
+ initializer "action_view.cache_asset_timestamps" do |app|
12
+ unless app.config.cache_classes
13
+ ActionView::Helpers::AssetTagHelper.cache_asset_timestamps = false
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,24 @@
1
+ module ActionView
2
+ module Railties
3
+ class Subscriber < Rails::Subscriber
4
+ def render_template(event)
5
+ message = "Rendered #{from_rails_root(event.payload[:identifier])}"
6
+ message << " within #{from_rails_root(event.payload[:layout])}" if event.payload[:layout]
7
+ message << (" (%.1fms)" % event.duration)
8
+ info(message)
9
+ end
10
+ alias :render_partial :render_template
11
+ alias :render_collection :render_template
12
+
13
+ def logger
14
+ ActionController::Base.logger
15
+ end
16
+
17
+ protected
18
+
19
+ def from_rails_root(string)
20
+ string.sub("#{Rails.root}/", "").sub(/^app\/views\//, "")
21
+ end
22
+ end
23
+ end
24
+ end
@@ -170,72 +170,182 @@ module ActionView
170
170
  # <%- end -%>
171
171
  # <% end %>
172
172
  module Partials
173
- extend ActiveSupport::Memoizable
173
+ extend ActiveSupport::Concern
174
174
 
175
- private
176
- def render_partial(options = {}) #:nodoc:
177
- local_assigns = options[:locals] || {}
175
+ class PartialRenderer
176
+ PARTIAL_NAMES = Hash.new {|h,k| h[k] = {} }
177
+ TEMPLATES = Hash.new {|h,k| h[k] = {} }
178
+
179
+ attr_reader :template
180
+
181
+ def initialize(view_context, options, block)
182
+ @view = view_context
183
+ @partial_names = PARTIAL_NAMES[@view.controller.class]
184
+
185
+ key = Thread.current[:format_locale_key]
186
+ @templates = TEMPLATES[key] if key
187
+
188
+ setup(options, block)
189
+ end
190
+
191
+ def setup(options, block)
192
+ partial = options[:partial]
178
193
 
179
- case partial_path = options[:partial]
180
- when String, Symbol, NilClass
181
- if options.has_key?(:collection)
182
- render_partial_collection(options)
194
+ @options = options
195
+ @locals = options[:locals] || {}
196
+ @block = block
197
+
198
+ if String === partial
199
+ @object = options[:object]
200
+ @path = partial
201
+ @collection = collection
202
+ else
203
+ @object = partial
204
+
205
+ if @collection = collection
206
+ paths = @collection_paths = @collection.map { |o| partial_path(o) }
207
+ @path = paths.uniq.size == 1 ? paths.first : nil
183
208
  else
184
- _pick_partial_template(partial_path).render_partial(self, options[:object], local_assigns)
209
+ @path = partial_path
210
+ end
211
+ end
212
+ end
213
+
214
+ def render
215
+ identifier = ((@template = find_template) ? @template.identifier : @path)
216
+
217
+ if @collection
218
+ ActiveSupport::Notifications.instrument("action_view.render_collection",
219
+ :identifier => identifier || "collection", :count => @collection.size) do
220
+ render_collection
185
221
  end
186
- when ActionView::Helpers::FormBuilder
187
- builder_partial_path = partial_path.class.to_s.demodulize.underscore.sub(/_builder$/, '')
188
- local_assigns.merge!(builder_partial_path.to_sym => partial_path)
189
- render_partial(:partial => builder_partial_path, :object => options[:object], :locals => local_assigns)
190
222
  else
191
- if Array === partial_path ||
192
- (defined?(ActiveRecord) &&
193
- (ActiveRecord::Associations::AssociationCollection === partial_path ||
194
- ActiveRecord::NamedScope::Scope === partial_path))
195
- render_partial_collection(options.except(:partial).merge(:collection => partial_path))
196
- else
197
- object = partial_path
198
- render_partial(
199
- :partial => ActionController::RecordIdentifier.partial_path(object, controller.class.controller_path),
200
- :object => object,
201
- :locals => local_assigns
202
- )
223
+ content = ActiveSupport::Notifications.instrument("action_view.render_partial",
224
+ :identifier => identifier) do
225
+ render_partial
226
+ end
227
+
228
+ if !@block && (layout = @options[:layout])
229
+ content = @view._render_layout(find_template(layout), @locals){ content }
203
230
  end
231
+ content
204
232
  end
205
233
  end
206
234
 
207
- def render_partial_collection(options = {}) #:nodoc:
208
- return nil if options[:collection].blank?
235
+ def render_collection
236
+ return nil if @collection.blank?
209
237
 
210
- partial = options[:partial]
211
- spacer = options[:spacer_template] ? render(:partial => options[:spacer_template]) : ''
212
- local_assigns = options[:locals] ? options[:locals].clone : {}
213
- as = options[:as]
214
-
215
- index = 0
216
- options[:collection].map do |object|
217
- _partial_path ||= partial ||
218
- ActionController::RecordIdentifier.partial_path(object, controller.class.controller_path)
219
- template = _pick_partial_template(_partial_path)
220
- local_assigns[template.counter_name] = index
221
- local_assigns["#{as.to_s}_counter".to_sym] = local_assigns[template.counter_name] if as
222
- result = template.render_partial(self, object, local_assigns.dup, as)
223
- index += 1
224
- result
225
- end.join(spacer).html_safe
238
+ if @options.key?(:spacer_template)
239
+ spacer = find_template(@options[:spacer_template]).render(@view, @locals)
240
+ end
241
+
242
+ result = @template ? collection_with_template : collection_without_template
243
+ result.join(spacer).html_safe
226
244
  end
227
245
 
228
- def _pick_partial_template(partial_path) #:nodoc:
229
- if partial_path.include?('/')
230
- path = File.join(File.dirname(partial_path), "_#{File.basename(partial_path)}")
231
- elsif controller
232
- path = "#{controller.class.controller_path}/_#{partial_path}"
246
+ def collection_with_template(template = @template)
247
+ segments, locals, as = [], @locals, @options[:as] || template.variable_name
248
+
249
+ counter_name = template.counter_name
250
+ locals[counter_name] = -1
251
+
252
+ @collection.each do |object|
253
+ locals[counter_name] += 1
254
+ locals[as] = object
255
+
256
+ segments << template.render(@view, locals)
257
+ end
258
+
259
+ @template = template
260
+ segments
261
+ end
262
+
263
+ def collection_without_template(collection_paths = @collection_paths)
264
+ segments, locals, as = [], @locals, @options[:as]
265
+ index, template = -1, nil
266
+
267
+ @collection.each_with_index do |object, i|
268
+ template = find_template(collection_paths[i])
269
+ locals[template.counter_name] = (index += 1)
270
+ locals[as || template.variable_name] = object
271
+
272
+ segments << template.render(@view, locals)
273
+ end
274
+
275
+ @template = template
276
+ segments
277
+ end
278
+
279
+ def render_partial(object = @object)
280
+ locals, view = @locals, @view
281
+
282
+ object ||= locals[template.variable_name]
283
+ locals[@options[:as] || template.variable_name] = object
284
+
285
+ template.render(view, locals) do |*name|
286
+ view._layout_for(*name, &@block)
287
+ end
288
+ end
289
+
290
+ private
291
+ def collection
292
+ if @object.respond_to?(:to_ary)
293
+ @object
294
+ elsif @options.key?(:collection)
295
+ @options[:collection] || []
296
+ end
297
+ end
298
+
299
+ def find_template(path = @path)
300
+ unless @templates
301
+ path && _find_template(path)
233
302
  else
234
- path = "_#{partial_path}"
303
+ path && @templates[path] ||= _find_template(path)
235
304
  end
305
+ end
236
306
 
237
- self.view_paths.find_template(path, self.template_format)
307
+ def _find_template(path)
308
+ if controller = @view.controller
309
+ prefix = controller.controller_path unless path.include?(?/)
310
+ end
311
+
312
+ @view.find(path, {:formats => @view.formats}, prefix, true)
313
+ end
314
+
315
+ def partial_path(object = @object)
316
+ @partial_names[object.class] ||= begin
317
+ object = object.to_model if object.respond_to?(:to_model)
318
+
319
+ object.class.model_name.partial_path.dup.tap do |partial|
320
+ path = @view.controller_path
321
+ partial.insert(0, "#{File.dirname(path)}/") if path.include?(?/)
322
+ end
323
+ end
238
324
  end
239
- memoize :_pick_partial_template
325
+ end
326
+
327
+ def render_partial(options)
328
+ _evaluate_assigns_and_ivars
329
+
330
+ details = options[:_details]
331
+
332
+ # Is this needed
333
+ self.formats = details[:formats] if details
334
+ renderer = PartialRenderer.new(self, options, nil)
335
+ text = renderer.render
336
+ options[:_template] = renderer.template
337
+ text
338
+ end
339
+
340
+ def _render_partial(options, &block) #:nodoc:
341
+ if defined? @renderer
342
+ @renderer.setup(options, block)
343
+ else
344
+ @renderer = PartialRenderer.new(self, options, block)
345
+ end
346
+
347
+ @renderer.render
348
+ end
349
+
240
350
  end
241
351
  end