actionpack 1.13.6 → 2.0.0

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 (317) hide show
  1. data/CHANGELOG +1400 -20
  2. data/MIT-LICENSE +1 -1
  3. data/README +5 -5
  4. data/RUNNING_UNIT_TESTS +4 -5
  5. data/Rakefile +5 -6
  6. data/install.rb +2 -2
  7. data/lib/action_controller.rb +11 -15
  8. data/lib/action_controller/assertions.rb +12 -25
  9. data/lib/action_controller/assertions/dom_assertions.rb +18 -4
  10. data/lib/action_controller/assertions/model_assertions.rb +8 -1
  11. data/lib/action_controller/assertions/response_assertions.rb +35 -12
  12. data/lib/action_controller/assertions/routing_assertions.rb +56 -12
  13. data/lib/action_controller/assertions/selector_assertions.rb +105 -38
  14. data/lib/action_controller/assertions/tag_assertions.rb +28 -15
  15. data/lib/action_controller/base.rb +318 -250
  16. data/lib/action_controller/benchmarking.rb +33 -29
  17. data/lib/action_controller/caching.rb +130 -64
  18. data/lib/action_controller/cgi_ext.rb +16 -0
  19. data/lib/action_controller/cgi_ext/{cookie_performance_fix.rb → cookie.rb} +25 -40
  20. data/lib/action_controller/cgi_ext/query_extension.rb +22 -0
  21. data/lib/action_controller/cgi_ext/session.rb +73 -0
  22. data/lib/action_controller/cgi_ext/stdinput.rb +23 -0
  23. data/lib/action_controller/cgi_process.rb +34 -57
  24. data/lib/action_controller/components.rb +19 -36
  25. data/lib/action_controller/cookies.rb +10 -9
  26. data/lib/action_controller/dispatcher.rb +195 -0
  27. data/lib/action_controller/filters.rb +35 -34
  28. data/lib/action_controller/flash.rb +30 -35
  29. data/lib/action_controller/helpers.rb +121 -47
  30. data/lib/action_controller/http_authentication.rb +126 -0
  31. data/lib/action_controller/integration.rb +105 -101
  32. data/lib/action_controller/layout.rb +59 -47
  33. data/lib/action_controller/mime_responds.rb +57 -68
  34. data/lib/action_controller/mime_type.rb +43 -80
  35. data/lib/action_controller/mime_types.rb +20 -0
  36. data/lib/action_controller/polymorphic_routes.rb +88 -0
  37. data/lib/action_controller/record_identifier.rb +91 -0
  38. data/lib/action_controller/request.rb +553 -88
  39. data/lib/action_controller/request_forgery_protection.rb +126 -0
  40. data/lib/action_controller/request_profiler.rb +138 -0
  41. data/lib/action_controller/rescue.rb +185 -69
  42. data/lib/action_controller/resources.rb +211 -172
  43. data/lib/action_controller/response.rb +49 -8
  44. data/lib/action_controller/routing.rb +359 -236
  45. data/lib/action_controller/routing_optimisation.rb +119 -0
  46. data/lib/action_controller/session/active_record_store.rb +3 -2
  47. data/lib/action_controller/session/cookie_store.rb +161 -0
  48. data/lib/action_controller/session/mem_cache_store.rb +9 -16
  49. data/lib/action_controller/session_management.rb +17 -8
  50. data/lib/action_controller/streaming.rb +6 -3
  51. data/lib/action_controller/templates/rescues/_request_and_response.erb +24 -0
  52. data/lib/action_controller/templates/rescues/{_trace.rhtml → _trace.erb} +0 -0
  53. data/lib/action_controller/templates/rescues/{diagnostics.rhtml → diagnostics.erb} +2 -2
  54. data/lib/action_controller/templates/rescues/{layout.rhtml → layout.erb} +0 -0
  55. data/lib/action_controller/templates/rescues/{missing_template.rhtml → missing_template.erb} +0 -0
  56. data/lib/action_controller/templates/rescues/{routing_error.rhtml → routing_error.erb} +0 -0
  57. data/lib/action_controller/templates/rescues/{template_error.rhtml → template_error.erb} +2 -2
  58. data/lib/action_controller/templates/rescues/{unknown_action.rhtml → unknown_action.erb} +0 -0
  59. data/lib/action_controller/test_case.rb +53 -0
  60. data/lib/action_controller/test_process.rb +59 -46
  61. data/lib/action_controller/url_rewriter.rb +48 -24
  62. data/lib/action_controller/vendor/html-scanner/html/document.rb +7 -4
  63. data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +173 -0
  64. data/lib/action_controller/vendor/html-scanner/html/selector.rb +11 -6
  65. data/lib/action_controller/verification.rb +27 -21
  66. data/lib/action_pack.rb +1 -1
  67. data/lib/action_pack/version.rb +4 -4
  68. data/lib/action_view.rb +2 -3
  69. data/lib/action_view/base.rb +218 -63
  70. data/lib/action_view/compiled_templates.rb +1 -2
  71. data/lib/action_view/helpers/active_record_helper.rb +35 -17
  72. data/lib/action_view/helpers/asset_tag_helper.rb +395 -87
  73. data/lib/action_view/helpers/atom_feed_helper.rb +111 -0
  74. data/lib/action_view/helpers/benchmark_helper.rb +12 -5
  75. data/lib/action_view/helpers/cache_helper.rb +29 -0
  76. data/lib/action_view/helpers/capture_helper.rb +97 -63
  77. data/lib/action_view/helpers/date_helper.rb +295 -35
  78. data/lib/action_view/helpers/debug_helper.rb +6 -2
  79. data/lib/action_view/helpers/form_helper.rb +354 -111
  80. data/lib/action_view/helpers/form_options_helper.rb +171 -109
  81. data/lib/action_view/helpers/form_tag_helper.rb +332 -76
  82. data/lib/action_view/helpers/javascript_helper.rb +35 -11
  83. data/lib/action_view/helpers/javascripts/controls.js +484 -354
  84. data/lib/action_view/helpers/javascripts/dragdrop.js +88 -58
  85. data/lib/action_view/helpers/javascripts/effects.js +396 -364
  86. data/lib/action_view/helpers/javascripts/prototype.js +2817 -1107
  87. data/lib/action_view/helpers/number_helper.rb +84 -60
  88. data/lib/action_view/helpers/prototype_helper.rb +419 -43
  89. data/lib/action_view/helpers/record_identification_helper.rb +20 -0
  90. data/lib/action_view/helpers/record_tag_helper.rb +59 -0
  91. data/lib/action_view/helpers/sanitize_helper.rb +223 -0
  92. data/lib/action_view/helpers/scriptaculous_helper.rb +63 -4
  93. data/lib/action_view/helpers/tag_helper.rb +69 -39
  94. data/lib/action_view/helpers/text_helper.rb +221 -148
  95. data/lib/action_view/helpers/url_helper.rb +283 -165
  96. data/lib/action_view/partials.rb +134 -62
  97. data/lib/action_view/template_error.rb +4 -12
  98. data/lib/actionpack.rb +1 -0
  99. data/test/abstract_unit.rb +21 -1
  100. data/test/action_view_test.rb +26 -0
  101. data/test/active_record_unit.rb +12 -20
  102. data/test/activerecord/active_record_store_test.rb +2 -2
  103. data/test/activerecord/render_partial_with_record_identification_test.rb +74 -0
  104. data/test/controller/action_pack_assertions_test.rb +21 -152
  105. data/test/controller/addresses_render_test.rb +2 -7
  106. data/test/controller/assert_select_test.rb +120 -14
  107. data/test/controller/base_test.rb +11 -13
  108. data/test/controller/caching_test.rb +125 -5
  109. data/test/controller/capture_test.rb +23 -16
  110. data/test/controller/cgi_test.rb +66 -391
  111. data/test/controller/components_test.rb +31 -42
  112. data/test/controller/content_type_test.rb +1 -1
  113. data/test/controller/cookie_test.rb +42 -14
  114. data/test/controller/deprecation/deprecated_base_methods_test.rb +1 -42
  115. data/test/controller/dispatcher_test.rb +123 -0
  116. data/test/controller/fake_models.rb +5 -0
  117. data/test/controller/filters_test.rb +44 -7
  118. data/test/controller/flash_test.rb +46 -2
  119. data/test/controller/fragment_store_setting_test.rb +10 -8
  120. data/test/controller/helper_test.rb +19 -2
  121. data/test/controller/html-scanner/document_test.rb +124 -0
  122. data/test/controller/html-scanner/node_test.rb +69 -0
  123. data/test/controller/html-scanner/sanitizer_test.rb +250 -0
  124. data/test/controller/html-scanner/tag_node_test.rb +239 -0
  125. data/test/controller/html-scanner/text_node_test.rb +51 -0
  126. data/test/controller/html-scanner/tokenizer_test.rb +125 -0
  127. data/test/controller/http_authentication_test.rb +54 -0
  128. data/test/controller/integration_test.rb +12 -26
  129. data/test/controller/layout_test.rb +64 -12
  130. data/test/controller/mime_responds_test.rb +193 -38
  131. data/test/controller/mime_type_test.rb +30 -8
  132. data/test/controller/new_render_test.rb +104 -22
  133. data/test/controller/polymorphic_routes_test.rb +98 -0
  134. data/test/controller/record_identifier_test.rb +103 -0
  135. data/test/controller/redirect_test.rb +120 -18
  136. data/test/controller/render_test.rb +195 -45
  137. data/test/controller/request_forgery_protection_test.rb +217 -0
  138. data/test/controller/request_test.rb +545 -27
  139. data/test/controller/rescue_test.rb +501 -0
  140. data/test/controller/resources_test.rb +258 -132
  141. data/test/controller/routing_test.rb +502 -106
  142. data/test/controller/selector_test.rb +5 -5
  143. data/test/controller/send_file_test.rb +17 -7
  144. data/test/controller/session/cookie_store_test.rb +246 -0
  145. data/test/controller/session/mem_cache_store_test.rb +182 -0
  146. data/test/controller/session_fixation_test.rb +8 -11
  147. data/test/controller/session_management_test.rb +7 -7
  148. data/test/controller/test_test.rb +150 -38
  149. data/test/controller/url_rewriter_test.rb +87 -12
  150. data/test/controller/verification_test.rb +11 -0
  151. data/test/controller/view_paths_test.rb +137 -0
  152. data/test/controller/webservice_test.rb +11 -75
  153. data/test/fixtures/addresses/{list.rhtml → list.erb} +0 -0
  154. data/test/fixtures/db_definitions/sqlite.sql +2 -1
  155. data/test/fixtures/developer.rb +2 -0
  156. data/test/fixtures/fun/games/{hello_world.rhtml → hello_world.erb} +0 -0
  157. data/test/fixtures/helpers/fun/pdf_helper.rb +1 -1
  158. data/test/fixtures/layout_tests/alt/hello.rhtml +1 -0
  159. data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +1 -0
  160. data/test/fixtures/layouts/{builder.rxml → builder.builder} +0 -0
  161. data/test/fixtures/layouts/{standard.rhtml → standard.erb} +0 -0
  162. data/test/fixtures/layouts/{talk_from_action.rhtml → talk_from_action.erb} +0 -0
  163. data/test/fixtures/layouts/{yield.rhtml → yield.erb} +0 -0
  164. data/test/fixtures/multipart/binary_file +0 -0
  165. data/test/fixtures/multipart/bracketed_param +5 -0
  166. data/test/fixtures/override/test/hello_world.erb +1 -0
  167. data/test/fixtures/override2/layouts/test/sub.erb +1 -0
  168. data/test/fixtures/post_test/layouts/post.html.erb +1 -0
  169. data/test/fixtures/post_test/layouts/super_post.iphone.erb +1 -0
  170. data/test/fixtures/post_test/post/index.html.erb +1 -0
  171. data/test/fixtures/post_test/post/index.iphone.erb +1 -0
  172. data/test/fixtures/post_test/super_post/index.html.erb +1 -0
  173. data/test/fixtures/post_test/super_post/index.iphone.erb +1 -0
  174. data/test/fixtures/public/404.html +1 -0
  175. data/test/fixtures/public/500.html +1 -0
  176. data/test/fixtures/public/javascripts/application.js +0 -1
  177. data/test/fixtures/public/javascripts/bank.js +1 -0
  178. data/test/fixtures/public/javascripts/robber.js +1 -0
  179. data/test/fixtures/public/stylesheets/bank.css +1 -0
  180. data/test/fixtures/public/stylesheets/robber.css +1 -0
  181. data/test/fixtures/replies.yml +2 -0
  182. data/test/fixtures/reply.rb +2 -1
  183. data/test/fixtures/respond_to/{all_types_with_layout.rhtml → all_types_with_layout.html.erb} +0 -0
  184. data/test/fixtures/respond_to/{all_types_with_layout.rjs → all_types_with_layout.js.rjs} +0 -0
  185. data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +1 -0
  186. data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +1 -0
  187. data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +1 -0
  188. data/test/fixtures/respond_to/layouts/missing.html.erb +1 -0
  189. data/test/fixtures/respond_to/layouts/standard.html.erb +1 -0
  190. data/test/fixtures/respond_to/layouts/standard.iphone.erb +1 -0
  191. data/test/fixtures/respond_to/{using_defaults.rhtml → using_defaults.html.erb} +0 -0
  192. data/test/fixtures/respond_to/{using_defaults.rjs → using_defaults.js.rjs} +0 -0
  193. data/test/fixtures/respond_to/{using_defaults.rxml → using_defaults.xml.builder} +0 -0
  194. data/test/fixtures/respond_to/{using_defaults_with_type_list.rhtml → using_defaults_with_type_list.html.erb} +0 -0
  195. data/test/fixtures/respond_to/{using_defaults_with_type_list.rjs → using_defaults_with_type_list.js.rjs} +0 -0
  196. data/test/fixtures/respond_to/{using_defaults_with_type_list.rxml → using_defaults_with_type_list.xml.builder} +0 -0
  197. data/test/fixtures/scope/test/{modgreet.rhtml → modgreet.erb} +0 -0
  198. data/test/fixtures/test/{_customer.rhtml → _customer.erb} +0 -0
  199. data/test/fixtures/test/{_customer_greeting.rhtml → _customer_greeting.erb} +0 -0
  200. data/test/fixtures/test/_hash_greeting.erb +1 -0
  201. data/test/fixtures/test/_hash_object.erb +2 -0
  202. data/test/fixtures/test/{_hello.rxml → _hello.builder} +0 -0
  203. data/test/fixtures/test/_layout_for_partial.html.erb +3 -0
  204. data/test/fixtures/test/_partial.erb +1 -0
  205. data/test/fixtures/test/_partial.html.erb +1 -0
  206. data/test/fixtures/test/_partial.js.erb +1 -0
  207. data/test/fixtures/test/_partial_for_use_in_layout.html.erb +1 -0
  208. data/test/fixtures/test/{_partial_only.rhtml → _partial_only.erb} +0 -0
  209. data/test/fixtures/test/{_person.rhtml → _person.erb} +0 -0
  210. data/test/fixtures/test/{action_talk_to_layout.rhtml → action_talk_to_layout.erb} +0 -0
  211. data/test/fixtures/test/{block_content_for.rhtml → block_content_for.erb} +0 -0
  212. data/test/fixtures/test/calling_partial_with_layout.html.erb +1 -0
  213. data/test/fixtures/test/{capturing.rhtml → capturing.erb} +0 -0
  214. data/test/fixtures/test/{content_for.rhtml → content_for.erb} +0 -0
  215. data/test/fixtures/test/content_for_concatenated.erb +3 -0
  216. data/test/fixtures/test/content_for_with_parameter.erb +2 -0
  217. data/test/fixtures/test/dot.directory/{render_file_with_ivar.rhtml → render_file_with_ivar.erb} +0 -0
  218. data/test/fixtures/test/{erb_content_for.rhtml → erb_content_for.erb} +0 -0
  219. data/test/fixtures/test/formatted_html_erb.html.erb +1 -0
  220. data/test/fixtures/test/formatted_xml_erb.builder +1 -0
  221. data/test/fixtures/test/formatted_xml_erb.html.erb +1 -0
  222. data/test/fixtures/test/formatted_xml_erb.xml.erb +1 -0
  223. data/test/fixtures/test/{greeting.rhtml → greeting.erb} +0 -0
  224. data/test/fixtures/test/{hello.rxml → hello.builder} +0 -0
  225. data/test/fixtures/test/{hello_world.rxml → hello_world.builder} +0 -0
  226. data/test/fixtures/test/{hello_world.rhtml → hello_world.erb} +0 -0
  227. data/test/fixtures/test/{hello_world_container.rxml → hello_world_container.builder} +0 -0
  228. data/test/fixtures/test/{hello_world_with_layout_false.rhtml → hello_world_with_layout_false.erb} +0 -0
  229. data/test/fixtures/test/{hello_xml_world.rxml → hello_xml_world.builder} +0 -0
  230. data/test/fixtures/test/list.erb +1 -0
  231. data/test/fixtures/test/{non_erb_block_content_for.rxml → non_erb_block_content_for.builder} +0 -0
  232. data/test/fixtures/test/{potential_conflicts.rhtml → potential_conflicts.erb} +0 -0
  233. data/test/fixtures/test/{render_file_with_ivar.rhtml → render_file_with_ivar.erb} +0 -0
  234. data/test/fixtures/test/{render_file_with_locals.rhtml → render_file_with_locals.erb} +0 -0
  235. data/test/fixtures/test/{render_to_string_test.rhtml → render_to_string_test.erb} +0 -0
  236. data/test/fixtures/test/{update_element_with_capture.rhtml → update_element_with_capture.erb} +0 -0
  237. data/test/fixtures/test/using_layout_around_block.html.erb +1 -0
  238. data/test/fixtures/topic.rb +1 -1
  239. data/test/template/active_record_helper_test.rb +67 -20
  240. data/test/template/asset_tag_helper_test.rb +222 -54
  241. data/test/template/atom_feed_helper_test.rb +101 -0
  242. data/test/template/benchmark_helper_test.rb +2 -2
  243. data/test/template/compiled_templates_test.rb +76 -32
  244. data/test/template/date_helper_test.rb +125 -9
  245. data/test/template/form_helper_test.rb +326 -33
  246. data/test/template/form_options_helper_test.rb +822 -15
  247. data/test/template/form_tag_helper_test.rb +96 -30
  248. data/test/template/javascript_helper_test.rb +61 -13
  249. data/test/template/number_helper_test.rb +12 -11
  250. data/test/template/prototype_helper_test.rb +185 -24
  251. data/test/template/sanitize_helper_test.rb +49 -0
  252. data/test/template/scriptaculous_helper_test.rb +9 -3
  253. data/test/template/tag_helper_test.rb +13 -2
  254. data/test/template/text_helper_test.rb +38 -52
  255. data/test/template/url_helper_test.rb +216 -46
  256. metadata +144 -116
  257. data/examples/.htaccess +0 -24
  258. data/examples/address_book/index.rhtml +0 -33
  259. data/examples/address_book/layout.rhtml +0 -8
  260. data/examples/address_book_controller.cgi +0 -9
  261. data/examples/address_book_controller.fcgi +0 -6
  262. data/examples/address_book_controller.rb +0 -52
  263. data/examples/address_book_controller.rbx +0 -4
  264. data/examples/benchmark.rb +0 -52
  265. data/examples/benchmark_with_ar.fcgi +0 -89
  266. data/examples/blog_controller.cgi +0 -53
  267. data/examples/debate/index.rhtml +0 -14
  268. data/examples/debate/new_topic.rhtml +0 -22
  269. data/examples/debate/topic.rhtml +0 -32
  270. data/examples/debate_controller.cgi +0 -57
  271. data/lib/action_controller/assertions/deprecated_assertions.rb +0 -228
  272. data/lib/action_controller/cgi_ext/cgi_ext.rb +0 -36
  273. data/lib/action_controller/cgi_ext/cgi_methods.rb +0 -211
  274. data/lib/action_controller/cgi_ext/pstore_performance_fix.rb +0 -30
  275. data/lib/action_controller/cgi_ext/raw_post_data_fix.rb +0 -95
  276. data/lib/action_controller/cgi_ext/session_performance_fix.rb +0 -30
  277. data/lib/action_controller/deprecated_dependencies.rb +0 -65
  278. data/lib/action_controller/deprecated_redirects.rb +0 -17
  279. data/lib/action_controller/deprecated_request_methods.rb +0 -34
  280. data/lib/action_controller/macros/auto_complete.rb +0 -53
  281. data/lib/action_controller/macros/in_place_editing.rb +0 -33
  282. data/lib/action_controller/pagination.rb +0 -408
  283. data/lib/action_controller/scaffolding.rb +0 -189
  284. data/lib/action_controller/templates/rescues/_request_and_response.rhtml +0 -44
  285. data/lib/action_controller/templates/scaffolds/edit.rhtml +0 -7
  286. data/lib/action_controller/templates/scaffolds/layout.rhtml +0 -69
  287. data/lib/action_controller/templates/scaffolds/list.rhtml +0 -27
  288. data/lib/action_controller/templates/scaffolds/new.rhtml +0 -6
  289. data/lib/action_controller/templates/scaffolds/show.rhtml +0 -9
  290. data/lib/action_controller/vendor/xml_node.rb +0 -97
  291. data/lib/action_view/helpers/deprecated_helper.rb +0 -37
  292. data/lib/action_view/helpers/java_script_macros_helper.rb +0 -233
  293. data/lib/action_view/helpers/pagination_helper.rb +0 -86
  294. data/test/activerecord/active_record_assertions_test.rb +0 -92
  295. data/test/activerecord/pagination_test.rb +0 -165
  296. data/test/controller/deprecated_instance_variables_test.rb +0 -48
  297. data/test/controller/raw_post_test.rb +0 -68
  298. data/test/fixtures/deprecated_instance_variables/_cookies_ivar.rhtml +0 -1
  299. data/test/fixtures/deprecated_instance_variables/_cookies_method.rhtml +0 -1
  300. data/test/fixtures/deprecated_instance_variables/_flash_ivar.rhtml +0 -1
  301. data/test/fixtures/deprecated_instance_variables/_flash_method.rhtml +0 -1
  302. data/test/fixtures/deprecated_instance_variables/_headers_ivar.rhtml +0 -1
  303. data/test/fixtures/deprecated_instance_variables/_headers_method.rhtml +0 -1
  304. data/test/fixtures/deprecated_instance_variables/_params_ivar.rhtml +0 -1
  305. data/test/fixtures/deprecated_instance_variables/_params_method.rhtml +0 -1
  306. data/test/fixtures/deprecated_instance_variables/_request_ivar.rhtml +0 -1
  307. data/test/fixtures/deprecated_instance_variables/_request_method.rhtml +0 -1
  308. data/test/fixtures/deprecated_instance_variables/_response_ivar.rhtml +0 -1
  309. data/test/fixtures/deprecated_instance_variables/_response_method.rhtml +0 -1
  310. data/test/fixtures/deprecated_instance_variables/_session_ivar.rhtml +0 -1
  311. data/test/fixtures/deprecated_instance_variables/_session_method.rhtml +0 -1
  312. data/test/fixtures/respond_to/layouts/standard.rhtml +0 -1
  313. data/test/fixtures/test/_hash_object.rhtml +0 -1
  314. data/test/fixtures/test/list.rhtml +0 -1
  315. data/test/template/deprecated_helper_test.rb +0 -36
  316. data/test/template/deprecated_instance_variables_test.rb +0 -43
  317. data/test/template/java_script_macros_helper_test.rb +0 -109
@@ -14,15 +14,15 @@ class CallerController < ActionController::Base
14
14
  end
15
15
 
16
16
  def calling_from_template
17
- render_template "Ring, ring: <%= render_component(:controller => 'callee', :action => 'being_called') %>"
17
+ render :inline => "Ring, ring: <%= render_component(:controller => 'callee', :action => 'being_called') %>"
18
18
  end
19
19
 
20
20
  def internal_caller
21
- render_template "Are you there? <%= render_component(:action => 'internal_callee') %>"
21
+ render :inline => "Are you there? <%= render_component(:action => 'internal_callee') %>"
22
22
  end
23
-
23
+
24
24
  def internal_callee
25
- render_text "Yes, ma'am"
25
+ render :text => "Yes, ma'am"
26
26
  end
27
27
 
28
28
  def set_flash
@@ -32,13 +32,13 @@ class CallerController < ActionController::Base
32
32
  def use_flash
33
33
  render_component(:controller => "callee", :action => "use_flash")
34
34
  end
35
-
35
+
36
36
  def calling_redirected
37
37
  render_component(:controller => "callee", :action => "redirected")
38
38
  end
39
-
39
+
40
40
  def calling_redirected_as_string
41
- render_template "<%= render_component(:controller => 'callee', :action => 'redirected') %>"
41
+ render :inline => "<%= render_component(:controller => 'callee', :action => 'redirected') %>"
42
42
  end
43
43
 
44
44
  def rescue_action(e) raise end
@@ -46,22 +46,22 @@ end
46
46
 
47
47
  class CalleeController < ActionController::Base
48
48
  def being_called
49
- render_text "#{params[:name] || "Lady"} of the House, speaking"
49
+ render :text => "#{params[:name] || "Lady"} of the House, speaking"
50
50
  end
51
-
51
+
52
52
  def blowing_up
53
- render_text "It's game over, man, just game over, man!", "500 Internal Server Error"
53
+ render :text => "It's game over, man, just game over, man!", :status => 500
54
54
  end
55
-
55
+
56
56
  def set_flash
57
57
  flash[:notice] = 'My stoney baby'
58
58
  render :text => 'flash is set'
59
59
  end
60
-
60
+
61
61
  def use_flash
62
62
  render :text => flash[:notice] || 'no flash'
63
63
  end
64
-
64
+
65
65
  def redirected
66
66
  redirect_to :controller => "callee", :action => "being_called"
67
67
  end
@@ -85,7 +85,7 @@ class ComponentsTest < Test::Unit::TestCase
85
85
  get :calling_from_controller_with_params
86
86
  assert_equal "David of the House, speaking", @response.body
87
87
  end
88
-
88
+
89
89
  def test_calling_from_controller_with_different_status_code
90
90
  get :calling_from_controller_with_different_status_code
91
91
  assert_equal 500, @response.response_code
@@ -95,12 +95,18 @@ class ComponentsTest < Test::Unit::TestCase
95
95
  get :calling_from_template
96
96
  assert_equal "Ring, ring: Lady of the House, speaking", @response.body
97
97
  end
98
-
98
+
99
+ def test_etag_is_set_for_parent_template_when_calling_from_template
100
+ get :calling_from_template
101
+ expected_etag = etag_for("Ring, ring: Lady of the House, speaking")
102
+ assert_equal expected_etag, @response.headers['ETag']
103
+ end
104
+
99
105
  def test_internal_calling
100
106
  get :internal_caller
101
107
  assert_equal "Are you there? Yes, ma'am", @response.body
102
108
  end
103
-
109
+
104
110
  def test_flash
105
111
  get :set_flash
106
112
  assert_equal 'My stoney baby', flash[:notice]
@@ -109,43 +115,26 @@ class ComponentsTest < Test::Unit::TestCase
109
115
  get :use_flash
110
116
  assert_equal 'no flash', @response.body
111
117
  end
112
-
118
+
113
119
  def test_component_redirect_redirects
114
120
  get :calling_redirected
115
-
121
+
116
122
  assert_redirected_to :action => "being_called"
117
123
  end
118
-
124
+
119
125
  def test_component_multiple_redirect_redirects
120
126
  test_component_redirect_redirects
121
127
  test_internal_calling
122
128
  end
123
-
124
- def test_component_as_string_redirect_renders_redirecte_action
129
+
130
+ def test_component_as_string_redirect_renders_redirected_action
125
131
  get :calling_redirected_as_string
126
-
127
- assert_equal "Lady of the House, speaking", @response.body
128
- end
129
- end
130
132
 
131
- module A
132
- module B
133
- module C
134
- class NestedController < ActionController::Base
135
- # Stub for uses_component_template_root
136
- def self.caller
137
- [ '/path/to/active_support/deprecation.rb:93:in `uses_component_template_root',
138
- './test/fixtures/a/b/c/nested_controller.rb' ]
139
- end
140
- end
141
- end
133
+ assert_equal "Lady of the House, speaking", @response.body
142
134
  end
143
- end
144
135
 
145
- class UsesComponentTemplateRootTest < Test::Unit::TestCase
146
- def test_uses_component_template_root
147
- assert_deprecated 'uses_component_template_root' do
148
- assert_equal './test/fixtures/', A::B::C::NestedController.uses_component_template_root
136
+ protected
137
+ def etag_for(text)
138
+ %("#{Digest::MD5.hexdigest(text)}")
149
139
  end
150
- end
151
140
  end
@@ -45,7 +45,7 @@ class ContentTypeController < ActionController::Base
45
45
  def rescue_action(e) raise end
46
46
  end
47
47
 
48
- ContentTypeController.template_root = File.dirname(__FILE__) + "/../fixtures/"
48
+ ContentTypeController.view_paths = [ File.dirname(__FILE__) + "/../fixtures/" ]
49
49
 
50
50
  class ContentTypeTest < Test::Unit::TestCase
51
51
  def setup
@@ -2,19 +2,15 @@ require File.dirname(__FILE__) + '/../abstract_unit'
2
2
 
3
3
  class CookieTest < Test::Unit::TestCase
4
4
  class TestController < ActionController::Base
5
- def authenticate_with_deprecated_writer
6
- cookie "name" => "user_name", "value" => "david"
7
- end
8
-
9
5
  def authenticate
10
6
  cookies["user_name"] = "david"
11
7
  end
12
8
 
13
- def authenticate_for_fourten_days
9
+ def authenticate_for_fourteen_days
14
10
  cookies["user_name"] = { "value" => "david", "expires" => Time.local(2005, 10, 10) }
15
11
  end
16
12
 
17
- def authenticate_for_fourten_days_with_symbols
13
+ def authenticate_for_fourteen_days_with_symbols
18
14
  cookies[:user_name] = { :value => "david", :expires => Time.local(2005, 10, 10) }
19
15
  end
20
16
 
@@ -33,7 +29,11 @@ class CookieTest < Test::Unit::TestCase
33
29
 
34
30
  def delete_cookie_with_path
35
31
  cookies.delete("user_name", :path => '/beaten')
36
- render_text "hello world"
32
+ render :text => "hello world"
33
+ end
34
+
35
+ def authenticate_with_http_only
36
+ cookies["user_name"] = { :value => "david", :http_only => true }
37
37
  end
38
38
 
39
39
  def rescue_action(e)
@@ -49,26 +49,27 @@ class CookieTest < Test::Unit::TestCase
49
49
  @request.host = "www.nextangle.com"
50
50
  end
51
51
 
52
- def test_setting_cookie_with_deprecated_writer
53
- get :authenticate_with_deprecated_writer
54
- assert_equal [ CGI::Cookie::new("name" => "user_name", "value" => "david") ], @response.headers["cookie"]
55
- end
56
-
57
52
  def test_setting_cookie
58
53
  get :authenticate
59
54
  assert_equal [ CGI::Cookie::new("name" => "user_name", "value" => "david") ], @response.headers["cookie"]
60
55
  end
61
56
 
62
57
  def test_setting_cookie_for_fourteen_days
63
- get :authenticate_for_fourten_days
58
+ get :authenticate_for_fourteen_days
64
59
  assert_equal [ CGI::Cookie::new("name" => "user_name", "value" => "david", "expires" => Time.local(2005, 10, 10)) ], @response.headers["cookie"]
65
60
  end
66
61
 
67
62
  def test_setting_cookie_for_fourteen_days_with_symbols
68
- get :authenticate_for_fourten_days
63
+ get :authenticate_for_fourteen_days
69
64
  assert_equal [ CGI::Cookie::new("name" => "user_name", "value" => "david", "expires" => Time.local(2005, 10, 10)) ], @response.headers["cookie"]
70
65
  end
71
66
 
67
+ def test_setting_cookie_with_http_only
68
+ get :authenticate_with_http_only
69
+ assert_equal [ CGI::Cookie::new("name" => "user_name", "value" => "david", "http_only" => true) ], @response.headers["cookie"]
70
+ assert_equal CGI::Cookie::new("name" => "user_name", "value" => "david", "path" => "/", "http_only" => true).to_s, @response.headers["cookie"].to_s
71
+ end
72
+
72
73
  def test_multiple_cookies
73
74
  get :set_multiple_cookies
74
75
  assert_equal 2, @response.cookies.size
@@ -104,4 +105,31 @@ class CookieTest < Test::Unit::TestCase
104
105
  assert_equal "/beaten", @response.headers["cookie"].first.path
105
106
  assert_not_equal "/", @response.headers["cookie"].first.path
106
107
  end
108
+
109
+ def test_cookie_to_s_simple_values
110
+ assert_equal 'myname=myvalue; path=', CGI::Cookie.new('myname', 'myvalue').to_s
111
+ end
112
+
113
+ def test_cookie_to_s_hash
114
+ cookie_str = CGI::Cookie.new(
115
+ 'name' => 'myname',
116
+ 'value' => 'myvalue',
117
+ 'domain' => 'mydomain',
118
+ 'path' => 'mypath',
119
+ 'expires' => Time.utc(2007, 10, 20),
120
+ 'secure' => true,
121
+ 'http_only' => true).to_s
122
+ assert_equal 'myname=myvalue; domain=mydomain; path=mypath; expires=Sat, 20 Oct 2007 00:00:00 GMT; secure; HttpOnly', cookie_str
123
+ end
124
+
125
+ def test_cookie_to_s_hash_default_not_secure_not_http_only
126
+ cookie_str = CGI::Cookie.new(
127
+ 'name' => 'myname',
128
+ 'value' => 'myvalue',
129
+ 'domain' => 'mydomain',
130
+ 'path' => 'mypath',
131
+ 'expires' => Time.utc(2007, 10, 20))
132
+ assert cookie_str !~ /secure/
133
+ assert cookie_str !~ /HttpOnly/
134
+ end
107
135
  end
@@ -1,20 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/../../abstract_unit'
2
2
 
3
3
  class DeprecatedBaseMethodsTest < Test::Unit::TestCase
4
- # ActiveRecord model mock to test pagination deprecation
5
- class DummyModel
6
- def self.find(*args) [] end
7
- def self.count(*args) 0 end
8
- end
9
-
10
4
  class Target < ActionController::Base
11
- def deprecated_symbol_parameter_to_url_for
12
- redirect_to(url_for(:home_url, "superstars"))
13
- end
14
-
15
- def deprecated_render_parameters
16
- render "fun/games/hello_world"
17
- end
18
5
 
19
6
  def home_url(greeting)
20
7
  "http://example.com/#{greeting}"
@@ -24,37 +11,15 @@ class DeprecatedBaseMethodsTest < Test::Unit::TestCase
24
11
  this_method_doesnt_exist
25
12
  end
26
13
 
27
- def pagination
28
- paginate :dummy_models, :class_name => 'DeprecatedBaseMethodsTest::DummyModel'
29
- render :nothing => true
30
- end
31
-
32
14
  def rescue_action(e) raise e end
33
15
  end
34
16
 
35
- Target.template_root = File.dirname(__FILE__) + "/../../fixtures"
17
+ Target.view_paths = [ File.dirname(__FILE__) + "/../../fixtures" ]
36
18
 
37
19
  def setup
38
20
  @request = ActionController::TestRequest.new
39
21
  @response = ActionController::TestResponse.new
40
22
  @controller = Target.new
41
- @controller.logger = Logger.new(nil) unless @controller.logger
42
- end
43
-
44
- def test_deprecated_symbol_parameter_to_url_for
45
- assert_deprecated("url_for(:home_url)") do
46
- get :deprecated_symbol_parameter_to_url_for
47
- end
48
-
49
- assert_redirected_to "http://example.com/superstars"
50
- end
51
-
52
- def test_deprecated_render_parameters
53
- assert_deprecated("render('fun/games/hello_world')") do
54
- get :deprecated_render_parameters
55
- end
56
-
57
- assert_equal "Living in a nested world", @response.body
58
23
  end
59
24
 
60
25
  def test_log_error_silences_deprecation_warnings
@@ -69,10 +34,4 @@ class DeprecatedBaseMethodsTest < Test::Unit::TestCase
69
34
  error = Test::Unit::Error.new('testing ur doodz', e)
70
35
  assert_not_deprecated { error.message }
71
36
  end
72
-
73
- def test_pagination_deprecation
74
- assert_deprecated('svn://errtheblog.com/svn/plugins/classic_pagination') do
75
- get :pagination
76
- end
77
- end
78
37
  end
@@ -0,0 +1,123 @@
1
+ require "#{File.dirname(__FILE__)}/../abstract_unit"
2
+
3
+ uses_mocha 'dispatcher tests' do
4
+
5
+ require 'action_controller/dispatcher'
6
+
7
+ class DispatcherTest < Test::Unit::TestCase
8
+ Dispatcher = ActionController::Dispatcher
9
+
10
+ def setup
11
+ @output = StringIO.new
12
+ ENV['REQUEST_METHOD'] = 'GET'
13
+
14
+ Dispatcher.callbacks[:prepare].clear
15
+ @dispatcher = Dispatcher.new(@output)
16
+ end
17
+
18
+ def teardown
19
+ ENV['REQUEST_METHOD'] = nil
20
+ end
21
+
22
+ def test_clears_dependencies_after_dispatch_if_in_loading_mode
23
+ Dependencies.stubs(:load?).returns(true)
24
+
25
+ ActionController::Routing::Routes.expects(:reload).once
26
+ Dependencies.expects(:clear).once
27
+
28
+ dispatch
29
+ end
30
+
31
+ def test_leaves_dependencies_after_dispatch_if_not_in_loading_mode
32
+ Dependencies.stubs(:load?).returns(false)
33
+
34
+ ActionController::Routing::Routes.expects(:reload).never
35
+ Dependencies.expects(:clear).never
36
+
37
+ dispatch
38
+ end
39
+
40
+ def test_failsafe_response
41
+ CGI.expects(:new).raises('some multipart parsing failure')
42
+
43
+ ActionController::Routing::Routes.stubs(:reload)
44
+ Dispatcher.stubs(:log_failsafe_exception)
45
+
46
+ assert_nothing_raised { dispatch }
47
+
48
+ assert_equal "Status: 400 Bad Request\r\nContent-Type: text/html\r\n\r\n<html><body><h1>400 Bad Request</h1></body></html>", @output.string
49
+ end
50
+
51
+ def test_reload_application_sets_unprepared_if_loading_dependencies
52
+ Dependencies.stubs(:load?).returns(false)
53
+ ActionController::Routing::Routes.expects(:reload).never
54
+ @dispatcher.unprepared = false
55
+ @dispatcher.send!(:reload_application)
56
+ assert !@dispatcher.unprepared
57
+
58
+ Dependencies.stubs(:load?).returns(true)
59
+ ActionController::Routing::Routes.expects(:reload).once
60
+ @dispatcher.send!(:reload_application)
61
+ assert @dispatcher.unprepared
62
+ end
63
+
64
+ def test_prepare_application_runs_callbacks_if_unprepared
65
+ a = b = c = nil
66
+ Dispatcher.to_prepare { a = b = c = 1 }
67
+ Dispatcher.to_prepare { b = c = 2 }
68
+ Dispatcher.to_prepare { c = 3 }
69
+
70
+ # Skip the callbacks when already prepared.
71
+ @dispatcher.unprepared = false
72
+ @dispatcher.send! :prepare_application
73
+ assert_nil a || b || c
74
+
75
+ # Perform the callbacks when unprepared.
76
+ @dispatcher.unprepared = true
77
+ @dispatcher.send! :prepare_application
78
+ assert_equal 1, a
79
+ assert_equal 2, b
80
+ assert_equal 3, c
81
+
82
+ # But when not :load, make sure they are only run once
83
+ a = b = c = nil
84
+ @dispatcher.send! :prepare_application
85
+ assert_nil a || b || c
86
+ end
87
+
88
+ def test_to_prepare_with_identifier_replaces
89
+ a = b = nil
90
+ Dispatcher.to_prepare(:unique_id) { a = b = 1 }
91
+ Dispatcher.to_prepare(:unique_id) { a = 2 }
92
+
93
+ @dispatcher.unprepared = true
94
+ @dispatcher.send! :prepare_application
95
+ assert_equal 2, a
96
+ assert_equal nil, b
97
+ end
98
+
99
+ def test_to_prepare_only_runs_once_if_not_loading_dependencies
100
+ Dependencies.stubs(:load?).returns(false)
101
+ called = 0
102
+ Dispatcher.to_prepare(:unprepared_test) { called += 1 }
103
+ 2.times { dispatch }
104
+ assert_equal 1, called
105
+ end
106
+
107
+ private
108
+ def dispatch(output = @output)
109
+ controller = mock
110
+ controller.stubs(:process).returns(controller)
111
+ controller.stubs(:out).with(output).returns('response')
112
+
113
+ ActionController::Routing::Routes.stubs(:recognize).returns(controller)
114
+
115
+ Dispatcher.dispatch(nil, {}, output)
116
+ end
117
+
118
+ def assert_subclasses(howmany, klass, message = klass.subclasses.inspect)
119
+ assert_equal howmany, klass.subclasses.size, message
120
+ end
121
+ end
122
+
123
+ end