actionpack-rack-upgrade-2 2.3.15

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 (441) hide show
  1. data/CHANGELOG +5250 -0
  2. data/MIT-LICENSE +21 -0
  3. data/README +409 -0
  4. data/RUNNING_UNIT_TESTS +24 -0
  5. data/Rakefile +158 -0
  6. data/install.rb +30 -0
  7. data/lib/action_controller.rb +113 -0
  8. data/lib/action_controller/assertions/dom_assertions.rb +55 -0
  9. data/lib/action_controller/assertions/model_assertions.rb +21 -0
  10. data/lib/action_controller/assertions/response_assertions.rb +169 -0
  11. data/lib/action_controller/assertions/routing_assertions.rb +146 -0
  12. data/lib/action_controller/assertions/selector_assertions.rb +638 -0
  13. data/lib/action_controller/assertions/tag_assertions.rb +127 -0
  14. data/lib/action_controller/base.rb +1425 -0
  15. data/lib/action_controller/benchmarking.rb +107 -0
  16. data/lib/action_controller/caching.rb +71 -0
  17. data/lib/action_controller/caching/actions.rb +177 -0
  18. data/lib/action_controller/caching/fragments.rb +120 -0
  19. data/lib/action_controller/caching/pages.rb +152 -0
  20. data/lib/action_controller/caching/sweeper.rb +45 -0
  21. data/lib/action_controller/caching/sweeping.rb +55 -0
  22. data/lib/action_controller/cgi_ext.rb +15 -0
  23. data/lib/action_controller/cgi_ext/cookie.rb +112 -0
  24. data/lib/action_controller/cgi_ext/query_extension.rb +22 -0
  25. data/lib/action_controller/cgi_ext/stdinput.rb +24 -0
  26. data/lib/action_controller/cgi_process.rb +77 -0
  27. data/lib/action_controller/cookies.rb +197 -0
  28. data/lib/action_controller/dispatcher.rb +133 -0
  29. data/lib/action_controller/failsafe.rb +87 -0
  30. data/lib/action_controller/filters.rb +680 -0
  31. data/lib/action_controller/flash.rb +213 -0
  32. data/lib/action_controller/headers.rb +33 -0
  33. data/lib/action_controller/helpers.rb +225 -0
  34. data/lib/action_controller/http_authentication.rb +309 -0
  35. data/lib/action_controller/integration.rb +708 -0
  36. data/lib/action_controller/layout.rb +286 -0
  37. data/lib/action_controller/middleware_stack.rb +119 -0
  38. data/lib/action_controller/middlewares.rb +14 -0
  39. data/lib/action_controller/mime_responds.rb +193 -0
  40. data/lib/action_controller/mime_type.rb +212 -0
  41. data/lib/action_controller/mime_types.rb +21 -0
  42. data/lib/action_controller/params_parser.rb +77 -0
  43. data/lib/action_controller/performance_test.rb +15 -0
  44. data/lib/action_controller/polymorphic_routes.rb +189 -0
  45. data/lib/action_controller/rack_lint_patch.rb +36 -0
  46. data/lib/action_controller/record_identifier.rb +104 -0
  47. data/lib/action_controller/reloader.rb +54 -0
  48. data/lib/action_controller/request.rb +495 -0
  49. data/lib/action_controller/request_forgery_protection.rb +116 -0
  50. data/lib/action_controller/rescue.rb +183 -0
  51. data/lib/action_controller/resources.rb +682 -0
  52. data/lib/action_controller/response.rb +237 -0
  53. data/lib/action_controller/routing.rb +388 -0
  54. data/lib/action_controller/routing/builder.rb +197 -0
  55. data/lib/action_controller/routing/optimisations.rb +130 -0
  56. data/lib/action_controller/routing/recognition_optimisation.rb +167 -0
  57. data/lib/action_controller/routing/route.rb +265 -0
  58. data/lib/action_controller/routing/route_set.rb +503 -0
  59. data/lib/action_controller/routing/routing_ext.rb +49 -0
  60. data/lib/action_controller/routing/segments.rb +343 -0
  61. data/lib/action_controller/session/abstract_store.rb +276 -0
  62. data/lib/action_controller/session/cookie_store.rb +240 -0
  63. data/lib/action_controller/session/mem_cache_store.rb +60 -0
  64. data/lib/action_controller/session_management.rb +54 -0
  65. data/lib/action_controller/status_codes.rb +88 -0
  66. data/lib/action_controller/streaming.rb +181 -0
  67. data/lib/action_controller/string_coercion.rb +29 -0
  68. data/lib/action_controller/templates/rescues/_request_and_response.erb +24 -0
  69. data/lib/action_controller/templates/rescues/_trace.erb +26 -0
  70. data/lib/action_controller/templates/rescues/diagnostics.erb +11 -0
  71. data/lib/action_controller/templates/rescues/layout.erb +29 -0
  72. data/lib/action_controller/templates/rescues/missing_template.erb +2 -0
  73. data/lib/action_controller/templates/rescues/routing_error.erb +10 -0
  74. data/lib/action_controller/templates/rescues/template_error.erb +21 -0
  75. data/lib/action_controller/templates/rescues/unknown_action.erb +2 -0
  76. data/lib/action_controller/test_case.rb +209 -0
  77. data/lib/action_controller/test_process.rb +580 -0
  78. data/lib/action_controller/translation.rb +13 -0
  79. data/lib/action_controller/uploaded_file.rb +44 -0
  80. data/lib/action_controller/url_rewriter.rb +229 -0
  81. data/lib/action_controller/vendor/html-scanner.rb +16 -0
  82. data/lib/action_controller/vendor/html-scanner/html/document.rb +68 -0
  83. data/lib/action_controller/vendor/html-scanner/html/node.rb +537 -0
  84. data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +173 -0
  85. data/lib/action_controller/vendor/html-scanner/html/selector.rb +828 -0
  86. data/lib/action_controller/vendor/html-scanner/html/tokenizer.rb +105 -0
  87. data/lib/action_controller/vendor/html-scanner/html/version.rb +11 -0
  88. data/lib/action_controller/verification.rb +130 -0
  89. data/lib/action_pack.rb +24 -0
  90. data/lib/action_pack/version.rb +9 -0
  91. data/lib/action_view.rb +58 -0
  92. data/lib/action_view/base.rb +362 -0
  93. data/lib/action_view/helpers.rb +61 -0
  94. data/lib/action_view/helpers/active_record_helper.rb +305 -0
  95. data/lib/action_view/helpers/asset_tag_helper.rb +695 -0
  96. data/lib/action_view/helpers/atom_feed_helper.rb +198 -0
  97. data/lib/action_view/helpers/benchmark_helper.rb +54 -0
  98. data/lib/action_view/helpers/cache_helper.rb +39 -0
  99. data/lib/action_view/helpers/capture_helper.rb +136 -0
  100. data/lib/action_view/helpers/csrf_helper.rb +14 -0
  101. data/lib/action_view/helpers/date_helper.rb +989 -0
  102. data/lib/action_view/helpers/debug_helper.rb +38 -0
  103. data/lib/action_view/helpers/form_helper.rb +1118 -0
  104. data/lib/action_view/helpers/form_options_helper.rb +599 -0
  105. data/lib/action_view/helpers/form_tag_helper.rb +490 -0
  106. data/lib/action_view/helpers/javascript_helper.rb +208 -0
  107. data/lib/action_view/helpers/number_helper.rb +308 -0
  108. data/lib/action_view/helpers/prototype_helper.rb +1305 -0
  109. data/lib/action_view/helpers/raw_output_helper.rb +9 -0
  110. data/lib/action_view/helpers/record_identification_helper.rb +20 -0
  111. data/lib/action_view/helpers/record_tag_helper.rb +58 -0
  112. data/lib/action_view/helpers/sanitize_helper.rb +251 -0
  113. data/lib/action_view/helpers/scriptaculous_helper.rb +226 -0
  114. data/lib/action_view/helpers/tag_helper.rb +151 -0
  115. data/lib/action_view/helpers/text_helper.rb +597 -0
  116. data/lib/action_view/helpers/translation_helper.rb +67 -0
  117. data/lib/action_view/helpers/url_helper.rb +637 -0
  118. data/lib/action_view/inline_template.rb +19 -0
  119. data/lib/action_view/locale/en.yml +117 -0
  120. data/lib/action_view/partials.rb +241 -0
  121. data/lib/action_view/paths.rb +77 -0
  122. data/lib/action_view/reloadable_template.rb +117 -0
  123. data/lib/action_view/renderable.rb +109 -0
  124. data/lib/action_view/renderable_partial.rb +53 -0
  125. data/lib/action_view/template.rb +252 -0
  126. data/lib/action_view/template_error.rb +99 -0
  127. data/lib/action_view/template_handler.rb +34 -0
  128. data/lib/action_view/template_handlers.rb +48 -0
  129. data/lib/action_view/template_handlers/builder.rb +17 -0
  130. data/lib/action_view/template_handlers/erb.rb +25 -0
  131. data/lib/action_view/template_handlers/rjs.rb +13 -0
  132. data/lib/action_view/test_case.rb +162 -0
  133. data/lib/actionpack.rb +2 -0
  134. data/test/abstract_unit.rb +78 -0
  135. data/test/active_record_unit.rb +104 -0
  136. data/test/activerecord/active_record_store_test.rb +221 -0
  137. data/test/activerecord/render_partial_with_record_identification_test.rb +188 -0
  138. data/test/adv_attr_test.rb +20 -0
  139. data/test/controller/action_pack_assertions_test.rb +545 -0
  140. data/test/controller/addresses_render_test.rb +37 -0
  141. data/test/controller/assert_select_test.rb +735 -0
  142. data/test/controller/base_test.rb +217 -0
  143. data/test/controller/benchmark_test.rb +32 -0
  144. data/test/controller/caching_test.rb +743 -0
  145. data/test/controller/capture_test.rb +66 -0
  146. data/test/controller/content_type_test.rb +178 -0
  147. data/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
  148. data/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
  149. data/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
  150. data/test/controller/cookie_test.rb +208 -0
  151. data/test/controller/deprecation/deprecated_base_methods_test.rb +32 -0
  152. data/test/controller/dispatcher_test.rb +144 -0
  153. data/test/controller/dom_assertions_test.rb +53 -0
  154. data/test/controller/failsafe_test.rb +60 -0
  155. data/test/controller/fake_controllers.rb +33 -0
  156. data/test/controller/fake_models.rb +19 -0
  157. data/test/controller/filter_params_test.rb +52 -0
  158. data/test/controller/filters_test.rb +885 -0
  159. data/test/controller/flash_test.rb +174 -0
  160. data/test/controller/header_test.rb +14 -0
  161. data/test/controller/helper_test.rb +224 -0
  162. data/test/controller/html-scanner/cdata_node_test.rb +15 -0
  163. data/test/controller/html-scanner/document_test.rb +148 -0
  164. data/test/controller/html-scanner/node_test.rb +89 -0
  165. data/test/controller/html-scanner/sanitizer_test.rb +281 -0
  166. data/test/controller/html-scanner/tag_node_test.rb +238 -0
  167. data/test/controller/html-scanner/text_node_test.rb +50 -0
  168. data/test/controller/html-scanner/tokenizer_test.rb +131 -0
  169. data/test/controller/http_basic_authentication_test.rb +113 -0
  170. data/test/controller/http_digest_authentication_test.rb +254 -0
  171. data/test/controller/integration_test.rb +526 -0
  172. data/test/controller/layout_test.rb +215 -0
  173. data/test/controller/localized_templates_test.rb +24 -0
  174. data/test/controller/logging_test.rb +46 -0
  175. data/test/controller/middleware_stack_test.rb +90 -0
  176. data/test/controller/mime_responds_test.rb +536 -0
  177. data/test/controller/mime_type_test.rb +93 -0
  178. data/test/controller/output_escaping_test.rb +19 -0
  179. data/test/controller/polymorphic_routes_test.rb +297 -0
  180. data/test/controller/rack_test.rb +308 -0
  181. data/test/controller/record_identifier_test.rb +139 -0
  182. data/test/controller/redirect_test.rb +285 -0
  183. data/test/controller/reloader_test.rb +125 -0
  184. data/test/controller/render_test.rb +1783 -0
  185. data/test/controller/request/json_params_parsing_test.rb +65 -0
  186. data/test/controller/request/multipart_params_parsing_test.rb +177 -0
  187. data/test/controller/request/query_string_parsing_test.rb +120 -0
  188. data/test/controller/request/test_request_test.rb +35 -0
  189. data/test/controller/request/url_encoded_params_parsing_test.rb +146 -0
  190. data/test/controller/request/xml_params_parsing_test.rb +103 -0
  191. data/test/controller/request_forgery_protection_test.rb +233 -0
  192. data/test/controller/request_test.rb +398 -0
  193. data/test/controller/rescue_test.rb +541 -0
  194. data/test/controller/resources_test.rb +1393 -0
  195. data/test/controller/routing_test.rb +2592 -0
  196. data/test/controller/selector_test.rb +628 -0
  197. data/test/controller/send_file_test.rb +171 -0
  198. data/test/controller/session/abstract_store_test.rb +64 -0
  199. data/test/controller/session/cookie_store_test.rb +354 -0
  200. data/test/controller/session/mem_cache_store_test.rb +187 -0
  201. data/test/controller/session/test_session_test.rb +58 -0
  202. data/test/controller/test_test.rb +700 -0
  203. data/test/controller/translation_test.rb +26 -0
  204. data/test/controller/url_rewriter_test.rb +395 -0
  205. data/test/controller/verification_test.rb +270 -0
  206. data/test/controller/view_paths_test.rb +141 -0
  207. data/test/controller/webservice_test.rb +273 -0
  208. data/test/fixtures/_top_level_partial.html.erb +1 -0
  209. data/test/fixtures/_top_level_partial_only.erb +1 -0
  210. data/test/fixtures/addresses/list.erb +1 -0
  211. data/test/fixtures/alternate_helpers/foo_helper.rb +3 -0
  212. data/test/fixtures/bad_customers/_bad_customer.html.erb +1 -0
  213. data/test/fixtures/companies.yml +24 -0
  214. data/test/fixtures/company.rb +10 -0
  215. data/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +1 -0
  216. data/test/fixtures/content_type/render_default_for_rhtml.rhtml +1 -0
  217. data/test/fixtures/content_type/render_default_for_rjs.rjs +1 -0
  218. data/test/fixtures/content_type/render_default_for_rxml.rxml +1 -0
  219. data/test/fixtures/customers/_customer.html.erb +1 -0
  220. data/test/fixtures/db_definitions/sqlite.sql +49 -0
  221. data/test/fixtures/developer.rb +9 -0
  222. data/test/fixtures/developers.yml +21 -0
  223. data/test/fixtures/developers/_developer.erb +1 -0
  224. data/test/fixtures/developers_projects.yml +13 -0
  225. data/test/fixtures/failsafe/500.html +1 -0
  226. data/test/fixtures/fun/games/_game.erb +1 -0
  227. data/test/fixtures/fun/games/hello_world.erb +1 -0
  228. data/test/fixtures/fun/serious/games/_game.erb +1 -0
  229. data/test/fixtures/functional_caching/_partial.erb +3 -0
  230. data/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +3 -0
  231. data/test/fixtures/functional_caching/formatted_fragment_cached.js.rjs +6 -0
  232. data/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +5 -0
  233. data/test/fixtures/functional_caching/fragment_cached.html.erb +2 -0
  234. data/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +1 -0
  235. data/test/fixtures/functional_caching/inline_fragment_cached.html.erb +2 -0
  236. data/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +1 -0
  237. data/test/fixtures/good_customers/_good_customer.html.erb +1 -0
  238. data/test/fixtures/helpers/abc_helper.rb +5 -0
  239. data/test/fixtures/helpers/fun/games_helper.rb +3 -0
  240. data/test/fixtures/helpers/fun/pdf_helper.rb +3 -0
  241. data/test/fixtures/layout_tests/abs_path_layout.rhtml +1 -0
  242. data/test/fixtures/layout_tests/alt/hello.rhtml +1 -0
  243. data/test/fixtures/layout_tests/alt/layouts/alt.rhtml +0 -0
  244. data/test/fixtures/layout_tests/layouts/controller_name_space/nested.rhtml +1 -0
  245. data/test/fixtures/layout_tests/layouts/item.rhtml +1 -0
  246. data/test/fixtures/layout_tests/layouts/layout_test.rhtml +1 -0
  247. data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +1 -0
  248. data/test/fixtures/layout_tests/layouts/third_party_template_library.mab +1 -0
  249. data/test/fixtures/layout_tests/views/hello.rhtml +1 -0
  250. data/test/fixtures/layouts/_column.html.erb +2 -0
  251. data/test/fixtures/layouts/block_with_layout.erb +3 -0
  252. data/test/fixtures/layouts/builder.builder +3 -0
  253. data/test/fixtures/layouts/default_html.html.erb +1 -0
  254. data/test/fixtures/layouts/partial_with_layout.erb +3 -0
  255. data/test/fixtures/layouts/standard.erb +1 -0
  256. data/test/fixtures/layouts/talk_from_action.erb +2 -0
  257. data/test/fixtures/layouts/xhr.html.erb +2 -0
  258. data/test/fixtures/layouts/yield.erb +2 -0
  259. data/test/fixtures/localized/hello_world.de.html +1 -0
  260. data/test/fixtures/localized/hello_world.en.html +1 -0
  261. data/test/fixtures/mascot.rb +3 -0
  262. data/test/fixtures/mascots.yml +4 -0
  263. data/test/fixtures/mascots/_mascot.html.erb +1 -0
  264. data/test/fixtures/multipart/binary_file +0 -0
  265. data/test/fixtures/multipart/boundary_problem_file +10 -0
  266. data/test/fixtures/multipart/bracketed_param +5 -0
  267. data/test/fixtures/multipart/empty +10 -0
  268. data/test/fixtures/multipart/hello.txt +1 -0
  269. data/test/fixtures/multipart/large_text_file +10 -0
  270. data/test/fixtures/multipart/mixed_files +0 -0
  271. data/test/fixtures/multipart/mona_lisa.jpg +0 -0
  272. data/test/fixtures/multipart/none +9 -0
  273. data/test/fixtures/multipart/single_parameter +5 -0
  274. data/test/fixtures/multipart/text_file +10 -0
  275. data/test/fixtures/override/test/hello_world.erb +1 -0
  276. data/test/fixtures/override2/layouts/test/sub.erb +1 -0
  277. data/test/fixtures/post_test/layouts/post.html.erb +1 -0
  278. data/test/fixtures/post_test/layouts/super_post.iphone.erb +1 -0
  279. data/test/fixtures/post_test/post/index.html.erb +1 -0
  280. data/test/fixtures/post_test/post/index.iphone.erb +1 -0
  281. data/test/fixtures/post_test/super_post/index.html.erb +1 -0
  282. data/test/fixtures/post_test/super_post/index.iphone.erb +1 -0
  283. data/test/fixtures/project.rb +3 -0
  284. data/test/fixtures/projects.yml +7 -0
  285. data/test/fixtures/projects/_project.erb +1 -0
  286. data/test/fixtures/public/404.html +1 -0
  287. data/test/fixtures/public/500.da.html +1 -0
  288. data/test/fixtures/public/500.html +1 -0
  289. data/test/fixtures/public/absolute/test.css +23 -0
  290. data/test/fixtures/public/absolute/test.js +63 -0
  291. data/test/fixtures/public/images/rails.png +0 -0
  292. data/test/fixtures/public/javascripts/application.js +1 -0
  293. data/test/fixtures/public/javascripts/bank.js +1 -0
  294. data/test/fixtures/public/javascripts/controls.js +1 -0
  295. data/test/fixtures/public/javascripts/dragdrop.js +1 -0
  296. data/test/fixtures/public/javascripts/effects.js +1 -0
  297. data/test/fixtures/public/javascripts/prototype.js +1 -0
  298. data/test/fixtures/public/javascripts/robber.js +1 -0
  299. data/test/fixtures/public/javascripts/subdir/subdir.js +1 -0
  300. data/test/fixtures/public/javascripts/version.1.0.js +1 -0
  301. data/test/fixtures/public/stylesheets/bank.css +1 -0
  302. data/test/fixtures/public/stylesheets/robber.css +1 -0
  303. data/test/fixtures/public/stylesheets/subdir/subdir.css +1 -0
  304. data/test/fixtures/public/stylesheets/version.1.0.css +1 -0
  305. data/test/fixtures/quiz/questions/_question.html.erb +1 -0
  306. data/test/fixtures/replies.yml +15 -0
  307. data/test/fixtures/replies/_reply.erb +1 -0
  308. data/test/fixtures/reply.rb +7 -0
  309. data/test/fixtures/respond_to/all_types_with_layout.html.erb +1 -0
  310. data/test/fixtures/respond_to/all_types_with_layout.js.rjs +1 -0
  311. data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +1 -0
  312. data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +1 -0
  313. data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +1 -0
  314. data/test/fixtures/respond_to/layouts/missing.html.erb +1 -0
  315. data/test/fixtures/respond_to/layouts/standard.html.erb +1 -0
  316. data/test/fixtures/respond_to/layouts/standard.iphone.erb +1 -0
  317. data/test/fixtures/respond_to/using_defaults.html.erb +1 -0
  318. data/test/fixtures/respond_to/using_defaults.js.rjs +1 -0
  319. data/test/fixtures/respond_to/using_defaults.xml.builder +1 -0
  320. data/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +1 -0
  321. data/test/fixtures/respond_to/using_defaults_with_type_list.js.rjs +1 -0
  322. data/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +1 -0
  323. data/test/fixtures/scope/test/modgreet.erb +1 -0
  324. data/test/fixtures/session_autoload_test/session_autoload_test/foo.rb +10 -0
  325. data/test/fixtures/shared.html.erb +1 -0
  326. data/test/fixtures/symlink_parent/symlinked_layout.erb +5 -0
  327. data/test/fixtures/test/_counter.html.erb +1 -0
  328. data/test/fixtures/test/_customer.erb +1 -0
  329. data/test/fixtures/test/_customer_counter.erb +1 -0
  330. data/test/fixtures/test/_customer_counter_with_as.erb +1 -0
  331. data/test/fixtures/test/_customer_greeting.erb +1 -0
  332. data/test/fixtures/test/_customer_with_var.erb +1 -0
  333. data/test/fixtures/test/_form.erb +1 -0
  334. data/test/fixtures/test/_from_helper.erb +1 -0
  335. data/test/fixtures/test/_hash_greeting.erb +1 -0
  336. data/test/fixtures/test/_hash_object.erb +2 -0
  337. data/test/fixtures/test/_hello.builder +1 -0
  338. data/test/fixtures/test/_labelling_form.erb +1 -0
  339. data/test/fixtures/test/_layout_for_block_with_args.html.erb +3 -0
  340. data/test/fixtures/test/_layout_for_partial.html.erb +3 -0
  341. data/test/fixtures/test/_local_inspector.html.erb +1 -0
  342. data/test/fixtures/test/_one.html.erb +1 -0
  343. data/test/fixtures/test/_partial.erb +1 -0
  344. data/test/fixtures/test/_partial.html.erb +1 -0
  345. data/test/fixtures/test/_partial.js.erb +1 -0
  346. data/test/fixtures/test/_partial_for_use_in_layout.html.erb +1 -0
  347. data/test/fixtures/test/_partial_only.erb +1 -0
  348. data/test/fixtures/test/_partial_with_only_html_version.html.erb +1 -0
  349. data/test/fixtures/test/_person.erb +2 -0
  350. data/test/fixtures/test/_raise.html.erb +1 -0
  351. data/test/fixtures/test/_two.html.erb +1 -0
  352. data/test/fixtures/test/_utf8_partial.html.erb +1 -0
  353. data/test/fixtures/test/_utf8_partial_magic.html.erb +2 -0
  354. data/test/fixtures/test/action_talk_to_layout.erb +2 -0
  355. data/test/fixtures/test/array_translation.erb +1 -0
  356. data/test/fixtures/test/calling_partial_with_layout.html.erb +1 -0
  357. data/test/fixtures/test/capturing.erb +4 -0
  358. data/test/fixtures/test/content_for.erb +2 -0
  359. data/test/fixtures/test/content_for_concatenated.erb +3 -0
  360. data/test/fixtures/test/content_for_with_parameter.erb +2 -0
  361. data/test/fixtures/test/delete_with_js.rjs +2 -0
  362. data/test/fixtures/test/dont_pick_me +1 -0
  363. data/test/fixtures/test/dot.directory/render_file_with_ivar.erb +1 -0
  364. data/test/fixtures/test/enum_rjs_test.rjs +6 -0
  365. data/test/fixtures/test/formatted_html_erb.html.erb +1 -0
  366. data/test/fixtures/test/formatted_xml_erb.builder +1 -0
  367. data/test/fixtures/test/formatted_xml_erb.html.erb +1 -0
  368. data/test/fixtures/test/formatted_xml_erb.xml.erb +1 -0
  369. data/test/fixtures/test/greeting.erb +1 -0
  370. data/test/fixtures/test/greeting.js.rjs +1 -0
  371. data/test/fixtures/test/hello.builder +4 -0
  372. data/test/fixtures/test/hello_world.da.html.erb +1 -0
  373. data/test/fixtures/test/hello_world.erb +1 -0
  374. data/test/fixtures/test/hello_world.erb~ +1 -0
  375. data/test/fixtures/test/hello_world.pt-BR.html.erb +1 -0
  376. data/test/fixtures/test/hello_world_container.builder +3 -0
  377. data/test/fixtures/test/hello_world_from_rxml.builder +4 -0
  378. data/test/fixtures/test/hello_world_with_layout_false.erb +1 -0
  379. data/test/fixtures/test/hello_xml_world.builder +11 -0
  380. data/test/fixtures/test/hyphen-ated.erb +1 -0
  381. data/test/fixtures/test/implicit_content_type.atom.builder +2 -0
  382. data/test/fixtures/test/list.erb +1 -0
  383. data/test/fixtures/test/malformed/malformed.en.html.erb~ +1 -0
  384. data/test/fixtures/test/malformed/malformed.erb~ +1 -0
  385. data/test/fixtures/test/malformed/malformed.html.erb~ +1 -0
  386. data/test/fixtures/test/nested_layout.erb +3 -0
  387. data/test/fixtures/test/non_erb_block_content_for.builder +4 -0
  388. data/test/fixtures/test/potential_conflicts.erb +4 -0
  389. data/test/fixtures/test/render_explicit_html_template.js.rjs +1 -0
  390. data/test/fixtures/test/render_file_from_template.html.erb +1 -0
  391. data/test/fixtures/test/render_file_with_ivar.erb +1 -0
  392. data/test/fixtures/test/render_file_with_locals.erb +1 -0
  393. data/test/fixtures/test/render_implicit_html_template.js.rjs +1 -0
  394. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.da.html.erb +1 -0
  395. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.html.erb +1 -0
  396. data/test/fixtures/test/render_implicit_js_template_without_layout.js.erb +1 -0
  397. data/test/fixtures/test/render_to_string_test.erb +1 -0
  398. data/test/fixtures/test/scoped_array_translation.erb +1 -0
  399. data/test/fixtures/test/sub_template_raise.html.erb +1 -0
  400. data/test/fixtures/test/template.erb +1 -0
  401. data/test/fixtures/test/translation.erb +1 -0
  402. data/test/fixtures/test/update_element_with_capture.erb +9 -0
  403. data/test/fixtures/test/using_layout_around_block.html.erb +1 -0
  404. data/test/fixtures/test/using_layout_around_block_with_args.html.erb +1 -0
  405. data/test/fixtures/test/utf8.html.erb +4 -0
  406. data/test/fixtures/test/utf8_magic.html.erb +5 -0
  407. data/test/fixtures/test/utf8_magic_with_bare_partial.html.erb +5 -0
  408. data/test/fixtures/topic.rb +3 -0
  409. data/test/fixtures/topics.yml +22 -0
  410. data/test/fixtures/topics/_topic.html.erb +1 -0
  411. data/test/template/active_record_helper_i18n_test.rb +51 -0
  412. data/test/template/active_record_helper_test.rb +302 -0
  413. data/test/template/asset_tag_helper_test.rb +770 -0
  414. data/test/template/atom_feed_helper_test.rb +315 -0
  415. data/test/template/benchmark_helper_test.rb +86 -0
  416. data/test/template/compiled_templates_test.rb +204 -0
  417. data/test/template/date_helper_i18n_test.rb +121 -0
  418. data/test/template/date_helper_test.rb +2603 -0
  419. data/test/template/erb_util_test.rb +36 -0
  420. data/test/template/form_helper_test.rb +1447 -0
  421. data/test/template/form_options_helper_i18n_test.rb +27 -0
  422. data/test/template/form_options_helper_test.rb +811 -0
  423. data/test/template/form_tag_helper_test.rb +356 -0
  424. data/test/template/javascript_helper_test.rb +106 -0
  425. data/test/template/number_helper_i18n_test.rb +69 -0
  426. data/test/template/number_helper_test.rb +132 -0
  427. data/test/template/prototype_helper_test.rb +639 -0
  428. data/test/template/raw_output_helper_test.rb +21 -0
  429. data/test/template/record_tag_helper_test.rb +58 -0
  430. data/test/template/render_test.rb +329 -0
  431. data/test/template/sanitize_helper_test.rb +57 -0
  432. data/test/template/scriptaculous_helper_test.rb +90 -0
  433. data/test/template/tag_helper_test.rb +98 -0
  434. data/test/template/template_test.rb +32 -0
  435. data/test/template/test_test.rb +54 -0
  436. data/test/template/text_helper_test.rb +597 -0
  437. data/test/template/translation_helper_test.rb +95 -0
  438. data/test/template/url_helper_test.rb +641 -0
  439. data/test/testing_sandbox.rb +15 -0
  440. data/test/view/test_case_test.rb +176 -0
  441. metadata +519 -0
@@ -0,0 +1,99 @@
1
+ module ActionView
2
+ # The TemplateError exception is raised when the compilation of the template fails. This exception then gathers a
3
+ # bunch of intimate details and uses it to report a very precise exception message.
4
+ class TemplateError < ActionViewError #:nodoc:
5
+ SOURCE_CODE_RADIUS = 3
6
+
7
+ attr_reader :original_exception
8
+
9
+ def initialize(template, assigns, original_exception)
10
+ @template, @assigns, @original_exception = template, assigns.dup, original_exception
11
+ @backtrace = compute_backtrace
12
+ end
13
+
14
+ def file_name
15
+ @template.relative_path
16
+ end
17
+
18
+ def message
19
+ ActiveSupport::Deprecation.silence { original_exception.message }
20
+ end
21
+
22
+ def clean_backtrace
23
+ if defined?(Rails) && Rails.respond_to?(:backtrace_cleaner)
24
+ Rails.backtrace_cleaner.clean(original_exception.backtrace)
25
+ else
26
+ original_exception.backtrace
27
+ end
28
+ end
29
+
30
+ def sub_template_message
31
+ if @sub_templates
32
+ "Trace of template inclusion: " +
33
+ @sub_templates.collect { |template| template.relative_path }.join(", ")
34
+ else
35
+ ""
36
+ end
37
+ end
38
+
39
+ def source_extract(indentation = 0)
40
+ return unless num = line_number
41
+ num = num.to_i
42
+
43
+ source_code = @template.source.split("\n")
44
+
45
+ start_on_line = [ num - SOURCE_CODE_RADIUS - 1, 0 ].max
46
+ end_on_line = [ num + SOURCE_CODE_RADIUS - 1, source_code.length].min
47
+
48
+ indent = ' ' * indentation
49
+ line_counter = start_on_line
50
+ return unless source_code = source_code[start_on_line..end_on_line]
51
+
52
+ source_code.sum do |line|
53
+ line_counter += 1
54
+ "#{indent}#{line_counter}: #{line}\n"
55
+ end
56
+ end
57
+
58
+ def sub_template_of(template_path)
59
+ @sub_templates ||= []
60
+ @sub_templates << template_path
61
+ end
62
+
63
+ def line_number
64
+ @line_number ||=
65
+ if file_name
66
+ regexp = /#{Regexp.escape File.basename(file_name)}:(\d+)/
67
+
68
+ $1 if message =~ regexp or clean_backtrace.find { |line| line =~ regexp }
69
+ end
70
+ end
71
+
72
+ def to_s
73
+ "\n#{self.class} (#{message}) #{source_location}:\n" +
74
+ "#{source_extract}\n #{clean_backtrace.join("\n ")}\n\n"
75
+ end
76
+
77
+ # don't do anything nontrivial here. Any raised exception from here becomes fatal
78
+ # (and can't be rescued).
79
+ def backtrace
80
+ @backtrace
81
+ end
82
+
83
+ private
84
+ def compute_backtrace
85
+ [
86
+ "#{source_location.capitalize}\n\n#{source_extract(4)}\n " +
87
+ clean_backtrace.join("\n ")
88
+ ]
89
+ end
90
+
91
+ def source_location
92
+ if line_number
93
+ "on line ##{line_number} of "
94
+ else
95
+ 'in '
96
+ end + file_name
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,34 @@
1
+ # Legacy TemplateHandler stub
2
+ module ActionView
3
+ module TemplateHandlers #:nodoc:
4
+ module Compilable
5
+ def self.included(base)
6
+ base.extend(ClassMethods)
7
+ end
8
+
9
+ module ClassMethods
10
+ def call(template)
11
+ new.compile(template)
12
+ end
13
+ end
14
+
15
+ def compile(template)
16
+ raise "Need to implement #{self.class.name}#compile(template)"
17
+ end
18
+ end
19
+ end
20
+
21
+ class TemplateHandler
22
+ def self.call(template)
23
+ "#{name}.new(self).render(template, local_assigns)"
24
+ end
25
+
26
+ def initialize(view = nil)
27
+ @view = view
28
+ end
29
+
30
+ def render(template, local_assigns)
31
+ raise "Need to implement #{self.class.name}#render(template, local_assigns)"
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,48 @@
1
+ module ActionView #:nodoc:
2
+ module TemplateHandlers #:nodoc:
3
+ autoload :ERB, 'action_view/template_handlers/erb'
4
+ autoload :RJS, 'action_view/template_handlers/rjs'
5
+ autoload :Builder, 'action_view/template_handlers/builder'
6
+
7
+ def self.extended(base)
8
+ base.register_default_template_handler :erb, TemplateHandlers::ERB
9
+ base.register_template_handler :rjs, TemplateHandlers::RJS
10
+ base.register_template_handler :builder, TemplateHandlers::Builder
11
+
12
+ # TODO: Depreciate old template extensions
13
+ base.register_template_handler :rhtml, TemplateHandlers::ERB
14
+ base.register_template_handler :rxml, TemplateHandlers::Builder
15
+ end
16
+
17
+ @@template_handlers = {}
18
+ @@default_template_handlers = nil
19
+
20
+ # Register a class that knows how to handle template files with the given
21
+ # extension. This can be used to implement new template types.
22
+ # The constructor for the class must take the ActiveView::Base instance
23
+ # as a parameter, and the class must implement a +render+ method that
24
+ # takes the contents of the template to render as well as the Hash of
25
+ # local assigns available to the template. The +render+ method ought to
26
+ # return the rendered template as a string.
27
+ def register_template_handler(extension, klass)
28
+ @@template_handlers[extension.to_sym] = klass
29
+ end
30
+
31
+ def template_handler_extensions
32
+ @@template_handlers.keys.map(&:to_s).sort
33
+ end
34
+
35
+ def registered_template_handler(extension)
36
+ extension && @@template_handlers[extension.to_sym]
37
+ end
38
+
39
+ def register_default_template_handler(extension, klass)
40
+ register_template_handler(extension, klass)
41
+ @@default_template_handlers = klass
42
+ end
43
+
44
+ def handler_class_for_extension(extension)
45
+ registered_template_handler(extension) || @@default_template_handlers
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,17 @@
1
+ require 'builder'
2
+
3
+ module ActionView
4
+ module TemplateHandlers
5
+ class Builder < TemplateHandler
6
+ include Compilable
7
+
8
+ def compile(template)
9
+ "_set_controller_content_type(Mime::XML);" +
10
+ "xml = ::Builder::XmlMarkup.new(:indent => 2);" +
11
+ "self.output_buffer = xml.target!;" +
12
+ template.source +
13
+ ";xml.target!;"
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ module ActionView
2
+ module TemplateHandlers
3
+ class ERB < TemplateHandler
4
+ include Compilable
5
+
6
+ ##
7
+ # :singleton-method:
8
+ # Specify trim mode for the ERB compiler. Defaults to '-'.
9
+ # See ERb documentation for suitable values.
10
+ cattr_accessor :erb_trim_mode
11
+ self.erb_trim_mode = '-'
12
+
13
+ def compile(template)
14
+ magic = $1 if template.source =~ /\A(<%#.*coding[:=]\s*(\S+)\s*-?%>)/
15
+ erb = "#{magic}<% __in_erb_template=true %>#{template.source}"
16
+
17
+ if erb.respond_to?(:force_encoding)
18
+ erb.force_encoding(template.source.encoding)
19
+ end
20
+
21
+ ::ERB.new(erb, nil, erb_trim_mode, '@output_buffer').src
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,13 @@
1
+ module ActionView
2
+ module TemplateHandlers
3
+ class RJS < TemplateHandler
4
+ include Compilable
5
+
6
+ def compile(template)
7
+ "@template_format = :html;" +
8
+ "controller.response.content_type ||= Mime::JS;" +
9
+ "update_page do |page|;#{template.source}\nend"
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,162 @@
1
+ require 'active_support/test_case'
2
+
3
+ module ActionView
4
+ class Base
5
+ alias_method :initialize_without_template_tracking, :initialize
6
+ def initialize(*args)
7
+ @_rendered = { :template => nil, :partials => Hash.new(0) }
8
+ initialize_without_template_tracking(*args)
9
+ end
10
+ end
11
+
12
+ module Renderable
13
+ alias_method :render_without_template_tracking, :render
14
+ def render(view, local_assigns = {})
15
+ if respond_to?(:path) && !is_a?(InlineTemplate)
16
+ rendered = view.instance_variable_get(:@_rendered)
17
+ rendered[:partials][self] += 1 if is_a?(RenderablePartial)
18
+ rendered[:template] ||= self
19
+ end
20
+ render_without_template_tracking(view, local_assigns)
21
+ end
22
+ end
23
+
24
+ class TestCase < ActiveSupport::TestCase
25
+ class TestController < ActionController::Base
26
+ attr_accessor :request, :response, :params
27
+
28
+ def self.controller_path
29
+ ''
30
+ end
31
+
32
+ def initialize
33
+ @request = ActionController::TestRequest.new
34
+ @response = ActionController::TestResponse.new
35
+
36
+ @params = {}
37
+ send(:initialize_current_url)
38
+ end
39
+ end
40
+
41
+ include ActionController::TestCase::Assertions
42
+ include ActionController::TestProcess
43
+
44
+ include ActionController::PolymorphicRoutes
45
+ include ActionController::RecordIdentifier
46
+
47
+ include ActionView::Helpers
48
+ include ActionController::Helpers
49
+
50
+ class_inheritable_accessor :helper_class
51
+ attr_accessor :controller, :output_buffer, :rendered
52
+
53
+ setup :setup_with_controller
54
+ def setup_with_controller
55
+ @controller = TestController.new
56
+ @output_buffer = ''
57
+ @rendered = ''
58
+
59
+ self.class.send(:include_helper_modules!)
60
+ make_test_case_available_to_view!
61
+ end
62
+
63
+ def render(options = {}, local_assigns = {}, &block)
64
+ @rendered << output = _view.render(options, local_assigns, &block)
65
+ output
66
+ end
67
+
68
+ def protect_against_forgery?
69
+ false
70
+ end
71
+
72
+ class << self
73
+ def tests(helper_class)
74
+ self.helper_class = helper_class
75
+ end
76
+
77
+ def helper_class
78
+ if current_helper_class = read_inheritable_attribute(:helper_class)
79
+ current_helper_class
80
+ else
81
+ self.helper_class = determine_default_helper_class(name)
82
+ end
83
+ end
84
+
85
+ def determine_default_helper_class(name)
86
+ name.sub(/Test$/, '').constantize
87
+ rescue NameError
88
+ nil
89
+ end
90
+
91
+ def helper_method(*methods)
92
+ # Almost a duplicate from ActionController::Helpers
93
+ methods.flatten.each do |method|
94
+ master_helper_module.module_eval <<-end_eval
95
+ def #{method}(*args, &block) # def current_user(*args, &block)
96
+ _test_case.send(%(#{method}), *args, &block) # test_case.send(%(current_user), *args, &block)
97
+ end # end
98
+ end_eval
99
+ end
100
+ end
101
+
102
+ private
103
+ def include_helper_modules!
104
+ helper(helper_class) if helper_class
105
+ include master_helper_module
106
+ end
107
+ end
108
+
109
+ private
110
+ def make_test_case_available_to_view!
111
+ test_case_instance = self
112
+ master_helper_module.module_eval do
113
+ define_method(:_test_case) { test_case_instance }
114
+ private :_test_case
115
+ end
116
+ end
117
+
118
+ def _view
119
+ view = ActionView::Base.new(ActionController::Base.view_paths, _assigns, @controller)
120
+ view.helpers.include master_helper_module
121
+ view.output_buffer = self.output_buffer
122
+ view
123
+ end
124
+
125
+ # Support the selector assertions
126
+ #
127
+ # Need to experiment if this priority is the best one: rendered => output_buffer
128
+ def response_from_page_or_rjs
129
+ HTML::Document.new(rendered.blank? ? output_buffer : rendered).root
130
+ end
131
+
132
+ EXCLUDE_IVARS = %w{
133
+ @output_buffer
134
+ @fixture_cache
135
+ @method_name
136
+ @_result
137
+ @loaded_fixtures
138
+ @test_passed
139
+ @view
140
+ }
141
+
142
+ def _instance_variables
143
+ instance_variables - EXCLUDE_IVARS
144
+ end
145
+
146
+ def _assigns
147
+ _instance_variables.inject({}) do |hash, var|
148
+ name = var[1..-1].to_sym
149
+ hash[name] = instance_variable_get(var)
150
+ hash
151
+ end
152
+ end
153
+
154
+ def method_missing(selector, *args)
155
+ if ActionController::Routing::Routes.named_routes.helpers.include?(selector)
156
+ @controller.__send__(selector, *args)
157
+ else
158
+ super
159
+ end
160
+ end
161
+ end
162
+ end
data/lib/actionpack.rb ADDED
@@ -0,0 +1,2 @@
1
+ require 'action_pack'
2
+ ActiveSupport::Deprecation.warn 'require "actionpack" is deprecated and will be removed in Rails 3. Use require "action_pack" instead.'
@@ -0,0 +1,78 @@
1
+ $:.unshift File.expand_path('../../lib', __FILE__)
2
+ $:.unshift File.expand_path('../../../activesupport/lib', __FILE__)
3
+ $:.unshift File.expand_path('../fixtures/helpers', __FILE__)
4
+ $:.unshift File.expand_path('../fixtures/alternate_helpers', __FILE__)
5
+
6
+ require 'rubygems'
7
+ require 'yaml'
8
+ require 'stringio'
9
+ require 'test/unit'
10
+
11
+ gem 'mocha', '>= 0.9.7'
12
+ require 'mocha'
13
+
14
+ begin
15
+ require 'ruby-debug'
16
+ Debugger.settings[:autoeval] = true
17
+ Debugger.start
18
+ rescue LoadError
19
+ # Debugging disabled. `gem install ruby-debug` to enable.
20
+ end
21
+
22
+ require 'action_controller'
23
+ require 'action_controller/cgi_ext'
24
+ require 'action_controller/test_process'
25
+ require 'action_view/test_case'
26
+
27
+ # Show backtraces for deprecated behavior for quicker cleanup.
28
+ ActiveSupport::Deprecation.debug = true
29
+
30
+ ActionController::Base.logger = nil
31
+ ActionController::Routing::Routes.reload rescue nil
32
+
33
+ ActionController::Base.session_store = nil
34
+
35
+ # Register languages for testing
36
+ I18n.backend.store_translations 'da', "da" => {}
37
+ I18n.backend.store_translations 'pt-BR', "pt-BR" => {}
38
+ ORIGINAL_LOCALES = I18n.available_locales.map(&:to_s).sort
39
+
40
+ FIXTURE_LOAD_PATH = File.join(File.dirname(__FILE__), 'fixtures')
41
+ ActionView::Base.cache_template_loading = true
42
+ ActionController::Base.view_paths = FIXTURE_LOAD_PATH
43
+ CACHED_VIEW_PATHS = ActionView::Base.cache_template_loading? ?
44
+ ActionController::Base.view_paths :
45
+ ActionController::Base.view_paths.map {|path| ActionView::Template::EagerPath.new(path.to_s)}
46
+
47
+ class DummyMutex
48
+ def lock
49
+ @locked = true
50
+ end
51
+
52
+ def unlock
53
+ @locked = false
54
+ end
55
+
56
+ def locked?
57
+ @locked
58
+ end
59
+ end
60
+
61
+ class ActionController::IntegrationTest < ActiveSupport::TestCase
62
+ def with_autoload_path(path)
63
+ path = File.join(File.dirname(__FILE__), "fixtures", path)
64
+ if ActiveSupport::Dependencies.autoload_paths.include?(path)
65
+ yield
66
+ else
67
+ begin
68
+ ActiveSupport::Dependencies.autoload_paths << path
69
+ yield
70
+ ensure
71
+ ActiveSupport::Dependencies.autoload_paths.reject! {|p| p == path}
72
+ ActiveSupport::Dependencies.clear
73
+ end
74
+ end
75
+ end
76
+ end
77
+
78
+ ActionController::Reloader.default_lock = DummyMutex.new