actionpack 2.3.18 → 3.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of actionpack might be problematic. Click here for more details.

Files changed (513) hide show
  1. data/CHANGELOG +15 -64
  2. data/README +39 -48
  3. data/lib/abstract_controller.rb +22 -0
  4. data/lib/abstract_controller/base.rb +191 -0
  5. data/lib/abstract_controller/callbacks.rb +113 -0
  6. data/lib/abstract_controller/collector.rb +30 -0
  7. data/lib/abstract_controller/compatibility.rb +18 -0
  8. data/lib/abstract_controller/helpers.rb +163 -0
  9. data/lib/abstract_controller/layouts.rb +413 -0
  10. data/lib/abstract_controller/localized_cache.rb +49 -0
  11. data/lib/abstract_controller/logger.rb +13 -0
  12. data/lib/abstract_controller/rendering.rb +238 -0
  13. data/lib/{action_controller → abstract_controller}/translation.rb +1 -1
  14. data/lib/action_controller.rb +68 -102
  15. data/lib/action_controller/base.rb +77 -1409
  16. data/lib/action_controller/caching.rb +58 -45
  17. data/lib/action_controller/caching/actions.rb +100 -114
  18. data/lib/action_controller/caching/fragments.rb +17 -19
  19. data/lib/action_controller/caching/pages.rb +12 -6
  20. data/lib/action_controller/caching/sweeping.rb +42 -0
  21. data/lib/action_controller/deprecated.rb +5 -0
  22. data/lib/action_controller/deprecated/dispatcher.rb +28 -0
  23. data/lib/action_controller/deprecated/integration_test.rb +2 -0
  24. data/lib/action_controller/deprecated/performance_test.rb +1 -0
  25. data/lib/action_controller/metal.rb +125 -0
  26. data/lib/action_controller/metal/compatibility.rb +141 -0
  27. data/lib/action_controller/metal/conditional_get.rb +86 -0
  28. data/lib/action_controller/metal/configuration.rb +28 -0
  29. data/lib/action_controller/metal/cookies.rb +17 -0
  30. data/lib/action_controller/metal/exceptions.rb +46 -0
  31. data/lib/action_controller/metal/flash.rb +28 -0
  32. data/lib/action_controller/metal/head.rb +33 -0
  33. data/lib/action_controller/metal/helpers.rb +116 -0
  34. data/lib/action_controller/metal/hide_actions.rb +50 -0
  35. data/lib/action_controller/{http_authentication.rb → metal/http_authentication.rb} +18 -15
  36. data/lib/action_controller/metal/instrumentation.rb +99 -0
  37. data/lib/action_controller/metal/mime_responds.rb +300 -0
  38. data/lib/action_controller/metal/rack_delegation.rb +35 -0
  39. data/lib/action_controller/metal/redirecting.rb +90 -0
  40. data/lib/action_controller/metal/renderers.rb +95 -0
  41. data/lib/action_controller/metal/rendering.rb +69 -0
  42. data/lib/action_controller/metal/request_forgery_protection.rb +115 -0
  43. data/lib/action_controller/metal/rescue.rb +13 -0
  44. data/lib/action_controller/metal/responder.rb +220 -0
  45. data/lib/action_controller/{session_management.rb → metal/session_management.rb} +5 -14
  46. data/lib/action_controller/{streaming.rb → metal/streaming.rb} +13 -12
  47. data/lib/action_controller/metal/testing.rb +42 -0
  48. data/lib/action_controller/metal/url_for.rb +157 -0
  49. data/lib/action_controller/{verification.rb → metal/verification.rb} +41 -41
  50. data/lib/action_controller/middleware.rb +38 -0
  51. data/lib/action_controller/polymorphic_routes.rb +20 -26
  52. data/lib/action_controller/railtie.rb +30 -0
  53. data/lib/action_controller/railties/subscriber.rb +63 -0
  54. data/lib/action_controller/record_identifier.rb +3 -16
  55. data/lib/action_controller/test_case.rb +156 -18
  56. data/lib/action_controller/url_rewriter.rb +47 -200
  57. data/lib/action_controller/vendor/html-scanner.rb +16 -12
  58. data/lib/action_controller/vendor/html-scanner/html/node.rb +1 -1
  59. data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +12 -9
  60. data/lib/action_dispatch.rb +88 -0
  61. data/lib/action_dispatch/http/cache.rb +123 -0
  62. data/lib/action_dispatch/http/filter_parameters.rb +98 -0
  63. data/lib/{action_controller → action_dispatch/http}/headers.rb +8 -8
  64. data/lib/action_dispatch/http/mime_negotiation.rb +101 -0
  65. data/lib/{action_controller → action_dispatch/http}/mime_type.rb +30 -11
  66. data/lib/{action_controller → action_dispatch/http}/mime_types.rb +5 -3
  67. data/lib/action_dispatch/http/parameters.rb +49 -0
  68. data/lib/action_dispatch/http/request.rb +223 -0
  69. data/lib/action_dispatch/http/response.rb +209 -0
  70. data/lib/action_dispatch/http/upload.rb +48 -0
  71. data/lib/action_dispatch/http/url.rb +129 -0
  72. data/lib/action_dispatch/middleware/callbacks.rb +50 -0
  73. data/lib/action_dispatch/middleware/cascade.rb +29 -0
  74. data/lib/action_dispatch/middleware/cookies.rb +216 -0
  75. data/lib/{action_controller → action_dispatch/middleware}/flash.rb +51 -90
  76. data/lib/action_dispatch/middleware/head.rb +18 -0
  77. data/lib/action_dispatch/middleware/params_parser.rb +78 -0
  78. data/lib/action_dispatch/middleware/rescue.rb +26 -0
  79. data/lib/action_dispatch/middleware/session/abstract_store.rb +209 -0
  80. data/lib/{action_controller → action_dispatch/middleware}/session/cookie_store.rb +56 -60
  81. data/lib/action_dispatch/middleware/session/mem_cache_store.rb +47 -0
  82. data/lib/action_dispatch/middleware/show_exceptions.rb +173 -0
  83. data/lib/{action_controller/middleware_stack.rb → action_dispatch/middleware/stack.rb} +23 -13
  84. data/lib/action_dispatch/middleware/static.rb +44 -0
  85. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/_request_and_response.erb +10 -3
  86. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/_trace.erb +4 -4
  87. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb +10 -0
  88. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/layout.erb +2 -2
  89. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/missing_template.erb +0 -0
  90. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/routing_error.erb +0 -0
  91. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/template_error.erb +3 -3
  92. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/unknown_action.erb +0 -0
  93. data/lib/action_dispatch/railtie.rb +15 -0
  94. data/lib/action_dispatch/routing.rb +217 -0
  95. data/lib/action_dispatch/routing/deprecated_mapper.rb +877 -0
  96. data/lib/action_dispatch/routing/mapper.rb +649 -0
  97. data/lib/action_dispatch/routing/route.rb +55 -0
  98. data/lib/action_dispatch/routing/route_set.rb +445 -0
  99. data/lib/action_dispatch/testing/assertions.rb +21 -0
  100. data/lib/action_dispatch/testing/assertions/dom.rb +37 -0
  101. data/lib/{action_controller/assertions/model_assertions.rb → action_dispatch/testing/assertions/model.rb} +2 -4
  102. data/lib/action_dispatch/testing/assertions/response.rb +154 -0
  103. data/lib/{action_controller/assertions/routing_assertions.rb → action_dispatch/testing/assertions/routing.rb} +72 -34
  104. data/lib/{action_controller/assertions/selector_assertions.rb → action_dispatch/testing/assertions/selector.rb} +14 -11
  105. data/lib/{action_controller/assertions/tag_assertions.rb → action_dispatch/testing/assertions/tag.rb} +25 -14
  106. data/lib/{action_controller → action_dispatch/testing}/integration.rb +173 -406
  107. data/lib/action_dispatch/testing/performance_test.rb +17 -0
  108. data/lib/action_dispatch/testing/test_process.rb +42 -0
  109. data/lib/action_dispatch/testing/test_request.rb +83 -0
  110. data/lib/action_dispatch/testing/test_response.rb +136 -0
  111. data/lib/action_pack/version.rb +3 -3
  112. data/lib/action_view.rb +29 -26
  113. data/lib/action_view/base.rb +101 -148
  114. data/lib/action_view/context.rb +44 -0
  115. data/lib/action_view/helpers.rb +6 -4
  116. data/lib/action_view/helpers/{active_record_helper.rb → active_model_helper.rb} +63 -63
  117. data/lib/action_view/helpers/asset_tag_helper.rb +166 -31
  118. data/lib/action_view/helpers/cache_helper.rb +1 -1
  119. data/lib/action_view/helpers/capture_helper.rb +40 -8
  120. data/lib/action_view/helpers/csrf_helper.rb +2 -4
  121. data/lib/action_view/helpers/date_helper.rb +14 -15
  122. data/lib/action_view/helpers/form_helper.rb +121 -24
  123. data/lib/action_view/helpers/form_options_helper.rb +26 -25
  124. data/lib/action_view/helpers/form_tag_helper.rb +42 -33
  125. data/lib/action_view/helpers/javascript_helper.rb +1 -109
  126. data/lib/action_view/helpers/number_helper.rb +4 -1
  127. data/lib/action_view/helpers/prototype_helper.rb +75 -499
  128. data/lib/action_view/helpers/raw_output_helper.rb +1 -1
  129. data/lib/action_view/helpers/record_tag_helper.rb +3 -3
  130. data/lib/action_view/helpers/sanitize_helper.rb +3 -2
  131. data/lib/action_view/helpers/scriptaculous_helper.rb +89 -53
  132. data/lib/action_view/helpers/tag_helper.rb +12 -13
  133. data/lib/action_view/helpers/text_helper.rb +33 -38
  134. data/lib/action_view/helpers/translation_helper.rb +11 -35
  135. data/lib/action_view/helpers/url_helper.rb +140 -134
  136. data/lib/action_view/locale/en.yml +34 -28
  137. data/lib/action_view/paths.rb +27 -24
  138. data/lib/action_view/railtie.rb +17 -0
  139. data/lib/action_view/railties/subscriber.rb +24 -0
  140. data/lib/action_view/{partials.rb → render/partials.rb} +161 -51
  141. data/lib/action_view/render/rendering.rb +117 -0
  142. data/lib/action_view/template.rb +88 -217
  143. data/lib/action_view/template/error.rb +105 -0
  144. data/lib/action_view/template/handler.rb +41 -0
  145. data/lib/action_view/template/handlers.rb +54 -0
  146. data/lib/action_view/{template_handlers → template/handlers}/builder.rb +6 -6
  147. data/lib/action_view/template/handlers/erb.rb +58 -0
  148. data/lib/action_view/{template_handlers → template/handlers}/rjs.rb +8 -3
  149. data/lib/action_view/template/resolver.rb +164 -0
  150. data/lib/action_view/template/text.rb +40 -0
  151. data/lib/action_view/test_case.rb +18 -18
  152. metadata +165 -420
  153. data/RUNNING_UNIT_TESTS +0 -24
  154. data/Rakefile +0 -158
  155. data/install.rb +0 -30
  156. data/lib/action_controller/assertions/dom_assertions.rb +0 -55
  157. data/lib/action_controller/assertions/response_assertions.rb +0 -169
  158. data/lib/action_controller/benchmarking.rb +0 -107
  159. data/lib/action_controller/caching/sweeper.rb +0 -45
  160. data/lib/action_controller/cgi_ext.rb +0 -15
  161. data/lib/action_controller/cgi_ext/cookie.rb +0 -112
  162. data/lib/action_controller/cgi_ext/query_extension.rb +0 -22
  163. data/lib/action_controller/cgi_ext/stdinput.rb +0 -24
  164. data/lib/action_controller/cgi_process.rb +0 -77
  165. data/lib/action_controller/cookies.rb +0 -197
  166. data/lib/action_controller/dispatcher.rb +0 -133
  167. data/lib/action_controller/failsafe.rb +0 -87
  168. data/lib/action_controller/filters.rb +0 -680
  169. data/lib/action_controller/helpers.rb +0 -225
  170. data/lib/action_controller/layout.rb +0 -286
  171. data/lib/action_controller/middlewares.rb +0 -14
  172. data/lib/action_controller/mime_responds.rb +0 -193
  173. data/lib/action_controller/params_parser.rb +0 -77
  174. data/lib/action_controller/performance_test.rb +0 -15
  175. data/lib/action_controller/rack_lint_patch.rb +0 -36
  176. data/lib/action_controller/reloader.rb +0 -54
  177. data/lib/action_controller/request.rb +0 -518
  178. data/lib/action_controller/request_forgery_protection.rb +0 -116
  179. data/lib/action_controller/rescue.rb +0 -183
  180. data/lib/action_controller/resources.rb +0 -682
  181. data/lib/action_controller/response.rb +0 -237
  182. data/lib/action_controller/routing.rb +0 -388
  183. data/lib/action_controller/routing/builder.rb +0 -197
  184. data/lib/action_controller/routing/optimisations.rb +0 -130
  185. data/lib/action_controller/routing/recognition_optimisation.rb +0 -167
  186. data/lib/action_controller/routing/route.rb +0 -265
  187. data/lib/action_controller/routing/route_set.rb +0 -503
  188. data/lib/action_controller/routing/routing_ext.rb +0 -49
  189. data/lib/action_controller/routing/segments.rb +0 -343
  190. data/lib/action_controller/session/abstract_store.rb +0 -276
  191. data/lib/action_controller/session/mem_cache_store.rb +0 -60
  192. data/lib/action_controller/status_codes.rb +0 -88
  193. data/lib/action_controller/string_coercion.rb +0 -29
  194. data/lib/action_controller/templates/rescues/diagnostics.erb +0 -11
  195. data/lib/action_controller/test_process.rb +0 -580
  196. data/lib/action_controller/uploaded_file.rb +0 -44
  197. data/lib/action_view/helpers/benchmark_helper.rb +0 -54
  198. data/lib/action_view/inline_template.rb +0 -19
  199. data/lib/action_view/reloadable_template.rb +0 -117
  200. data/lib/action_view/renderable.rb +0 -109
  201. data/lib/action_view/renderable_partial.rb +0 -53
  202. data/lib/action_view/template_error.rb +0 -99
  203. data/lib/action_view/template_handler.rb +0 -34
  204. data/lib/action_view/template_handlers.rb +0 -48
  205. data/lib/action_view/template_handlers/erb.rb +0 -25
  206. data/lib/actionpack.rb +0 -2
  207. data/test/abstract_unit.rb +0 -78
  208. data/test/active_record_unit.rb +0 -104
  209. data/test/activerecord/active_record_store_test.rb +0 -221
  210. data/test/activerecord/render_partial_with_record_identification_test.rb +0 -188
  211. data/test/adv_attr_test.rb +0 -20
  212. data/test/controller/action_pack_assertions_test.rb +0 -545
  213. data/test/controller/addresses_render_test.rb +0 -37
  214. data/test/controller/assert_select_test.rb +0 -735
  215. data/test/controller/base_test.rb +0 -217
  216. data/test/controller/benchmark_test.rb +0 -32
  217. data/test/controller/caching_test.rb +0 -743
  218. data/test/controller/capture_test.rb +0 -66
  219. data/test/controller/content_type_test.rb +0 -178
  220. data/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
  221. data/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
  222. data/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
  223. data/test/controller/cookie_test.rb +0 -208
  224. data/test/controller/deprecation/deprecated_base_methods_test.rb +0 -32
  225. data/test/controller/dispatcher_test.rb +0 -144
  226. data/test/controller/dom_assertions_test.rb +0 -53
  227. data/test/controller/failsafe_test.rb +0 -60
  228. data/test/controller/fake_controllers.rb +0 -33
  229. data/test/controller/fake_models.rb +0 -19
  230. data/test/controller/filter_params_test.rb +0 -52
  231. data/test/controller/filters_test.rb +0 -885
  232. data/test/controller/flash_test.rb +0 -174
  233. data/test/controller/header_test.rb +0 -14
  234. data/test/controller/helper_test.rb +0 -224
  235. data/test/controller/html-scanner/cdata_node_test.rb +0 -15
  236. data/test/controller/html-scanner/document_test.rb +0 -148
  237. data/test/controller/html-scanner/node_test.rb +0 -89
  238. data/test/controller/html-scanner/sanitizer_test.rb +0 -300
  239. data/test/controller/html-scanner/tag_node_test.rb +0 -238
  240. data/test/controller/html-scanner/text_node_test.rb +0 -50
  241. data/test/controller/html-scanner/tokenizer_test.rb +0 -131
  242. data/test/controller/http_basic_authentication_test.rb +0 -113
  243. data/test/controller/http_digest_authentication_test.rb +0 -254
  244. data/test/controller/integration_test.rb +0 -526
  245. data/test/controller/layout_test.rb +0 -215
  246. data/test/controller/localized_templates_test.rb +0 -24
  247. data/test/controller/logging_test.rb +0 -46
  248. data/test/controller/middleware_stack_test.rb +0 -90
  249. data/test/controller/mime_responds_test.rb +0 -536
  250. data/test/controller/mime_type_test.rb +0 -93
  251. data/test/controller/output_escaping_test.rb +0 -19
  252. data/test/controller/polymorphic_routes_test.rb +0 -297
  253. data/test/controller/rack_test.rb +0 -308
  254. data/test/controller/record_identifier_test.rb +0 -139
  255. data/test/controller/redirect_test.rb +0 -285
  256. data/test/controller/reloader_test.rb +0 -125
  257. data/test/controller/render_test.rb +0 -1783
  258. data/test/controller/request/json_params_parsing_test.rb +0 -65
  259. data/test/controller/request/multipart_params_parsing_test.rb +0 -177
  260. data/test/controller/request/query_string_parsing_test.rb +0 -129
  261. data/test/controller/request/test_request_test.rb +0 -35
  262. data/test/controller/request/url_encoded_params_parsing_test.rb +0 -146
  263. data/test/controller/request/xml_params_parsing_test.rb +0 -103
  264. data/test/controller/request_forgery_protection_test.rb +0 -233
  265. data/test/controller/request_test.rb +0 -398
  266. data/test/controller/rescue_test.rb +0 -541
  267. data/test/controller/resources_test.rb +0 -1393
  268. data/test/controller/routing_test.rb +0 -2592
  269. data/test/controller/selector_test.rb +0 -628
  270. data/test/controller/send_file_test.rb +0 -171
  271. data/test/controller/session/abstract_store_test.rb +0 -64
  272. data/test/controller/session/cookie_store_test.rb +0 -354
  273. data/test/controller/session/mem_cache_store_test.rb +0 -187
  274. data/test/controller/session/test_session_test.rb +0 -58
  275. data/test/controller/test_test.rb +0 -700
  276. data/test/controller/translation_test.rb +0 -26
  277. data/test/controller/url_rewriter_test.rb +0 -395
  278. data/test/controller/verification_test.rb +0 -270
  279. data/test/controller/view_paths_test.rb +0 -141
  280. data/test/controller/webservice_test.rb +0 -273
  281. data/test/fixtures/_top_level_partial.html.erb +0 -1
  282. data/test/fixtures/_top_level_partial_only.erb +0 -1
  283. data/test/fixtures/addresses/list.erb +0 -1
  284. data/test/fixtures/alternate_helpers/foo_helper.rb +0 -3
  285. data/test/fixtures/bad_customers/_bad_customer.html.erb +0 -1
  286. data/test/fixtures/companies.yml +0 -24
  287. data/test/fixtures/company.rb +0 -10
  288. data/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +0 -1
  289. data/test/fixtures/content_type/render_default_for_rhtml.rhtml +0 -1
  290. data/test/fixtures/content_type/render_default_for_rjs.rjs +0 -1
  291. data/test/fixtures/content_type/render_default_for_rxml.rxml +0 -1
  292. data/test/fixtures/customers/_customer.html.erb +0 -1
  293. data/test/fixtures/db_definitions/sqlite.sql +0 -49
  294. data/test/fixtures/developer.rb +0 -9
  295. data/test/fixtures/developers.yml +0 -21
  296. data/test/fixtures/developers/_developer.erb +0 -1
  297. data/test/fixtures/developers_projects.yml +0 -13
  298. data/test/fixtures/failsafe/500.html +0 -1
  299. data/test/fixtures/fun/games/_game.erb +0 -1
  300. data/test/fixtures/fun/games/hello_world.erb +0 -1
  301. data/test/fixtures/fun/serious/games/_game.erb +0 -1
  302. data/test/fixtures/functional_caching/_partial.erb +0 -3
  303. data/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +0 -3
  304. data/test/fixtures/functional_caching/formatted_fragment_cached.js.rjs +0 -6
  305. data/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +0 -5
  306. data/test/fixtures/functional_caching/fragment_cached.html.erb +0 -2
  307. data/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +0 -1
  308. data/test/fixtures/functional_caching/inline_fragment_cached.html.erb +0 -2
  309. data/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +0 -1
  310. data/test/fixtures/good_customers/_good_customer.html.erb +0 -1
  311. data/test/fixtures/helpers/abc_helper.rb +0 -5
  312. data/test/fixtures/helpers/fun/games_helper.rb +0 -3
  313. data/test/fixtures/helpers/fun/pdf_helper.rb +0 -3
  314. data/test/fixtures/layout_tests/abs_path_layout.rhtml +0 -1
  315. data/test/fixtures/layout_tests/alt/hello.rhtml +0 -1
  316. data/test/fixtures/layout_tests/alt/layouts/alt.rhtml +0 -0
  317. data/test/fixtures/layout_tests/layouts/controller_name_space/nested.rhtml +0 -1
  318. data/test/fixtures/layout_tests/layouts/item.rhtml +0 -1
  319. data/test/fixtures/layout_tests/layouts/layout_test.rhtml +0 -1
  320. data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +0 -1
  321. data/test/fixtures/layout_tests/layouts/third_party_template_library.mab +0 -1
  322. data/test/fixtures/layout_tests/views/hello.rhtml +0 -1
  323. data/test/fixtures/layouts/_column.html.erb +0 -2
  324. data/test/fixtures/layouts/block_with_layout.erb +0 -3
  325. data/test/fixtures/layouts/builder.builder +0 -3
  326. data/test/fixtures/layouts/default_html.html.erb +0 -1
  327. data/test/fixtures/layouts/partial_with_layout.erb +0 -3
  328. data/test/fixtures/layouts/standard.erb +0 -1
  329. data/test/fixtures/layouts/talk_from_action.erb +0 -2
  330. data/test/fixtures/layouts/xhr.html.erb +0 -2
  331. data/test/fixtures/layouts/yield.erb +0 -2
  332. data/test/fixtures/localized/hello_world.de.html +0 -1
  333. data/test/fixtures/localized/hello_world.en.html +0 -1
  334. data/test/fixtures/mascot.rb +0 -3
  335. data/test/fixtures/mascots.yml +0 -4
  336. data/test/fixtures/mascots/_mascot.html.erb +0 -1
  337. data/test/fixtures/multipart/binary_file +0 -0
  338. data/test/fixtures/multipart/boundary_problem_file +0 -10
  339. data/test/fixtures/multipart/bracketed_param +0 -5
  340. data/test/fixtures/multipart/empty +0 -10
  341. data/test/fixtures/multipart/hello.txt +0 -1
  342. data/test/fixtures/multipart/large_text_file +0 -10
  343. data/test/fixtures/multipart/mixed_files +0 -0
  344. data/test/fixtures/multipart/mona_lisa.jpg +0 -0
  345. data/test/fixtures/multipart/none +0 -9
  346. data/test/fixtures/multipart/single_parameter +0 -5
  347. data/test/fixtures/multipart/text_file +0 -10
  348. data/test/fixtures/override/test/hello_world.erb +0 -1
  349. data/test/fixtures/override2/layouts/test/sub.erb +0 -1
  350. data/test/fixtures/post_test/layouts/post.html.erb +0 -1
  351. data/test/fixtures/post_test/layouts/super_post.iphone.erb +0 -1
  352. data/test/fixtures/post_test/post/index.html.erb +0 -1
  353. data/test/fixtures/post_test/post/index.iphone.erb +0 -1
  354. data/test/fixtures/post_test/super_post/index.html.erb +0 -1
  355. data/test/fixtures/post_test/super_post/index.iphone.erb +0 -1
  356. data/test/fixtures/project.rb +0 -3
  357. data/test/fixtures/projects.yml +0 -7
  358. data/test/fixtures/projects/_project.erb +0 -1
  359. data/test/fixtures/public/404.html +0 -1
  360. data/test/fixtures/public/500.da.html +0 -1
  361. data/test/fixtures/public/500.html +0 -1
  362. data/test/fixtures/public/absolute/test.css +0 -23
  363. data/test/fixtures/public/absolute/test.js +0 -63
  364. data/test/fixtures/public/images/rails.png +0 -0
  365. data/test/fixtures/public/javascripts/application.js +0 -1
  366. data/test/fixtures/public/javascripts/bank.js +0 -1
  367. data/test/fixtures/public/javascripts/controls.js +0 -1
  368. data/test/fixtures/public/javascripts/dragdrop.js +0 -1
  369. data/test/fixtures/public/javascripts/effects.js +0 -1
  370. data/test/fixtures/public/javascripts/prototype.js +0 -1
  371. data/test/fixtures/public/javascripts/robber.js +0 -1
  372. data/test/fixtures/public/javascripts/subdir/subdir.js +0 -1
  373. data/test/fixtures/public/javascripts/version.1.0.js +0 -1
  374. data/test/fixtures/public/stylesheets/bank.css +0 -1
  375. data/test/fixtures/public/stylesheets/robber.css +0 -1
  376. data/test/fixtures/public/stylesheets/subdir/subdir.css +0 -1
  377. data/test/fixtures/public/stylesheets/version.1.0.css +0 -1
  378. data/test/fixtures/quiz/questions/_question.html.erb +0 -1
  379. data/test/fixtures/replies.yml +0 -15
  380. data/test/fixtures/replies/_reply.erb +0 -1
  381. data/test/fixtures/reply.rb +0 -7
  382. data/test/fixtures/respond_to/all_types_with_layout.html.erb +0 -1
  383. data/test/fixtures/respond_to/all_types_with_layout.js.rjs +0 -1
  384. data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +0 -1
  385. data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +0 -1
  386. data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +0 -1
  387. data/test/fixtures/respond_to/layouts/missing.html.erb +0 -1
  388. data/test/fixtures/respond_to/layouts/standard.html.erb +0 -1
  389. data/test/fixtures/respond_to/layouts/standard.iphone.erb +0 -1
  390. data/test/fixtures/respond_to/using_defaults.html.erb +0 -1
  391. data/test/fixtures/respond_to/using_defaults.js.rjs +0 -1
  392. data/test/fixtures/respond_to/using_defaults.xml.builder +0 -1
  393. data/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +0 -1
  394. data/test/fixtures/respond_to/using_defaults_with_type_list.js.rjs +0 -1
  395. data/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +0 -1
  396. data/test/fixtures/scope/test/modgreet.erb +0 -1
  397. data/test/fixtures/session_autoload_test/session_autoload_test/foo.rb +0 -10
  398. data/test/fixtures/shared.html.erb +0 -1
  399. data/test/fixtures/symlink_parent/symlinked_layout.erb +0 -5
  400. data/test/fixtures/test/_counter.html.erb +0 -1
  401. data/test/fixtures/test/_customer.erb +0 -1
  402. data/test/fixtures/test/_customer_counter.erb +0 -1
  403. data/test/fixtures/test/_customer_counter_with_as.erb +0 -1
  404. data/test/fixtures/test/_customer_greeting.erb +0 -1
  405. data/test/fixtures/test/_customer_with_var.erb +0 -1
  406. data/test/fixtures/test/_form.erb +0 -1
  407. data/test/fixtures/test/_from_helper.erb +0 -1
  408. data/test/fixtures/test/_hash_greeting.erb +0 -1
  409. data/test/fixtures/test/_hash_object.erb +0 -2
  410. data/test/fixtures/test/_hello.builder +0 -1
  411. data/test/fixtures/test/_labelling_form.erb +0 -1
  412. data/test/fixtures/test/_layout_for_block_with_args.html.erb +0 -3
  413. data/test/fixtures/test/_layout_for_partial.html.erb +0 -3
  414. data/test/fixtures/test/_local_inspector.html.erb +0 -1
  415. data/test/fixtures/test/_one.html.erb +0 -1
  416. data/test/fixtures/test/_partial.erb +0 -1
  417. data/test/fixtures/test/_partial.html.erb +0 -1
  418. data/test/fixtures/test/_partial.js.erb +0 -1
  419. data/test/fixtures/test/_partial_for_use_in_layout.html.erb +0 -1
  420. data/test/fixtures/test/_partial_only.erb +0 -1
  421. data/test/fixtures/test/_partial_with_only_html_version.html.erb +0 -1
  422. data/test/fixtures/test/_person.erb +0 -2
  423. data/test/fixtures/test/_raise.html.erb +0 -1
  424. data/test/fixtures/test/_two.html.erb +0 -1
  425. data/test/fixtures/test/_utf8_partial.html.erb +0 -1
  426. data/test/fixtures/test/_utf8_partial_magic.html.erb +0 -2
  427. data/test/fixtures/test/action_talk_to_layout.erb +0 -2
  428. data/test/fixtures/test/array_translation.erb +0 -1
  429. data/test/fixtures/test/calling_partial_with_layout.html.erb +0 -1
  430. data/test/fixtures/test/capturing.erb +0 -4
  431. data/test/fixtures/test/content_for.erb +0 -2
  432. data/test/fixtures/test/content_for_concatenated.erb +0 -3
  433. data/test/fixtures/test/content_for_with_parameter.erb +0 -2
  434. data/test/fixtures/test/delete_with_js.rjs +0 -2
  435. data/test/fixtures/test/dont_pick_me +0 -1
  436. data/test/fixtures/test/dot.directory/render_file_with_ivar.erb +0 -1
  437. data/test/fixtures/test/enum_rjs_test.rjs +0 -6
  438. data/test/fixtures/test/formatted_html_erb.html.erb +0 -1
  439. data/test/fixtures/test/formatted_xml_erb.builder +0 -1
  440. data/test/fixtures/test/formatted_xml_erb.html.erb +0 -1
  441. data/test/fixtures/test/formatted_xml_erb.xml.erb +0 -1
  442. data/test/fixtures/test/greeting.erb +0 -1
  443. data/test/fixtures/test/greeting.js.rjs +0 -1
  444. data/test/fixtures/test/hello.builder +0 -4
  445. data/test/fixtures/test/hello_world.da.html.erb +0 -1
  446. data/test/fixtures/test/hello_world.erb +0 -1
  447. data/test/fixtures/test/hello_world.erb~ +0 -1
  448. data/test/fixtures/test/hello_world.pt-BR.html.erb +0 -1
  449. data/test/fixtures/test/hello_world_container.builder +0 -3
  450. data/test/fixtures/test/hello_world_from_rxml.builder +0 -4
  451. data/test/fixtures/test/hello_world_with_layout_false.erb +0 -1
  452. data/test/fixtures/test/hello_xml_world.builder +0 -11
  453. data/test/fixtures/test/hyphen-ated.erb +0 -1
  454. data/test/fixtures/test/implicit_content_type.atom.builder +0 -2
  455. data/test/fixtures/test/list.erb +0 -1
  456. data/test/fixtures/test/malformed/malformed.en.html.erb~ +0 -1
  457. data/test/fixtures/test/malformed/malformed.erb~ +0 -1
  458. data/test/fixtures/test/malformed/malformed.html.erb~ +0 -1
  459. data/test/fixtures/test/nested_layout.erb +0 -3
  460. data/test/fixtures/test/non_erb_block_content_for.builder +0 -4
  461. data/test/fixtures/test/potential_conflicts.erb +0 -4
  462. data/test/fixtures/test/render_explicit_html_template.js.rjs +0 -1
  463. data/test/fixtures/test/render_file_from_template.html.erb +0 -1
  464. data/test/fixtures/test/render_file_with_ivar.erb +0 -1
  465. data/test/fixtures/test/render_file_with_locals.erb +0 -1
  466. data/test/fixtures/test/render_implicit_html_template.js.rjs +0 -1
  467. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.da.html.erb +0 -1
  468. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.html.erb +0 -1
  469. data/test/fixtures/test/render_implicit_js_template_without_layout.js.erb +0 -1
  470. data/test/fixtures/test/render_to_string_test.erb +0 -1
  471. data/test/fixtures/test/scoped_array_translation.erb +0 -1
  472. data/test/fixtures/test/sub_template_raise.html.erb +0 -1
  473. data/test/fixtures/test/template.erb +0 -1
  474. data/test/fixtures/test/translation.erb +0 -1
  475. data/test/fixtures/test/update_element_with_capture.erb +0 -9
  476. data/test/fixtures/test/using_layout_around_block.html.erb +0 -1
  477. data/test/fixtures/test/using_layout_around_block_with_args.html.erb +0 -1
  478. data/test/fixtures/test/utf8.html.erb +0 -4
  479. data/test/fixtures/test/utf8_magic.html.erb +0 -5
  480. data/test/fixtures/test/utf8_magic_with_bare_partial.html.erb +0 -5
  481. data/test/fixtures/topic.rb +0 -3
  482. data/test/fixtures/topics.yml +0 -22
  483. data/test/fixtures/topics/_topic.html.erb +0 -1
  484. data/test/template/active_record_helper_i18n_test.rb +0 -51
  485. data/test/template/active_record_helper_test.rb +0 -302
  486. data/test/template/asset_tag_helper_test.rb +0 -770
  487. data/test/template/atom_feed_helper_test.rb +0 -315
  488. data/test/template/benchmark_helper_test.rb +0 -86
  489. data/test/template/compiled_templates_test.rb +0 -204
  490. data/test/template/date_helper_i18n_test.rb +0 -121
  491. data/test/template/date_helper_test.rb +0 -2603
  492. data/test/template/erb_util_test.rb +0 -36
  493. data/test/template/form_helper_test.rb +0 -1447
  494. data/test/template/form_options_helper_i18n_test.rb +0 -27
  495. data/test/template/form_options_helper_test.rb +0 -811
  496. data/test/template/form_tag_helper_test.rb +0 -356
  497. data/test/template/javascript_helper_test.rb +0 -106
  498. data/test/template/number_helper_i18n_test.rb +0 -69
  499. data/test/template/number_helper_test.rb +0 -132
  500. data/test/template/prototype_helper_test.rb +0 -639
  501. data/test/template/raw_output_helper_test.rb +0 -21
  502. data/test/template/record_tag_helper_test.rb +0 -58
  503. data/test/template/render_test.rb +0 -329
  504. data/test/template/sanitize_helper_test.rb +0 -57
  505. data/test/template/scriptaculous_helper_test.rb +0 -90
  506. data/test/template/tag_helper_test.rb +0 -98
  507. data/test/template/template_test.rb +0 -32
  508. data/test/template/test_test.rb +0 -54
  509. data/test/template/text_helper_test.rb +0 -601
  510. data/test/template/translation_helper_test.rb +0 -95
  511. data/test/template/url_helper_test.rb +0 -641
  512. data/test/testing_sandbox.rb +0 -15
  513. data/test/view/test_case_test.rb +0 -176
@@ -1,103 +0,0 @@
1
- require 'abstract_unit'
2
-
3
- class XmlParamsParsingTest < ActionController::IntegrationTest
4
- class TestController < ActionController::Base
5
- class << self
6
- attr_accessor :last_request_parameters
7
- end
8
-
9
- def parse
10
- self.class.last_request_parameters = request.request_parameters
11
- head :ok
12
- end
13
- end
14
-
15
- def teardown
16
- TestController.last_request_parameters = nil
17
- end
18
-
19
- test "parses hash params" do
20
- with_test_routing do
21
- xml = "<person><name>David</name></person>"
22
- post "/parse", xml, default_headers
23
- assert_response :ok
24
- assert_equal({"person" => {"name" => "David"}}, TestController.last_request_parameters)
25
- end
26
- end
27
-
28
- test "parses single file" do
29
- with_test_routing do
30
- xml = "<person><name>David</name><avatar type='file' name='me.jpg' content_type='image/jpg'>#{ActiveSupport::Base64.encode64('ABC')}</avatar></person>"
31
- post "/parse", xml, default_headers
32
- assert_response :ok
33
-
34
- person = TestController.last_request_parameters
35
- assert_equal "image/jpg", person['person']['avatar'].content_type
36
- assert_equal "me.jpg", person['person']['avatar'].original_filename
37
- assert_equal "ABC", person['person']['avatar'].read
38
- end
39
- end
40
-
41
- test "logs error if parsing unsuccessful" do
42
- with_test_routing do
43
- begin
44
- $stderr = StringIO.new
45
- xml = "<person><name>David</name><avatar type='file' name='me.jpg' content_type='image/jpg'>#{ActiveSupport::Base64.encode64('ABC')}</avatar></pineapple>"
46
- post "/parse", xml, default_headers
47
- assert_response :error
48
- $stderr.rewind && err = $stderr.read
49
- assert err =~ /Error occurred while parsing request parameters/
50
- ensure
51
- $stderr = STDERR
52
- end
53
- end
54
- end
55
-
56
- test "parses multiple files" do
57
- xml = <<-end_body
58
- <person>
59
- <name>David</name>
60
- <avatars>
61
- <avatar type='file' name='me.jpg' content_type='image/jpg'>#{ActiveSupport::Base64.encode64('ABC')}</avatar>
62
- <avatar type='file' name='you.gif' content_type='image/gif'>#{ActiveSupport::Base64.encode64('DEF')}</avatar>
63
- </avatars>
64
- </person>
65
- end_body
66
-
67
- with_test_routing do
68
- post "/parse", xml, default_headers
69
- assert_response :ok
70
- end
71
-
72
- person = TestController.last_request_parameters
73
-
74
- assert_equal "image/jpg", person['person']['avatars']['avatar'].first.content_type
75
- assert_equal "me.jpg", person['person']['avatars']['avatar'].first.original_filename
76
- assert_equal "ABC", person['person']['avatars']['avatar'].first.read
77
-
78
- assert_equal "image/gif", person['person']['avatars']['avatar'].last.content_type
79
- assert_equal "you.gif", person['person']['avatars']['avatar'].last.original_filename
80
- assert_equal "DEF", person['person']['avatars']['avatar'].last.read
81
- end
82
-
83
- private
84
- def with_test_routing
85
- with_routing do |set|
86
- set.draw do |map|
87
- map.connect ':action', :controller => "xml_params_parsing_test/test"
88
- end
89
- yield
90
- end
91
- end
92
-
93
- def default_headers
94
- {'CONTENT_TYPE' => 'application/xml'}
95
- end
96
- end
97
-
98
- class LegacyXmlParamsParsingTest < XmlParamsParsingTest
99
- private
100
- def default_headers
101
- {'HTTP_X_POST_DATA_FORMAT' => 'xml'}
102
- end
103
- end
@@ -1,233 +0,0 @@
1
- require 'abstract_unit'
2
- require 'digest/sha1'
3
-
4
- ActionController::Routing::Routes.draw do |map|
5
- map.connect ':controller/:action/:id'
6
- end
7
-
8
- # common controller actions
9
- module RequestForgeryProtectionActions
10
- def index
11
- render :inline => "<%= form_tag('/') {} %>"
12
- end
13
-
14
- def show_button
15
- render :inline => "<%= button_to('New', '/') {} %>"
16
- end
17
-
18
- def remote_form
19
- render :inline => "<% form_remote_tag(:url => '/') {} %>"
20
- end
21
-
22
- def unsafe
23
- render :text => 'pwn'
24
- end
25
-
26
- def meta
27
- render :inline => "<%= csrf_meta_tag %>"
28
- end
29
-
30
- def rescue_action(e) raise e end
31
- end
32
-
33
- # sample controllers
34
- class RequestForgeryProtectionController < ActionController::Base
35
- include RequestForgeryProtectionActions
36
- protect_from_forgery :only => :index
37
- end
38
-
39
- class RequestForgeryProtectionControllerUsingOldBehaviour < ActionController::Base
40
- include RequestForgeryProtectionActions
41
- protect_from_forgery :only => %w(index meta)
42
-
43
- def handle_unverified_request
44
- raise(ActionController::InvalidAuthenticityToken)
45
- end
46
- end
47
-
48
-
49
- class FreeCookieController < RequestForgeryProtectionController
50
- self.allow_forgery_protection = false
51
-
52
- def index
53
- render :inline => "<%= form_tag('/') {} %>"
54
- end
55
-
56
- def show_button
57
- render :inline => "<%= button_to('New', '/') {} %>"
58
- end
59
- end
60
-
61
- class CustomAuthenticityParamController < RequestForgeryProtectionController
62
- def form_authenticity_param
63
- 'foobar'
64
- end
65
- end
66
-
67
-
68
- # common test methods
69
-
70
- module RequestForgeryProtectionTests
71
- def setup
72
- @token = "cf50faa3fe97702ca1ae"
73
-
74
- ActiveSupport::SecureRandom.stubs(:base64).returns(@token)
75
- ActionController::Base.request_forgery_protection_token = :authenticity_token
76
- end
77
-
78
-
79
- def test_should_render_form_with_token_tag
80
- assert_not_blocked do
81
- get :index
82
- end
83
- assert_select 'form>div>input[name=?][value=?]', 'authenticity_token', @token
84
- end
85
-
86
- def test_should_render_button_to_with_token_tag
87
- assert_not_blocked do
88
- get :show_button
89
- end
90
- assert_select 'form>div>input[name=?][value=?]', 'authenticity_token', @token
91
- end
92
-
93
- def test_should_allow_get
94
- assert_not_blocked { get :index }
95
- end
96
-
97
- def test_should_allow_post_without_token_on_unsafe_action
98
- assert_not_blocked { post :unsafe }
99
- end
100
-
101
- def test_should_not_allow_post_without_token
102
- assert_blocked { post :index }
103
- end
104
-
105
- def test_should_not_allow_post_without_token_irrespective_of_format
106
- assert_blocked { post :index, :format=>'xml' }
107
- end
108
-
109
- def test_should_not_allow_put_without_token
110
- assert_blocked { put :index }
111
- end
112
-
113
- def test_should_not_allow_delete_without_token
114
- assert_blocked { delete :index }
115
- end
116
-
117
- def test_should_not_allow_xhr_post_without_token
118
- assert_blocked { xhr :post, :index }
119
- end
120
-
121
- def test_should_allow_post_with_token
122
- assert_not_blocked { post :index, :authenticity_token => @token }
123
- end
124
-
125
- def test_should_allow_put_with_token
126
- assert_not_blocked { put :index, :authenticity_token => @token }
127
- end
128
-
129
- def test_should_allow_delete_with_token
130
- assert_not_blocked { delete :index, :authenticity_token => @token }
131
- end
132
-
133
- def test_should_allow_post_with_token_in_header
134
- @request.env['HTTP_X_CSRF_TOKEN'] = @token
135
- assert_not_blocked { post :index }
136
- end
137
-
138
- def test_should_allow_delete_with_token_in_header
139
- @request.env['HTTP_X_CSRF_TOKEN'] = @token
140
- assert_not_blocked { delete :index }
141
- end
142
-
143
- def test_should_allow_put_with_token_in_header
144
- @request.env['HTTP_X_CSRF_TOKEN'] = @token
145
- assert_not_blocked { put :index }
146
- end
147
-
148
- def assert_blocked
149
- session[:something_like_user_id] = 1
150
- yield
151
- assert_nil session[:something_like_user_id], "session values are still present"
152
- assert_response :success
153
- end
154
-
155
- def assert_not_blocked
156
- assert_nothing_raised { yield }
157
- assert_response :success
158
- end
159
- end
160
-
161
- # OK let's get our test on
162
-
163
- class RequestForgeryProtectionControllerTest < ActionController::TestCase
164
- include RequestForgeryProtectionTests
165
-
166
- test 'should emit a csrf-token meta tag' do
167
- ActiveSupport::SecureRandom.stubs(:base64).returns(@token + '<=?')
168
- get :meta
169
- assert_equal %(<meta name="csrf-param" content="authenticity_token"/>\n<meta name="csrf-token" content="cf50faa3fe97702ca1ae&lt;=?"/>), @response.body
170
- end
171
- end
172
-
173
- class RequestForgeryProtectionControllerUsingOldBehaviourTest < ActionController::TestCase
174
- include RequestForgeryProtectionTests
175
- def assert_blocked
176
- assert_raises(ActionController::InvalidAuthenticityToken) do
177
- yield
178
- end
179
- end
180
- end
181
-
182
- class FreeCookieControllerTest < ActionController::TestCase
183
- def setup
184
- @controller = FreeCookieController.new
185
- @request = ActionController::TestRequest.new
186
- @response = ActionController::TestResponse.new
187
- @token = "cf50faa3fe97702ca1ae"
188
-
189
- ActiveSupport::SecureRandom.stubs(:base64).returns(@token)
190
- end
191
-
192
- def test_should_not_render_form_with_token_tag
193
- get :index
194
- assert_select 'form>div>input[name=?][value=?]', 'authenticity_token', @token, false
195
- end
196
-
197
- def test_should_not_render_button_to_with_token_tag
198
- get :show_button
199
- assert_select 'form>div>input[name=?][value=?]', 'authenticity_token', @token, false
200
- end
201
-
202
- def test_should_allow_all_methods_without_token
203
- [:post, :put, :delete].each do |method|
204
- assert_nothing_raised { send(method, :index)}
205
- end
206
- end
207
-
208
- test 'should not emit a csrf-token meta tag' do
209
- get :meta
210
- assert_blank @response.body
211
- end
212
- end
213
-
214
-
215
-
216
-
217
-
218
- class CustomAuthenticityParamControllerTest < ActionController::TestCase
219
- def setup
220
- ActionController::Base.request_forgery_protection_token = :custom_token_name
221
- super
222
- end
223
-
224
- def teardown
225
- ActionController::Base.request_forgery_protection_token = :authenticity_token
226
- super
227
- end
228
-
229
- def test_should_allow_custom_token
230
- post :index, :custom_token_name => 'foobar'
231
- assert_response :ok
232
- end
233
- end
@@ -1,398 +0,0 @@
1
- require 'abstract_unit'
2
-
3
- class RequestTest < ActiveSupport::TestCase
4
- def setup
5
- ActionController::Base.relative_url_root = nil
6
- end
7
-
8
- def teardown
9
- ActionController::Base.relative_url_root = nil
10
- end
11
-
12
- def test_remote_ip
13
- request = stub_request 'REMOTE_ADDR' => '1.2.3.4'
14
- assert_equal '1.2.3.4', request.remote_ip
15
-
16
- request = stub_request 'REMOTE_ADDR' => '1.2.3.4,3.4.5.6'
17
- assert_equal '1.2.3.4', request.remote_ip
18
-
19
- request = stub_request 'REMOTE_ADDR' => '1.2.3.4',
20
- 'HTTP_X_FORWARDED_FOR' => '3.4.5.6'
21
- assert_equal '1.2.3.4', request.remote_ip
22
-
23
- request = stub_request 'HTTP_X_FORWARDED_FOR' => ''
24
- assert_nil request.remote_ip
25
-
26
- request = stub_request 'REMOTE_ADDR' => '127.0.0.1',
27
- 'HTTP_X_FORWARDED_FOR' => '3.4.5.6'
28
- assert_equal '3.4.5.6', request.remote_ip
29
-
30
- request = stub_request 'HTTP_X_FORWARDED_FOR' => 'unknown,3.4.5.6'
31
- assert_equal '3.4.5.6', request.remote_ip
32
-
33
- request = stub_request 'HTTP_X_FORWARDED_FOR' => '172.16.0.1,3.4.5.6'
34
- assert_equal '3.4.5.6', request.remote_ip
35
-
36
- request = stub_request 'HTTP_X_FORWARDED_FOR' => '192.168.0.1,3.4.5.6'
37
- assert_equal '3.4.5.6', request.remote_ip
38
-
39
- request = stub_request 'HTTP_X_FORWARDED_FOR' => '10.0.0.1,3.4.5.6'
40
- assert_equal '3.4.5.6', request.remote_ip
41
-
42
- request = stub_request 'HTTP_X_FORWARDED_FOR' => '10.0.0.1, 10.0.0.1, 3.4.5.6'
43
- assert_equal '3.4.5.6', request.remote_ip
44
-
45
- request = stub_request 'HTTP_X_FORWARDED_FOR' => '127.0.0.1,3.4.5.6'
46
- assert_equal '3.4.5.6', request.remote_ip
47
-
48
- request = stub_request 'HTTP_X_FORWARDED_FOR' => 'unknown,192.168.0.1'
49
- assert_equal 'unknown', request.remote_ip
50
-
51
- request = stub_request 'HTTP_X_FORWARDED_FOR' => '9.9.9.9, 3.4.5.6, 10.0.0.1, 172.31.4.4'
52
- assert_equal '3.4.5.6', request.remote_ip
53
-
54
- request = stub_request 'HTTP_X_FORWARDED_FOR' => '1.1.1.1',
55
- 'HTTP_CLIENT_IP' => '2.2.2.2'
56
- e = assert_raise(ActionController::ActionControllerError) {
57
- request.remote_ip
58
- }
59
- assert_match /IP spoofing attack/, e.message
60
- assert_match /HTTP_X_FORWARDED_FOR="1.1.1.1"/, e.message
61
- assert_match /HTTP_CLIENT_IP="2.2.2.2"/, e.message
62
-
63
- # turn IP Spoofing detection off.
64
- # This is useful for sites that are aimed at non-IP clients. The typical
65
- # example is WAP. Since the cellular network is not IP based, it's a
66
- # leap of faith to assume that their proxies are ever going to set the
67
- # HTTP_CLIENT_IP/HTTP_X_FORWARDED_FOR headers properly.
68
- ActionController::Base.ip_spoofing_check = false
69
- request = stub_request 'HTTP_X_FORWARDED_FOR' => '1.1.1.1',
70
- 'HTTP_CLIENT_IP' => '2.2.2.2'
71
- assert_equal '2.2.2.2', request.remote_ip
72
- ActionController::Base.ip_spoofing_check = true
73
-
74
- request = stub_request 'HTTP_X_FORWARDED_FOR' => '8.8.8.8, 9.9.9.9'
75
- assert_equal '9.9.9.9', request.remote_ip
76
- end
77
-
78
- def test_domains
79
- request = stub_request 'HTTP_HOST' => 'www.rubyonrails.org'
80
- assert_equal "rubyonrails.org", request.domain
81
-
82
- request = stub_request 'HTTP_HOST' => "www.rubyonrails.co.uk"
83
- assert_equal "rubyonrails.co.uk", request.domain(2)
84
-
85
- request = stub_request 'HTTP_HOST' => "192.168.1.200"
86
- assert_nil request.domain
87
-
88
- request = stub_request 'HTTP_HOST' => "foo.192.168.1.200"
89
- assert_nil request.domain
90
-
91
- request = stub_request 'HTTP_HOST' => "192.168.1.200.com"
92
- assert_equal "200.com", request.domain
93
- end
94
-
95
- def test_subdomains
96
- request = stub_request 'HTTP_HOST' => "www.rubyonrails.org"
97
- assert_equal %w( www ), request.subdomains
98
-
99
- request = stub_request 'HTTP_HOST' => "www.rubyonrails.co.uk"
100
- assert_equal %w( www ), request.subdomains(2)
101
-
102
- request = stub_request 'HTTP_HOST' => "dev.www.rubyonrails.co.uk"
103
- assert_equal %w( dev www ), request.subdomains(2)
104
-
105
- request = stub_request 'HTTP_HOST' => "foobar.foobar.com"
106
- assert_equal %w( foobar ), request.subdomains
107
-
108
- request = stub_request 'HTTP_HOST' => "192.168.1.200"
109
- assert_equal [], request.subdomains
110
-
111
- request = stub_request 'HTTP_HOST' => "foo.192.168.1.200"
112
- assert_equal [], request.subdomains
113
-
114
- request = stub_request 'HTTP_HOST' => "192.168.1.200.com"
115
- assert_equal %w( 192 168 1 ), request.subdomains
116
-
117
- request = stub_request 'HTTP_HOST' => nil
118
- assert_equal [], request.subdomains
119
- end
120
-
121
- def test_port_string
122
- request = stub_request 'HTTP_HOST' => 'www.example.org:80'
123
- assert_equal "", request.port_string
124
-
125
- request = stub_request 'HTTP_HOST' => 'www.example.org:8080'
126
- assert_equal ":8080", request.port_string
127
- end
128
-
129
- def test_request_uri
130
- request = stub_request 'REQUEST_URI' => "http://www.rubyonrails.org/path/of/some/uri?mapped=1"
131
- assert_equal "/path/of/some/uri?mapped=1", request.request_uri
132
- assert_equal "/path/of/some/uri", request.path
133
-
134
- request = stub_request 'REQUEST_URI' => "http://www.rubyonrails.org/path/of/some/uri"
135
- assert_equal "/path/of/some/uri", request.request_uri
136
- assert_equal "/path/of/some/uri", request.path
137
-
138
- request = stub_request 'REQUEST_URI' => "/path/of/some/uri"
139
- assert_equal "/path/of/some/uri", request.request_uri
140
- assert_equal "/path/of/some/uri", request.path
141
-
142
- request = stub_request 'REQUEST_URI' => "/"
143
- assert_equal "/", request.request_uri
144
- assert_equal "/", request.path
145
-
146
- request = stub_request 'REQUEST_URI' => "/?m=b"
147
- assert_equal "/?m=b", request.request_uri
148
- assert_equal "/", request.path
149
-
150
- request = stub_request 'REQUEST_URI' => "/", 'SCRIPT_NAME' => '/dispatch.cgi'
151
- assert_equal "/", request.request_uri
152
- assert_equal "/", request.path
153
-
154
- ActionController::Base.relative_url_root = "/hieraki"
155
- request = stub_request 'REQUEST_URI' => "/hieraki/", 'SCRIPT_NAME' => "/hieraki/dispatch.cgi"
156
- assert_equal "/hieraki/", request.request_uri
157
- assert_equal "/", request.path
158
- ActionController::Base.relative_url_root = nil
159
-
160
- ActionController::Base.relative_url_root = "/collaboration/hieraki"
161
- request = stub_request 'REQUEST_URI' => "/collaboration/hieraki/books/edit/2",
162
- 'SCRIPT_NAME' => "/collaboration/hieraki/dispatch.cgi"
163
- assert_equal "/collaboration/hieraki/books/edit/2", request.request_uri
164
- assert_equal "/books/edit/2", request.path
165
- ActionController::Base.relative_url_root = nil
166
-
167
- # The following tests are for when REQUEST_URI is not supplied (as in IIS)
168
- request = stub_request 'PATH_INFO' => "/path/of/some/uri?mapped=1",
169
- 'SCRIPT_NAME' => nil,
170
- 'REQUEST_URI' => nil
171
- assert_equal "/path/of/some/uri?mapped=1", request.request_uri
172
- assert_equal "/path/of/some/uri", request.path
173
-
174
- ActionController::Base.relative_url_root = '/path'
175
- request = stub_request 'PATH_INFO' => "/path/of/some/uri?mapped=1",
176
- 'SCRIPT_NAME' => "/path/dispatch.rb",
177
- 'REQUEST_URI' => nil
178
- assert_equal "/path/of/some/uri?mapped=1", request.request_uri
179
- assert_equal "/of/some/uri", request.path
180
- ActionController::Base.relative_url_root = nil
181
-
182
- request = stub_request 'PATH_INFO' => "/path/of/some/uri",
183
- 'SCRIPT_NAME' => nil,
184
- 'REQUEST_URI' => nil
185
- assert_equal "/path/of/some/uri", request.request_uri
186
- assert_equal "/path/of/some/uri", request.path
187
-
188
- request = stub_request 'PATH_INFO' => '/', 'REQUEST_URI' => nil
189
- assert_equal "/", request.request_uri
190
- assert_equal "/", request.path
191
-
192
- request = stub_request 'PATH_INFO' => '/?m=b', 'REQUEST_URI' => nil
193
- assert_equal "/?m=b", request.request_uri
194
- assert_equal "/", request.path
195
-
196
- request = stub_request 'PATH_INFO' => "/",
197
- 'SCRIPT_NAME' => "/dispatch.cgi",
198
- 'REQUEST_URI' => nil
199
- assert_equal "/", request.request_uri
200
- assert_equal "/", request.path
201
-
202
- ActionController::Base.relative_url_root = '/hieraki'
203
- request = stub_request 'PATH_INFO' => "/hieraki/",
204
- 'SCRIPT_NAME' => "/hieraki/dispatch.cgi",
205
- 'REQUEST_URI' => nil
206
- assert_equal "/hieraki/", request.request_uri
207
- assert_equal "/", request.path
208
- ActionController::Base.relative_url_root = nil
209
-
210
- request = stub_request 'REQUEST_URI' => '/hieraki/dispatch.cgi'
211
- ActionController::Base.relative_url_root = '/hieraki'
212
- assert_equal "/dispatch.cgi", request.path
213
- ActionController::Base.relative_url_root = nil
214
-
215
- request = stub_request 'REQUEST_URI' => '/hieraki/dispatch.cgi'
216
- ActionController::Base.relative_url_root = '/foo'
217
- assert_equal "/hieraki/dispatch.cgi", request.path
218
- ActionController::Base.relative_url_root = nil
219
-
220
- # This test ensures that Rails uses REQUEST_URI over PATH_INFO
221
- ActionController::Base.relative_url_root = nil
222
- request = stub_request 'REQUEST_URI' => "/some/path",
223
- 'PATH_INFO' => "/another/path",
224
- 'SCRIPT_NAME' => "/dispatch.cgi"
225
- assert_equal "/some/path", request.request_uri
226
- assert_equal "/some/path", request.path
227
- end
228
-
229
- def test_host_with_default_port
230
- request = stub_request 'HTTP_HOST' => 'rubyonrails.org:80'
231
- assert_equal "rubyonrails.org", request.host_with_port
232
- end
233
-
234
- def test_host_with_non_default_port
235
- request = stub_request 'HTTP_HOST' => 'rubyonrails.org:81'
236
- assert_equal "rubyonrails.org:81", request.host_with_port
237
- end
238
-
239
- def test_server_software
240
- request = stub_request
241
- assert_equal nil, request.server_software
242
-
243
- request = stub_request 'SERVER_SOFTWARE' => 'Apache3.422'
244
- assert_equal 'apache', request.server_software
245
-
246
- request = stub_request 'SERVER_SOFTWARE' => 'lighttpd(1.1.4)'
247
- assert_equal 'lighttpd', request.server_software
248
- end
249
-
250
- def test_xml_http_request
251
- request = stub_request
252
-
253
- assert !request.xml_http_request?
254
- assert !request.xhr?
255
-
256
- request = stub_request 'HTTP_X_REQUESTED_WITH' => 'DefinitelyNotAjax1.0'
257
- assert !request.xml_http_request?
258
- assert !request.xhr?
259
-
260
- request = stub_request 'HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest'
261
- assert request.xml_http_request?
262
- assert request.xhr?
263
- end
264
-
265
- def test_reports_ssl
266
- request = stub_request
267
- assert !request.ssl?
268
-
269
- request = stub_request 'HTTPS' => 'on'
270
- assert request.ssl?
271
- end
272
-
273
- def test_reports_ssl_when_proxied_via_lighttpd
274
- request = stub_request
275
- assert !request.ssl?
276
-
277
- request = stub_request 'HTTP_X_FORWARDED_PROTO' => 'https'
278
- assert request.ssl?
279
- end
280
-
281
- def test_symbolized_request_methods
282
- [:get, :post, :put, :delete].each do |method|
283
- request = stub_request 'REQUEST_METHOD' => method.to_s.upcase
284
- assert_equal method, request.method
285
- end
286
- end
287
-
288
- def test_invalid_http_method_raises_exception
289
- assert_raise(ActionController::UnknownHttpMethod) do
290
- request = stub_request 'REQUEST_METHOD' => 'RANDOM_METHOD'
291
- request.request_method
292
- end
293
- end
294
-
295
- def test_allow_method_hacking_on_post
296
- [:get, :head, :options, :put, :post, :delete].each do |method|
297
- request = stub_request 'REQUEST_METHOD' => method.to_s.upcase
298
- assert_equal(method == :head ? :get : method, request.method)
299
- end
300
- end
301
-
302
- def test_restrict_method_hacking
303
- [:get, :put, :delete].each do |method|
304
- request = stub_request 'REQUEST_METHOD' => method.to_s.upcase,
305
- 'action_controller.request.request_parameters' => { :_method => 'put' }
306
- assert_equal method, request.method
307
- end
308
- end
309
-
310
- def test_head_masquerading_as_get
311
- request = stub_request 'REQUEST_METHOD' => 'HEAD'
312
- assert_equal :get, request.method
313
- assert request.get?
314
- assert request.head?
315
- end
316
-
317
- def test_xml_format
318
- request = stub_request
319
- request.expects(:parameters).at_least_once.returns({ :format => 'xml' })
320
- assert_equal Mime::XML, request.format
321
- end
322
-
323
- def test_xhtml_format
324
- request = stub_request
325
- request.expects(:parameters).at_least_once.returns({ :format => 'xhtml' })
326
- assert_equal Mime::HTML, request.format
327
- end
328
-
329
- def test_txt_format
330
- request = stub_request
331
- request.expects(:parameters).at_least_once.returns({ :format => 'txt' })
332
- assert_equal Mime::TEXT, request.format
333
- end
334
-
335
- def test_xml_http_request
336
- ActionController::Base.use_accept_header, old =
337
- false, ActionController::Base.use_accept_header
338
-
339
- request = stub_request 'HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest'
340
- request.expects(:parameters).at_least_once.returns({})
341
- assert request.xhr?
342
- assert_equal Mime::JS, request.format
343
- ensure
344
- ActionController::Base.use_accept_header = old
345
- end
346
-
347
- def test_content_type
348
- request = stub_request 'CONTENT_TYPE' => 'text/html'
349
- assert_equal Mime::HTML, request.content_type
350
- end
351
-
352
- def test_can_override_format_with_parameter
353
- request = stub_request
354
- request.expects(:parameters).at_least_once.returns({ :format => :txt })
355
- assert !request.format.xml?
356
-
357
- request = stub_request
358
- request.expects(:parameters).at_least_once.returns({ :format => :xml })
359
- assert request.format.xml?
360
- end
361
-
362
- def test_content_no_type
363
- request = stub_request
364
- assert_equal nil, request.content_type
365
- end
366
-
367
- def test_content_type_xml
368
- request = stub_request 'CONTENT_TYPE' => 'application/xml'
369
- assert_equal Mime::XML, request.content_type
370
- end
371
-
372
- def test_content_type_with_charset
373
- request = stub_request 'CONTENT_TYPE' => 'application/xml; charset=UTF-8'
374
- assert_equal Mime::XML, request.content_type
375
- end
376
-
377
- def test_user_agent
378
- request = stub_request 'HTTP_USER_AGENT' => 'TestAgent'
379
- assert_equal 'TestAgent', request.user_agent
380
- end
381
-
382
- def test_parameters
383
- request = stub_request
384
- request.stubs(:request_parameters).returns({ "foo" => 1 })
385
- request.stubs(:query_parameters).returns({ "bar" => 2 })
386
-
387
- assert_equal({"foo" => 1, "bar" => 2}, request.parameters)
388
- assert_equal({"foo" => 1}, request.request_parameters)
389
- assert_equal({"bar" => 2}, request.query_parameters)
390
- end
391
-
392
- protected
393
-
394
- def stub_request(env={})
395
- ActionController::Request.new(env)
396
- end
397
-
398
- end