actionpack 2.3.5 → 2.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (587) hide show
  1. data/CHANGELOG +45 -0
  2. data/MIT-LICENSE +1 -1
  3. data/README +7 -7
  4. data/Rakefile +2 -2
  5. data/lib/action_controller.rb +2 -2
  6. data/lib/action_controller/assertions/response_assertions.rb +18 -9
  7. data/lib/action_controller/base.rb +14 -14
  8. data/lib/action_controller/caching/fragments.rb +6 -6
  9. data/lib/action_controller/cookies.rb +96 -0
  10. data/lib/action_controller/failsafe.rb +1 -0
  11. data/lib/action_controller/flash.rb +42 -0
  12. data/lib/action_controller/integration.rb +5 -1
  13. data/lib/action_controller/polymorphic_routes.rb +1 -1
  14. data/lib/action_controller/rack_lint_patch.rb +1 -1
  15. data/lib/action_controller/rescue.rb +2 -2
  16. data/lib/action_controller/response.rb +4 -7
  17. data/lib/action_controller/routing/route_set.rb +1 -0
  18. data/lib/action_controller/session/abstract_store.rb +6 -0
  19. data/lib/action_controller/session/cookie_store.rb +6 -0
  20. data/lib/action_controller/templates/rescues/_trace.erb +2 -2
  21. data/lib/action_controller/url_rewriter.rb +4 -1
  22. data/lib/action_pack.rb +1 -1
  23. data/lib/action_pack/version.rb +1 -1
  24. data/lib/action_view.rb +3 -3
  25. data/lib/action_view/helpers/active_record_helper.rb +11 -11
  26. data/lib/action_view/helpers/asset_tag_helper.rb +2 -2
  27. data/lib/action_view/helpers/capture_helper.rb +2 -2
  28. data/lib/action_view/helpers/date_helper.rb +12 -11
  29. data/lib/action_view/helpers/debug_helper.rb +2 -2
  30. data/lib/action_view/helpers/form_helper.rb +49 -12
  31. data/lib/action_view/helpers/form_options_helper.rb +3 -4
  32. data/lib/action_view/helpers/form_tag_helper.rb +7 -4
  33. data/lib/action_view/helpers/javascript_helper.rb +1 -1
  34. data/lib/action_view/helpers/number_helper.rb +1 -1
  35. data/lib/action_view/helpers/prototype_helper.rb +2 -2
  36. data/lib/action_view/helpers/raw_output_helper.rb +2 -2
  37. data/lib/action_view/helpers/sanitize_helper.rb +2 -10
  38. data/lib/action_view/helpers/tag_helper.rb +6 -5
  39. data/lib/action_view/helpers/text_helper.rb +5 -5
  40. data/lib/action_view/helpers/translation_helper.rb +6 -4
  41. data/lib/action_view/helpers/url_helper.rb +9 -11
  42. data/lib/action_view/partials.rb +2 -1
  43. data/lib/action_view/paths.rb +8 -0
  44. data/lib/action_view/renderable.rb +16 -2
  45. data/lib/action_view/template_handlers/erb.rb +3 -5
  46. data/lib/action_view/test_case.rb +2 -2
  47. data/test/abstract_unit.rb +3 -3
  48. data/test/controller/action_pack_assertions_test.rb +3 -1
  49. data/test/controller/assert_select_test.rb +1 -0
  50. data/test/controller/caching_test.rb +16 -2
  51. data/test/controller/cookie_test.rb +37 -1
  52. data/test/controller/flash_test.rb +28 -1
  53. data/test/controller/integration_test.rb +0 -1
  54. data/test/controller/localized_templates_test.rb +24 -0
  55. data/test/controller/output_escaping_test.rb +19 -0
  56. data/test/controller/rack_test.rb +1 -4
  57. data/test/controller/render_test.rb +11 -2
  58. data/test/controller/rescue_test.rb +8 -2
  59. data/test/controller/routing_test.rb +1 -0
  60. data/test/controller/send_file_test.rb +1 -1
  61. data/test/controller/session/cookie_store_test.rb +2 -2
  62. data/test/controller/url_rewriter_test.rb +10 -6
  63. data/test/fixtures/localized/hello_world.de.html +1 -0
  64. data/test/fixtures/localized/hello_world.en.html +1 -0
  65. data/test/fixtures/test/_customer_counter_with_as.erb +1 -0
  66. data/test/fixtures/test/_utf8_partial.html.erb +1 -0
  67. data/test/fixtures/test/_utf8_partial_magic.html.erb +2 -0
  68. data/test/fixtures/test/array_translation.erb +1 -0
  69. data/test/fixtures/test/scoped_array_translation.erb +1 -0
  70. data/test/fixtures/test/utf8.html.erb +4 -2
  71. data/test/fixtures/test/utf8_magic.html.erb +5 -0
  72. data/test/fixtures/test/utf8_magic_with_bare_partial.html.erb +5 -0
  73. data/test/template/active_record_helper_i18n_test.rb +9 -2
  74. data/test/template/asset_tag_helper_test.rb +0 -1
  75. data/test/template/date_helper_test.rb +118 -0
  76. data/test/template/erb_util_test.rb +12 -0
  77. data/test/template/form_helper_test.rb +57 -3
  78. data/test/template/form_tag_helper_test.rb +15 -9
  79. data/test/template/render_test.rb +47 -8
  80. data/test/template/text_helper_test.rb +26 -1
  81. data/test/template/translation_helper_test.rb +20 -2
  82. data/test/template/url_helper_test.rb +20 -1
  83. data/test/tmp/RackMultipart20100114-2850-18awt99-0 +1 -0
  84. data/test/tmp/RackMultipart20100114-2850-19mxvfk-0 +0 -0
  85. data/test/tmp/RackMultipart20100114-2850-1il5j9y-0 +1 -0
  86. data/test/tmp/RackMultipart20100114-2850-1kr4fph-0 +1 -0
  87. data/test/tmp/RackMultipart20100114-2850-1whjzgd-0 +0 -0
  88. data/test/tmp/RackMultipart20100114-2850-2oxu19-0 +1 -0
  89. data/test/tmp/RackMultipart20100114-2850-34lp5r-0 +0 -0
  90. data/test/tmp/RackMultipart20100114-2850-bqfazg-0 +1 -0
  91. data/test/tmp/RackMultipart20100114-2850-vbyi8g-0 +0 -0
  92. data/test/tmp/RackMultipart20100127-16318-140g9v4-0 +1 -0
  93. data/test/tmp/RackMultipart20100127-16318-1gc081d-0 +0 -0
  94. data/test/tmp/RackMultipart20100127-16318-1hs9edk-0 +0 -0
  95. data/test/tmp/RackMultipart20100127-16318-1xv7yvp-0 +1 -0
  96. data/test/tmp/RackMultipart20100127-16318-9eyfmo-0 +1 -0
  97. data/test/tmp/RackMultipart20100127-16318-o81drl-0 +0 -0
  98. data/test/tmp/RackMultipart20100127-16318-ubd6vm-0 +1 -0
  99. data/test/tmp/RackMultipart20100127-16318-xltjpf-0 +1 -0
  100. data/test/tmp/RackMultipart20100127-16318-z0s5v6-0 +0 -0
  101. data/test/tmp/RackMultipart20100131-1041-1fpxdo1-0 +1 -0
  102. data/test/tmp/RackMultipart20100131-1041-1hgld51-0 +1 -0
  103. data/test/tmp/RackMultipart20100131-1041-1sfw61g-0 +0 -0
  104. data/test/tmp/RackMultipart20100131-1041-1txiwx-0 +0 -0
  105. data/test/tmp/RackMultipart20100131-1041-3nxhtk-0 +1 -0
  106. data/test/tmp/RackMultipart20100131-1041-msmvjp-0 +1 -0
  107. data/test/tmp/RackMultipart20100131-1041-snlih6-0 +0 -0
  108. data/test/tmp/RackMultipart20100131-1041-utmx6r-0 +1 -0
  109. data/test/tmp/RackMultipart20100131-1041-vr2eir-0 +0 -0
  110. data/test/tmp/RackMultipart20100131-1200-116kivk-0 +1 -0
  111. data/test/tmp/RackMultipart20100131-1200-13yj0g7-0 +0 -0
  112. data/test/tmp/RackMultipart20100131-1200-1b0awcl-0 +1 -0
  113. data/test/tmp/RackMultipart20100131-1200-1qc4a1o-0 +0 -0
  114. data/test/tmp/RackMultipart20100131-1200-1sch05j-0 +1 -0
  115. data/test/tmp/RackMultipart20100131-1200-2wwvjw-0 +1 -0
  116. data/test/tmp/RackMultipart20100131-1200-4ybied-0 +0 -0
  117. data/test/tmp/RackMultipart20100131-1200-n4jwgg-0 +0 -0
  118. data/test/tmp/RackMultipart20100131-1200-nqwg4i-0 +1 -0
  119. data/test/tmp/RackMultipart20100131-1566-10hgtsj-0 +0 -0
  120. data/test/tmp/RackMultipart20100131-1566-1m2ix3r-0 +1 -0
  121. data/test/tmp/RackMultipart20100131-1566-1szdt3p-0 +0 -0
  122. data/test/tmp/RackMultipart20100131-1566-6cb9xb-0 +0 -0
  123. data/test/tmp/RackMultipart20100131-1566-aervb6-0 +1 -0
  124. data/test/tmp/RackMultipart20100131-1566-o57d30-0 +1 -0
  125. data/test/tmp/RackMultipart20100131-1566-q06s4u-0 +1 -0
  126. data/test/tmp/RackMultipart20100131-1566-r3eau5-0 +1 -0
  127. data/test/tmp/RackMultipart20100131-1566-rhvbsr-0 +0 -0
  128. data/test/tmp/RackMultipart20100131-2176-19tk67i-0 +0 -0
  129. data/test/tmp/RackMultipart20100131-2176-1iuhegu-0 +0 -0
  130. data/test/tmp/RackMultipart20100131-2176-1mfu303-0 +1 -0
  131. data/test/tmp/RackMultipart20100131-2176-1qv96rf-0 +1 -0
  132. data/test/tmp/RackMultipart20100131-2176-7rae4i-0 +1 -0
  133. data/test/tmp/RackMultipart20100131-2176-g7hqdt-0 +0 -0
  134. data/test/tmp/RackMultipart20100131-2176-spxexk-0 +1 -0
  135. data/test/tmp/RackMultipart20100131-2176-x57r68-0 +0 -0
  136. data/test/tmp/RackMultipart20100131-2176-xx8aqr-0 +1 -0
  137. data/test/tmp/RackMultipart20100131-2251-1kx4y7u-0 +1 -0
  138. data/test/tmp/RackMultipart20100131-2251-1p70d6c-0 +1 -0
  139. data/test/tmp/RackMultipart20100131-2251-1w181g4-0 +1 -0
  140. data/test/tmp/RackMultipart20100131-2251-9dl2hy-0 +1 -0
  141. data/test/tmp/RackMultipart20100131-2251-dd4aqa-0 +0 -0
  142. data/test/tmp/RackMultipart20100131-2251-dq1bs7-0 +0 -0
  143. data/test/tmp/RackMultipart20100131-2251-rjlwid-0 +0 -0
  144. data/test/tmp/RackMultipart20100131-2251-svv2my-0 +0 -0
  145. data/test/tmp/RackMultipart20100131-2251-znyywm-0 +1 -0
  146. data/test/tmp/RackMultipart20100131-2563-1b9atyq-0 +1 -0
  147. data/test/tmp/RackMultipart20100131-2563-1j4bk06-0 +1 -0
  148. data/test/tmp/RackMultipart20100131-2563-1nd3jkk-0 +0 -0
  149. data/test/tmp/RackMultipart20100131-2563-1ud0b43-0 +1 -0
  150. data/test/tmp/RackMultipart20100131-2563-2t9aus-0 +1 -0
  151. data/test/tmp/RackMultipart20100131-2563-4xhtq9-0 +0 -0
  152. data/test/tmp/RackMultipart20100131-2563-80xjuq-0 +1 -0
  153. data/test/tmp/RackMultipart20100131-2563-du6204-0 +0 -0
  154. data/test/tmp/RackMultipart20100131-2563-m2xw0u-0 +0 -0
  155. data/test/tmp/RackMultipart20100131-3324-1bz902a-0 +1 -0
  156. data/test/tmp/RackMultipart20100131-3324-1cj3c2q-0 +1 -0
  157. data/test/tmp/RackMultipart20100131-3324-1dcwnmh-0 +1 -0
  158. data/test/tmp/RackMultipart20100131-3324-1qu1vvo-0 +1 -0
  159. data/test/tmp/RackMultipart20100131-3324-1wksfd7-0 +0 -0
  160. data/test/tmp/RackMultipart20100131-3324-8bmth5-0 +0 -0
  161. data/test/tmp/RackMultipart20100131-3324-c0sen5-0 +1 -0
  162. data/test/tmp/RackMultipart20100131-3324-mhg9zb-0 +0 -0
  163. data/test/tmp/RackMultipart20100131-3324-mram2k-0 +0 -0
  164. data/test/tmp/RackMultipart20100131-3712-11l26yb-0 +1 -0
  165. data/test/tmp/RackMultipart20100131-3712-18qhzz9-0 +1 -0
  166. data/test/tmp/RackMultipart20100131-3712-19efkti-0 +1 -0
  167. data/test/tmp/RackMultipart20100131-3712-1s6qbc-0 +1 -0
  168. data/test/tmp/RackMultipart20100131-3712-948hce-0 +0 -0
  169. data/test/tmp/RackMultipart20100131-3712-rliyfc-0 +0 -0
  170. data/test/tmp/RackMultipart20100131-3712-tvfxgh-0 +1 -0
  171. data/test/tmp/RackMultipart20100131-3712-ywjidy-0 +0 -0
  172. data/test/tmp/RackMultipart20100131-3712-zwa1yl-0 +0 -0
  173. data/test/tmp/RackMultipart20100131-4098-12u1n7m-0 +1 -0
  174. data/test/tmp/RackMultipart20100131-4098-188dwav-0 +0 -0
  175. data/test/tmp/RackMultipart20100131-4098-1a2nulg-0 +0 -0
  176. data/test/tmp/RackMultipart20100131-4098-1c9gbau-0 +1 -0
  177. data/test/tmp/RackMultipart20100131-4098-2923tu-0 +0 -0
  178. data/test/tmp/RackMultipart20100131-4098-he7nm8-0 +0 -0
  179. data/test/tmp/RackMultipart20100131-4098-nw5pcp-0 +1 -0
  180. data/test/tmp/RackMultipart20100131-4098-plj7cd-0 +1 -0
  181. data/test/tmp/RackMultipart20100131-4098-wha9du-0 +1 -0
  182. data/test/tmp/RackMultipart20100131-4178-10rjsef-0 +0 -0
  183. data/test/tmp/RackMultipart20100131-4178-13qqazs-0 +0 -0
  184. data/test/tmp/RackMultipart20100131-4178-1hpjqkl-0 +0 -0
  185. data/test/tmp/RackMultipart20100131-4178-1idjtdl-0 +1 -0
  186. data/test/tmp/RackMultipart20100131-4178-1ke1zpq-0 +1 -0
  187. data/test/tmp/RackMultipart20100131-4178-6y51hb-0 +1 -0
  188. data/test/tmp/RackMultipart20100131-4178-98i2o0-0 +1 -0
  189. data/test/tmp/RackMultipart20100131-4178-9k4jj6-0 +0 -0
  190. data/test/tmp/RackMultipart20100131-4178-zcxa4g-0 +1 -0
  191. data/test/tmp/RackMultipart20100131-4297-1moo7v9-0 +0 -0
  192. data/test/tmp/RackMultipart20100131-4297-1yxib1r-0 +0 -0
  193. data/test/tmp/RackMultipart20100131-4297-b239su-0 +0 -0
  194. data/test/tmp/RackMultipart20100131-4297-ht0qby-0 +1 -0
  195. data/test/tmp/RackMultipart20100131-4297-ia5rov-0 +1 -0
  196. data/test/tmp/RackMultipart20100131-4297-m6gof0-0 +1 -0
  197. data/test/tmp/RackMultipart20100131-4297-nm3rvt-0 +0 -0
  198. data/test/tmp/RackMultipart20100131-4297-qla73p-0 +1 -0
  199. data/test/tmp/RackMultipart20100131-4297-ylrtmu-0 +1 -0
  200. data/test/tmp/RackMultipart20100131-4434-11fsv9d-0 +0 -0
  201. data/test/tmp/RackMultipart20100131-4434-19ycsmr-0 +1 -0
  202. data/test/tmp/RackMultipart20100131-4434-1h0ws4q-0 +1 -0
  203. data/test/tmp/RackMultipart20100131-4434-1lszvv8-0 +0 -0
  204. data/test/tmp/RackMultipart20100131-4434-1ocgqu3-0 +1 -0
  205. data/test/tmp/RackMultipart20100131-4434-1ukqdfd-0 +1 -0
  206. data/test/tmp/RackMultipart20100131-4434-cq7rvl-0 +1 -0
  207. data/test/tmp/RackMultipart20100131-4434-f7jbl4-0 +0 -0
  208. data/test/tmp/RackMultipart20100131-4434-vxlg5t-0 +0 -0
  209. data/test/tmp/RackMultipart20100131-4544-1bf8inz-0 +1 -0
  210. data/test/tmp/RackMultipart20100131-4544-1vj44nb-0 +0 -0
  211. data/test/tmp/RackMultipart20100131-4544-20mdip-0 +1 -0
  212. data/test/tmp/RackMultipart20100131-4544-89y67y-0 +0 -0
  213. data/test/tmp/RackMultipart20100131-4544-gdbsui-0 +1 -0
  214. data/test/tmp/RackMultipart20100131-4544-ko8plt-0 +0 -0
  215. data/test/tmp/RackMultipart20100131-4544-ojykbo-0 +1 -0
  216. data/test/tmp/RackMultipart20100131-4544-r8sahr-0 +0 -0
  217. data/test/tmp/RackMultipart20100131-4544-uluv8k-0 +1 -0
  218. data/test/tmp/RackMultipart20100131-4655-11ovmuw-0 +0 -0
  219. data/test/tmp/RackMultipart20100131-4655-12iht5p-0 +1 -0
  220. data/test/tmp/RackMultipart20100131-4655-142j0ug-0 +0 -0
  221. data/test/tmp/RackMultipart20100131-4655-15affqj-0 +0 -0
  222. data/test/tmp/RackMultipart20100131-4655-1gv4gb4-0 +1 -0
  223. data/test/tmp/RackMultipart20100131-4655-1gwchw7-0 +1 -0
  224. data/test/tmp/RackMultipart20100131-4655-1hvqx5t-0 +1 -0
  225. data/test/tmp/RackMultipart20100131-4655-1jhgk7a-0 +1 -0
  226. data/test/tmp/RackMultipart20100131-4655-1yktury-0 +0 -0
  227. data/test/tmp/RackMultipart20100131-5244-13z86ip-0 +0 -0
  228. data/test/tmp/RackMultipart20100131-5244-17vpiv6-0 +0 -0
  229. data/test/tmp/RackMultipart20100131-5244-1a9w3e-0 +1 -0
  230. data/test/tmp/RackMultipart20100131-5244-1ox8g0l-0 +1 -0
  231. data/test/tmp/RackMultipart20100131-5244-1qrzlqz-0 +1 -0
  232. data/test/tmp/RackMultipart20100131-5244-g3mpli-0 +0 -0
  233. data/test/tmp/RackMultipart20100131-5244-gcl80c-0 +0 -0
  234. data/test/tmp/RackMultipart20100131-5244-jqk7el-0 +1 -0
  235. data/test/tmp/RackMultipart20100131-5244-st1ldm-0 +1 -0
  236. data/test/tmp/RackMultipart20100131-5383-10si01q-0 +0 -0
  237. data/test/tmp/RackMultipart20100131-5383-16ye4w3-0 +1 -0
  238. data/test/tmp/RackMultipart20100131-5383-1imlta8-0 +0 -0
  239. data/test/tmp/RackMultipart20100131-5383-1r3gvaw-0 +0 -0
  240. data/test/tmp/RackMultipart20100131-5383-3wialw-0 +1 -0
  241. data/test/tmp/RackMultipart20100131-5383-k16uor-0 +1 -0
  242. data/test/tmp/RackMultipart20100131-5383-oz1b3a-0 +0 -0
  243. data/test/tmp/RackMultipart20100131-5383-una84e-0 +1 -0
  244. data/test/tmp/RackMultipart20100131-5383-zk1hmz-0 +1 -0
  245. data/test/tmp/RackMultipart20100131-5711-12j0qy5-0 +1 -0
  246. data/test/tmp/RackMultipart20100131-5711-1cozdic-0 +0 -0
  247. data/test/tmp/RackMultipart20100131-5711-1kebrgm-0 +0 -0
  248. data/test/tmp/RackMultipart20100131-5711-1q3jt9q-0 +0 -0
  249. data/test/tmp/RackMultipart20100131-5711-6sv1xg-0 +1 -0
  250. data/test/tmp/RackMultipart20100131-5711-esxrbg-0 +0 -0
  251. data/test/tmp/RackMultipart20100131-5711-jfbr34-0 +1 -0
  252. data/test/tmp/RackMultipart20100131-5711-q1e91g-0 +1 -0
  253. data/test/tmp/RackMultipart20100131-5711-tdauxm-0 +1 -0
  254. data/test/tmp/RackMultipart20100131-91110-1196t1f-0 +1 -0
  255. data/test/tmp/RackMultipart20100131-91110-11tfgc4-0 +1 -0
  256. data/test/tmp/RackMultipart20100131-91110-19e4l6u-0 +0 -0
  257. data/test/tmp/RackMultipart20100131-91110-1m6i8r4-0 +0 -0
  258. data/test/tmp/RackMultipart20100131-91110-1nv9cn8-0 +1 -0
  259. data/test/tmp/RackMultipart20100131-91110-6gbf58-0 +0 -0
  260. data/test/tmp/RackMultipart20100131-91110-b7iewa-0 +1 -0
  261. data/test/tmp/RackMultipart20100131-91110-b8kbab-0 +0 -0
  262. data/test/tmp/RackMultipart20100131-91110-rq2ytl-0 +1 -0
  263. data/test/tmp/RackMultipart20100131-91876-1848spe-0 +1 -0
  264. data/test/tmp/RackMultipart20100131-91876-1u8xsmd-0 +0 -0
  265. data/test/tmp/RackMultipart20100131-91876-1vlruve-0 +0 -0
  266. data/test/tmp/RackMultipart20100131-91876-cbcvg1-0 +1 -0
  267. data/test/tmp/RackMultipart20100131-91876-jv0zd7-0 +1 -0
  268. data/test/tmp/RackMultipart20100131-91876-laype7-0 +1 -0
  269. data/test/tmp/RackMultipart20100131-91876-mswlj3-0 +1 -0
  270. data/test/tmp/RackMultipart20100131-91876-se56ms-0 +0 -0
  271. data/test/tmp/RackMultipart20100131-91876-t14psz-0 +0 -0
  272. data/test/tmp/RackMultipart20100131-93665-1cv0oop-0 +1 -0
  273. data/test/tmp/RackMultipart20100131-93665-1n0c582-0 +0 -0
  274. data/test/tmp/RackMultipart20100131-93665-1obpgzg-0 +1 -0
  275. data/test/tmp/RackMultipart20100131-93665-1pgbkl0-0 +1 -0
  276. data/test/tmp/RackMultipart20100131-93665-1udk862-0 +1 -0
  277. data/test/tmp/RackMultipart20100131-93665-9xxo6q-0 +0 -0
  278. data/test/tmp/RackMultipart20100131-93665-eawsec-0 +0 -0
  279. data/test/tmp/RackMultipart20100131-93665-g5rmm9-0 +0 -0
  280. data/test/tmp/RackMultipart20100131-93665-kdm9y0-0 +1 -0
  281. data/test/tmp/RackMultipart20100131-96270-10h26kt-0 +0 -0
  282. data/test/tmp/RackMultipart20100131-96270-1dtgwke-0 +1 -0
  283. data/test/tmp/RackMultipart20100131-96270-1pib5qg-0 +0 -0
  284. data/test/tmp/RackMultipart20100131-96270-1tfonee-0 +1 -0
  285. data/test/tmp/RackMultipart20100131-96270-1xoj9si-0 +0 -0
  286. data/test/tmp/RackMultipart20100131-96270-5kzssn-0 +0 -0
  287. data/test/tmp/RackMultipart20100131-96270-5qgi09-0 +1 -0
  288. data/test/tmp/RackMultipart20100131-96270-dlgdff-0 +1 -0
  289. data/test/tmp/RackMultipart20100131-96270-uky8ij-0 +1 -0
  290. data/test/tmp/RackMultipart20100131-96373-140mlqp-0 +1 -0
  291. data/test/tmp/RackMultipart20100131-96373-16du1gs-0 +1 -0
  292. data/test/tmp/RackMultipart20100131-96373-181k6zk-0 +1 -0
  293. data/test/tmp/RackMultipart20100131-96373-1f1xgl8-0 +0 -0
  294. data/test/tmp/RackMultipart20100131-96373-1v4tnat-0 +1 -0
  295. data/test/tmp/RackMultipart20100131-96373-5iwxty-0 +0 -0
  296. data/test/tmp/RackMultipart20100131-96373-nrglr4-0 +1 -0
  297. data/test/tmp/RackMultipart20100131-96373-tj67zf-0 +0 -0
  298. data/test/tmp/RackMultipart20100131-96373-y7mw5e-0 +0 -0
  299. data/test/tmp/RackMultipart20100131-96488-1c52jwo-0 +0 -0
  300. data/test/tmp/RackMultipart20100131-96488-1g4n5g3-0 +0 -0
  301. data/test/tmp/RackMultipart20100131-96488-1ih9vjx-0 +1 -0
  302. data/test/tmp/RackMultipart20100131-96488-1m67bqh-0 +1 -0
  303. data/test/tmp/RackMultipart20100131-96488-1sff2qf-0 +1 -0
  304. data/test/tmp/RackMultipart20100131-96488-1vxr0sz-0 +0 -0
  305. data/test/tmp/RackMultipart20100131-96488-f1va0r-0 +1 -0
  306. data/test/tmp/RackMultipart20100131-96488-godmi4-0 +0 -0
  307. data/test/tmp/RackMultipart20100131-96488-v7puqu-0 +1 -0
  308. data/test/tmp/RackMultipart20100131-96889-10srx2y-0 +1 -0
  309. data/test/tmp/RackMultipart20100131-96889-14sujbg-0 +1 -0
  310. data/test/tmp/RackMultipart20100131-96889-1edgzzr-0 +0 -0
  311. data/test/tmp/RackMultipart20100131-96889-1jtlvx0-0 +0 -0
  312. data/test/tmp/RackMultipart20100131-96889-1leo16l-0 +0 -0
  313. data/test/tmp/RackMultipart20100131-96889-1nroez0-0 +0 -0
  314. data/test/tmp/RackMultipart20100131-96889-2z4au4-0 +1 -0
  315. data/test/tmp/RackMultipart20100131-96889-v6dj39-0 +1 -0
  316. data/test/tmp/RackMultipart20100131-96889-z2owq5-0 +1 -0
  317. data/test/tmp/RackMultipart20100131-97178-1kzzmnx-0 +0 -0
  318. data/test/tmp/RackMultipart20100131-97178-1p48git-0 +0 -0
  319. data/test/tmp/RackMultipart20100131-97178-1pak2jq-0 +0 -0
  320. data/test/tmp/RackMultipart20100131-97178-1vb21z0-0 +1 -0
  321. data/test/tmp/RackMultipart20100131-97178-3pstpf-0 +1 -0
  322. data/test/tmp/RackMultipart20100131-97178-ah9j8g-0 +0 -0
  323. data/test/tmp/RackMultipart20100131-97178-dzgylu-0 +1 -0
  324. data/test/tmp/RackMultipart20100131-97178-eh8uuk-0 +1 -0
  325. data/test/tmp/RackMultipart20100131-97178-mompd7-0 +1 -0
  326. data/test/tmp/RackMultipart20100131-97404-11op195-0 +0 -0
  327. data/test/tmp/RackMultipart20100131-97404-15vgv5a-0 +0 -0
  328. data/test/tmp/RackMultipart20100131-97404-1ipzwm0-0 +1 -0
  329. data/test/tmp/RackMultipart20100131-97404-1je7x2p-0 +1 -0
  330. data/test/tmp/RackMultipart20100131-97404-1mb6juq-0 +0 -0
  331. data/test/tmp/RackMultipart20100131-97404-1uhf75x-0 +1 -0
  332. data/test/tmp/RackMultipart20100131-97404-4bkht5-0 +0 -0
  333. data/test/tmp/RackMultipart20100131-97404-8wsyqb-0 +1 -0
  334. data/test/tmp/RackMultipart20100131-97404-p5bwvt-0 +1 -0
  335. data/test/tmp/RackMultipart20100131-97860-134h0yk-0 +1 -0
  336. data/test/tmp/RackMultipart20100131-97860-137z1v8-0 +1 -0
  337. data/test/tmp/RackMultipart20100131-97860-1fxatvg-0 +1 -0
  338. data/test/tmp/RackMultipart20100131-97860-1rkrzj1-0 +0 -0
  339. data/test/tmp/RackMultipart20100131-97860-5aahhh-0 +0 -0
  340. data/test/tmp/RackMultipart20100131-97860-bk11df-0 +0 -0
  341. data/test/tmp/RackMultipart20100131-97860-bpt71-0 +0 -0
  342. data/test/tmp/RackMultipart20100131-97860-k5kib2-0 +1 -0
  343. data/test/tmp/RackMultipart20100131-97860-yj6uro-0 +1 -0
  344. data/test/tmp/RackMultipart20100131-97900-12zytln-0 +1 -0
  345. data/test/tmp/RackMultipart20100131-97900-1hpjwgc-0 +0 -0
  346. data/test/tmp/RackMultipart20100131-97900-1kuj8ok-0 +1 -0
  347. data/test/tmp/RackMultipart20100131-97900-1wtlnbe-0 +1 -0
  348. data/test/tmp/RackMultipart20100131-97900-66d1fg-0 +0 -0
  349. data/test/tmp/RackMultipart20100131-97900-m7hm3n-0 +1 -0
  350. data/test/tmp/RackMultipart20100131-97900-n2a8fd-0 +0 -0
  351. data/test/tmp/RackMultipart20100131-97900-y9kwnp-0 +1 -0
  352. data/test/tmp/RackMultipart20100131-97900-yu52kd-0 +0 -0
  353. data/test/tmp/RackMultipart20100131-97937-1fxbun8-0 +1 -0
  354. data/test/tmp/RackMultipart20100131-97937-1qjxhia-0 +1 -0
  355. data/test/tmp/RackMultipart20100131-97937-1vwp4fj-0 +1 -0
  356. data/test/tmp/RackMultipart20100131-97937-aha3dl-0 +0 -0
  357. data/test/tmp/RackMultipart20100131-97937-asyrei-0 +1 -0
  358. data/test/tmp/RackMultipart20100131-97937-d8rmsv-0 +1 -0
  359. data/test/tmp/RackMultipart20100131-97937-g9oy2w-0 +0 -0
  360. data/test/tmp/RackMultipart20100131-97937-lt544p-0 +0 -0
  361. data/test/tmp/RackMultipart20100131-97937-mgf4qa-0 +0 -0
  362. data/test/tmp/RackMultipart20100131-98521-1fdcemt-0 +0 -0
  363. data/test/tmp/RackMultipart20100131-98521-1l33j9z-0 +1 -0
  364. data/test/tmp/RackMultipart20100131-98521-1ohobk0-0 +0 -0
  365. data/test/tmp/RackMultipart20100131-98521-45jwmb-0 +1 -0
  366. data/test/tmp/RackMultipart20100131-98521-7vu49l-0 +1 -0
  367. data/test/tmp/RackMultipart20100131-98521-9kzlxx-0 +1 -0
  368. data/test/tmp/RackMultipart20100131-98521-cycfj-0 +0 -0
  369. data/test/tmp/RackMultipart20100131-98521-hhd1bf-0 +1 -0
  370. data/test/tmp/RackMultipart20100131-98521-iqvlrq-0 +0 -0
  371. data/test/tmp/RackMultipart20100201-6555-1ce2ok5-0 +1 -0
  372. data/test/tmp/RackMultipart20100201-6555-2rd8zm-0 +0 -0
  373. data/test/tmp/RackMultipart20100201-6555-9brifb-0 +0 -0
  374. data/test/tmp/RackMultipart20100201-6555-dcf8h0-0 +1 -0
  375. data/test/tmp/RackMultipart20100201-6555-meb4gi-0 +1 -0
  376. data/test/tmp/RackMultipart20100201-6555-sci6i5-0 +0 -0
  377. data/test/tmp/RackMultipart20100201-6555-sox363-0 +1 -0
  378. data/test/tmp/RackMultipart20100201-6555-x9kyyz-0 +0 -0
  379. data/test/tmp/RackMultipart20100201-6555-zqn4x6-0 +1 -0
  380. data/test/tmp/RackMultipart20100204-40252-123q4em-0 +1 -0
  381. data/test/tmp/RackMultipart20100204-40252-1jzjes5-0 +0 -0
  382. data/test/tmp/RackMultipart20100204-40252-1reve0y-0 +0 -0
  383. data/test/tmp/RackMultipart20100204-40252-1u2b3qm-0 +1 -0
  384. data/test/tmp/RackMultipart20100204-40252-3un54m-0 +1 -0
  385. data/test/tmp/RackMultipart20100204-40252-a2oh9b-0 +0 -0
  386. data/test/tmp/RackMultipart20100204-40252-od0run-0 +1 -0
  387. data/test/tmp/RackMultipart20100204-40252-qbgvnt-0 +0 -0
  388. data/test/tmp/RackMultipart20100204-40252-tey6cp-0 +1 -0
  389. data/test/tmp/RackMultipart20100204-40512-15nitzo-0 +0 -0
  390. data/test/tmp/RackMultipart20100204-40512-18g0pdd-0 +0 -0
  391. data/test/tmp/RackMultipart20100204-40512-1brd1j2-0 +1 -0
  392. data/test/tmp/RackMultipart20100204-40512-1fz7mb1-0 +0 -0
  393. data/test/tmp/RackMultipart20100204-40512-1n1muze-0 +1 -0
  394. data/test/tmp/RackMultipart20100204-40512-1q3r24f-0 +1 -0
  395. data/test/tmp/RackMultipart20100204-40512-1tnhl3y-0 +1 -0
  396. data/test/tmp/RackMultipart20100204-40512-okgtu4-0 +0 -0
  397. data/test/tmp/RackMultipart20100204-40512-qn5sg0-0 +1 -0
  398. data/test/tmp/RackMultipart20100204-57419-15yya1x-0 +1 -0
  399. data/test/tmp/RackMultipart20100204-57419-19m1c3d-0 +0 -0
  400. data/test/tmp/RackMultipart20100204-57419-1n7d3i6-0 +1 -0
  401. data/test/tmp/RackMultipart20100204-57419-1npqntd-0 +0 -0
  402. data/test/tmp/RackMultipart20100204-57419-bklpgc-0 +1 -0
  403. data/test/tmp/RackMultipart20100204-57419-ei91e5-0 +0 -0
  404. data/test/tmp/RackMultipart20100204-57419-g1hqwp-0 +1 -0
  405. data/test/tmp/RackMultipart20100204-57419-t7ag5k-0 +0 -0
  406. data/test/tmp/RackMultipart20100204-57419-xiebhk-0 +1 -0
  407. data/test/tmp/RackMultipart20100204-57658-16cfrux-0 +1 -0
  408. data/test/tmp/RackMultipart20100204-57658-19wbkan-0 +1 -0
  409. data/test/tmp/RackMultipart20100204-57658-1qptexw-0 +0 -0
  410. data/test/tmp/RackMultipart20100204-57658-1u2bpg8-0 +0 -0
  411. data/test/tmp/RackMultipart20100204-57658-1v8jrhq-0 +0 -0
  412. data/test/tmp/RackMultipart20100204-57658-48l4m0-0 +1 -0
  413. data/test/tmp/RackMultipart20100204-57658-hpw0o9-0 +1 -0
  414. data/test/tmp/RackMultipart20100204-57658-l75jof-0 +1 -0
  415. data/test/tmp/RackMultipart20100204-57658-t3or19-0 +0 -0
  416. data/test/tmp/RackMultipart20100204-57712-101mfz2-0 +1 -0
  417. data/test/tmp/RackMultipart20100204-57712-136zsqs-0 +0 -0
  418. data/test/tmp/RackMultipart20100204-57712-16ge0ra-0 +1 -0
  419. data/test/tmp/RackMultipart20100204-57712-18dppuc-0 +0 -0
  420. data/test/tmp/RackMultipart20100204-57712-1aj6ady-0 +0 -0
  421. data/test/tmp/RackMultipart20100204-57712-1nqkndh-0 +1 -0
  422. data/test/tmp/RackMultipart20100204-57712-1pngw5w-0 +1 -0
  423. data/test/tmp/RackMultipart20100204-57712-6lo90o-0 +1 -0
  424. data/test/tmp/RackMultipart20100204-57712-ufq7x-0 +0 -0
  425. data/test/tmp/RackMultipart20100204-58321-10lc3a6-0 +1 -0
  426. data/test/tmp/RackMultipart20100204-58321-15o8a4o-0 +0 -0
  427. data/test/tmp/RackMultipart20100204-58321-1sos76-0 +1 -0
  428. data/test/tmp/RackMultipart20100204-58321-26876u-0 +1 -0
  429. data/test/tmp/RackMultipart20100204-58321-hnz5b8-0 +0 -0
  430. data/test/tmp/RackMultipart20100204-58321-lrmvfa-0 +1 -0
  431. data/test/tmp/RackMultipart20100204-58321-q0ak2g-0 +1 -0
  432. data/test/tmp/RackMultipart20100204-58321-sa8wal-0 +0 -0
  433. data/test/tmp/RackMultipart20100204-58321-z7jxeq-0 +0 -0
  434. data/test/tmp/RackMultipart20100204-59702-1fdw43n-0 +1 -0
  435. data/test/tmp/RackMultipart20100204-59702-2hf4ld-0 +1 -0
  436. data/test/tmp/RackMultipart20100204-59702-2ldyxj-0 +0 -0
  437. data/test/tmp/RackMultipart20100204-59702-aqevfm-0 +1 -0
  438. data/test/tmp/RackMultipart20100204-59702-dpbv5t-0 +0 -0
  439. data/test/tmp/RackMultipart20100204-59702-ec8276-0 +1 -0
  440. data/test/tmp/RackMultipart20100204-59702-jn6ncc-0 +1 -0
  441. data/test/tmp/RackMultipart20100204-59702-m8xobr-0 +0 -0
  442. data/test/tmp/RackMultipart20100204-59702-q89plk-0 +0 -0
  443. data/test/tmp/RackMultipart20100204-59747-14sdb6-0 +1 -0
  444. data/test/tmp/RackMultipart20100204-59747-15742uk-0 +1 -0
  445. data/test/tmp/RackMultipart20100204-59747-15lp9kl-0 +0 -0
  446. data/test/tmp/RackMultipart20100204-59747-1a7ub6i-0 +0 -0
  447. data/test/tmp/RackMultipart20100204-59747-1i77fp1-0 +1 -0
  448. data/test/tmp/RackMultipart20100204-59747-1mfl7gf-0 +0 -0
  449. data/test/tmp/RackMultipart20100204-59747-1qrkt89-0 +0 -0
  450. data/test/tmp/RackMultipart20100204-59747-6biaui-0 +1 -0
  451. data/test/tmp/RackMultipart20100204-59747-m7iqd0-0 +1 -0
  452. data/test/tmp/RackMultipart20100204-60097-1kgjis5-0 +0 -0
  453. data/test/tmp/RackMultipart20100204-60097-1odv8os-0 +1 -0
  454. data/test/tmp/RackMultipart20100204-60097-1p5yvyk-0 +0 -0
  455. data/test/tmp/RackMultipart20100204-60097-43si9w-0 +1 -0
  456. data/test/tmp/RackMultipart20100204-60097-awjfar-0 +1 -0
  457. data/test/tmp/RackMultipart20100204-60097-d7g9gf-0 +1 -0
  458. data/test/tmp/RackMultipart20100204-60097-fmxwtb-0 +0 -0
  459. data/test/tmp/RackMultipart20100204-60097-i8r8ph-0 +0 -0
  460. data/test/tmp/RackMultipart20100204-60097-yv1urn-0 +1 -0
  461. data/test/tmp/RackMultipart20100204-60773-14k87gs-0 +1 -0
  462. data/test/tmp/RackMultipart20100204-60773-15uh5fc-0 +1 -0
  463. data/test/tmp/RackMultipart20100204-60773-1b4gi3-0 +1 -0
  464. data/test/tmp/RackMultipart20100204-60773-1g0sg6r-0 +1 -0
  465. data/test/tmp/RackMultipart20100204-60773-1jgjbwl-0 +0 -0
  466. data/test/tmp/RackMultipart20100204-60773-1kk50pp-0 +0 -0
  467. data/test/tmp/RackMultipart20100204-60773-1xktk0q-0 +0 -0
  468. data/test/tmp/RackMultipart20100204-60773-jcuq05-0 +1 -0
  469. data/test/tmp/RackMultipart20100204-60773-og04od-0 +0 -0
  470. data/test/tmp/RackMultipart20100205-69480-169yh4u-0 +1 -0
  471. data/test/tmp/RackMultipart20100205-69480-16ry3sk-0 +0 -0
  472. data/test/tmp/RackMultipart20100205-69480-1dm58eb-0 +1 -0
  473. data/test/tmp/RackMultipart20100205-69480-1e6dfel-0 +1 -0
  474. data/test/tmp/RackMultipart20100205-69480-1knio7h-0 +0 -0
  475. data/test/tmp/RackMultipart20100205-69480-1rxthf1-0 +1 -0
  476. data/test/tmp/RackMultipart20100205-69480-1sqp1p6-0 +1 -0
  477. data/test/tmp/RackMultipart20100205-69480-k3c5xi-0 +0 -0
  478. data/test/tmp/RackMultipart20100205-69480-y0o7bs-0 +0 -0
  479. data/test/tmp/RackMultipart20100205-89390-12t4t4h-0 +0 -0
  480. data/test/tmp/RackMultipart20100205-89390-18sku49-0 +1 -0
  481. data/test/tmp/RackMultipart20100205-89390-1aeaxrj-0 +0 -0
  482. data/test/tmp/RackMultipart20100205-89390-1ej1o6b-0 +0 -0
  483. data/test/tmp/RackMultipart20100205-89390-1qbye80-0 +1 -0
  484. data/test/tmp/RackMultipart20100205-89390-1t2reiw-0 +0 -0
  485. data/test/tmp/RackMultipart20100205-89390-2j4ebh-0 +1 -0
  486. data/test/tmp/RackMultipart20100205-89390-cqkz93-0 +1 -0
  487. data/test/tmp/RackMultipart20100205-89390-ehlxym-0 +1 -0
  488. data/test/tmp/RackMultipart20100207-41099-1db1yc7-0 +0 -0
  489. data/test/tmp/RackMultipart20100207-41099-1enfwih-0 +0 -0
  490. data/test/tmp/RackMultipart20100207-41099-1hiqogn-0 +1 -0
  491. data/test/tmp/RackMultipart20100207-41099-1n21xz7-0 +0 -0
  492. data/test/tmp/RackMultipart20100207-41099-1ofbaxj-0 +0 -0
  493. data/test/tmp/RackMultipart20100207-41099-1pqhw0q-0 +1 -0
  494. data/test/tmp/RackMultipart20100207-41099-1s6zxzw-0 +1 -0
  495. data/test/tmp/RackMultipart20100207-41099-asxuq9-0 +1 -0
  496. data/test/tmp/RackMultipart20100207-41099-eowd6o-0 +1 -0
  497. data/test/tmp/RackMultipart20100209-65426-10ag1jr-0 +1 -0
  498. data/test/tmp/RackMultipart20100209-65426-13zm3yu-0 +0 -0
  499. data/test/tmp/RackMultipart20100209-65426-1otg9r6-0 +0 -0
  500. data/test/tmp/RackMultipart20100209-65426-1rdz5v6-0 +1 -0
  501. data/test/tmp/RackMultipart20100209-65426-1usq2ff-0 +1 -0
  502. data/test/tmp/RackMultipart20100209-65426-1wxs8n7-0 +1 -0
  503. data/test/tmp/RackMultipart20100209-65426-4uffbj-0 +1 -0
  504. data/test/tmp/RackMultipart20100209-65426-a5hra7-0 +0 -0
  505. data/test/tmp/RackMultipart20100209-65426-ylpq1h-0 +0 -0
  506. data/test/tmp/RackMultipart20100209-65558-1bghj62-0 +0 -0
  507. data/test/tmp/RackMultipart20100209-65558-1fbovnp-0 +1 -0
  508. data/test/tmp/RackMultipart20100209-65558-1hfwl02-0 +1 -0
  509. data/test/tmp/RackMultipart20100209-65558-b35wyr-0 +0 -0
  510. data/test/tmp/RackMultipart20100209-65558-esd0f1-0 +1 -0
  511. data/test/tmp/RackMultipart20100209-65558-gq26ri-0 +0 -0
  512. data/test/tmp/RackMultipart20100209-65558-mwizdx-0 +1 -0
  513. data/test/tmp/RackMultipart20100209-65558-ntlzq6-0 +1 -0
  514. data/test/tmp/RackMultipart20100209-65558-yoxcgc-0 +0 -0
  515. data/test/tmp/RackMultipart20100212-43647-12bo3g0-0 +0 -0
  516. data/test/tmp/RackMultipart20100212-43647-133b4b8-0 +1 -0
  517. data/test/tmp/RackMultipart20100212-43647-1b2g7f7-0 +1 -0
  518. data/test/tmp/RackMultipart20100212-43647-1et2ima-0 +0 -0
  519. data/test/tmp/RackMultipart20100212-43647-1thip8b-0 +1 -0
  520. data/test/tmp/RackMultipart20100212-43647-1x05hpf-0 +1 -0
  521. data/test/tmp/RackMultipart20100212-43647-cbseb3-0 +0 -0
  522. data/test/tmp/RackMultipart20100212-43647-mybv0k-0 +1 -0
  523. data/test/tmp/RackMultipart20100212-43647-scxg3k-0 +0 -0
  524. data/test/tmp/RackMultipart20100316-26215-15fvlkf-0 +1 -0
  525. data/test/tmp/RackMultipart20100316-26215-15ms9t8-0 +0 -0
  526. data/test/tmp/RackMultipart20100316-26215-196k138-0 +0 -0
  527. data/test/tmp/RackMultipart20100316-26215-1qbnikd-0 +1 -0
  528. data/test/tmp/RackMultipart20100316-26215-1tey31-0 +1 -0
  529. data/test/tmp/RackMultipart20100316-26215-dp0rwx-0 +0 -0
  530. data/test/tmp/RackMultipart20100316-26215-lmfp1-0 +1 -0
  531. data/test/tmp/RackMultipart20100316-26215-njsjmn-0 +0 -0
  532. data/test/tmp/RackMultipart20100316-26215-z39dzf-0 +1 -0
  533. data/test/tmp/mona_lisa.jpg20100114-2850-1t73ev7-0 +0 -0
  534. data/test/tmp/mona_lisa.jpg20100127-16318-1bffb05-0 +0 -0
  535. data/test/tmp/mona_lisa.jpg20100131-1041-1rvua2k-0 +0 -0
  536. data/test/tmp/mona_lisa.jpg20100131-1200-i3rods-0 +0 -0
  537. data/test/tmp/mona_lisa.jpg20100131-1566-18mcqh9-0 +0 -0
  538. data/test/tmp/mona_lisa.jpg20100131-2176-1t3bsp-0 +0 -0
  539. data/test/tmp/mona_lisa.jpg20100131-2251-1tz4wqa-0 +0 -0
  540. data/test/tmp/mona_lisa.jpg20100131-2563-ohvnnb-0 +0 -0
  541. data/test/tmp/mona_lisa.jpg20100131-3076-m9pk9y-0 +0 -0
  542. data/test/tmp/mona_lisa.jpg20100131-3324-9rpzdj-0 +0 -0
  543. data/test/tmp/mona_lisa.jpg20100131-3712-wf4b9m-0 +0 -0
  544. data/test/tmp/mona_lisa.jpg20100131-4098-l9cg9j-0 +0 -0
  545. data/test/tmp/mona_lisa.jpg20100131-4178-vk5vzl-0 +0 -0
  546. data/test/tmp/mona_lisa.jpg20100131-4297-ger5pb-0 +0 -0
  547. data/test/tmp/mona_lisa.jpg20100131-4434-1bacf3n-0 +0 -0
  548. data/test/tmp/mona_lisa.jpg20100131-4544-1mod9m0-0 +0 -0
  549. data/test/tmp/mona_lisa.jpg20100131-4655-14v218s-0 +0 -0
  550. data/test/tmp/mona_lisa.jpg20100131-5244-j05927-0 +0 -0
  551. data/test/tmp/mona_lisa.jpg20100131-5383-immke7-0 +0 -0
  552. data/test/tmp/mona_lisa.jpg20100131-5711-li3y72-0 +0 -0
  553. data/test/tmp/mona_lisa.jpg20100131-91110-1tcf6h5-0 +0 -0
  554. data/test/tmp/mona_lisa.jpg20100131-91876-1qvpsdp-0 +0 -0
  555. data/test/tmp/mona_lisa.jpg20100131-93665-e6omtk-0 +0 -0
  556. data/test/tmp/mona_lisa.jpg20100131-96270-l86z07-0 +0 -0
  557. data/test/tmp/mona_lisa.jpg20100131-96373-du21ld-0 +0 -0
  558. data/test/tmp/mona_lisa.jpg20100131-96488-14o5536-0 +0 -0
  559. data/test/tmp/mona_lisa.jpg20100131-96889-1gtncmi-0 +0 -0
  560. data/test/tmp/mona_lisa.jpg20100131-97178-1ppkuxt-0 +0 -0
  561. data/test/tmp/mona_lisa.jpg20100131-97404-kcrmpr-0 +0 -0
  562. data/test/tmp/mona_lisa.jpg20100131-97860-q1g3ex-0 +0 -0
  563. data/test/tmp/mona_lisa.jpg20100131-97900-1mp4tmq-0 +0 -0
  564. data/test/tmp/mona_lisa.jpg20100131-97937-o67sr4-0 +0 -0
  565. data/test/tmp/mona_lisa.jpg20100131-98521-jd7yia-0 +0 -0
  566. data/test/tmp/mona_lisa.jpg20100201-6555-1vw40l7-0 +0 -0
  567. data/test/tmp/mona_lisa.jpg20100204-40252-13zlhuo-0 +0 -0
  568. data/test/tmp/mona_lisa.jpg20100204-40512-nc3x8n-0 +0 -0
  569. data/test/tmp/mona_lisa.jpg20100204-57419-7yfe6o-0 +0 -0
  570. data/test/tmp/mona_lisa.jpg20100204-57658-b4op4h-0 +0 -0
  571. data/test/tmp/mona_lisa.jpg20100204-57712-11uqh50-0 +0 -0
  572. data/test/tmp/mona_lisa.jpg20100204-58321-ukp8q0-0 +0 -0
  573. data/test/tmp/mona_lisa.jpg20100204-59747-ov4w4c-0 +0 -0
  574. data/test/tmp/mona_lisa.jpg20100204-60097-1ekqjc6-0 +0 -0
  575. data/test/tmp/mona_lisa.jpg20100204-60773-1eh6ap6-0 +0 -0
  576. data/test/tmp/mona_lisa.jpg20100205-69480-tay2k2-0 +0 -0
  577. data/test/tmp/mona_lisa.jpg20100205-89390-16rh2ue-0 +0 -0
  578. data/test/tmp/mona_lisa.jpg20100205-91358-cdsa2g-0 +0 -0
  579. data/test/tmp/mona_lisa.jpg20100207-41099-llyyhb-0 +0 -0
  580. data/test/tmp/mona_lisa.jpg20100209-65426-pequnv-0 +0 -0
  581. data/test/tmp/mona_lisa.jpg20100209-65558-fbl6xv-0 +0 -0
  582. data/test/tmp/mona_lisa.jpg20100212-43647-l1vsxc-0 +0 -0
  583. data/test/tmp/mona_lisa.jpg20100316-26215-1jtjllg-0 +0 -0
  584. metadata +542 -18
  585. data/lib/action_view/erb/util.rb +0 -44
  586. data/lib/action_view/safe_buffer.rb +0 -28
  587. data/test/view/safe_buffer_test.rb +0 -36
@@ -1,3 +1,4 @@
1
+ # encoding: us-ascii
1
2
  #--
2
3
  # Copyright (c) 2006 Assaf Arkin (http://labnotes.org)
3
4
  # Under MIT and/or CC By license.
@@ -604,7 +604,7 @@ class FragmentCachingTest < ActionController::TestCase
604
604
  @store.write('views/expensive', 'fragment content')
605
605
  fragment_computed = false
606
606
 
607
- buffer = 'generated till now -> '
607
+ buffer = 'generated till now -> '.html_safe
608
608
  @controller.fragment_for(buffer, 'expensive') { fragment_computed = true }
609
609
 
610
610
  assert fragment_computed
@@ -615,12 +615,26 @@ class FragmentCachingTest < ActionController::TestCase
615
615
  @store.write('views/expensive', 'fragment content')
616
616
  fragment_computed = false
617
617
 
618
- buffer = 'generated till now -> '
618
+ buffer = 'generated till now -> '.html_safe
619
619
  @controller.fragment_for(buffer, 'expensive') { fragment_computed = true }
620
620
 
621
621
  assert !fragment_computed
622
622
  assert_equal 'generated till now -> fragment content', buffer
623
623
  end
624
+
625
+ def test_html_safety
626
+ assert_nil @store.read('views/name')
627
+ content = 'value'.html_safe
628
+ assert_equal content, @controller.write_fragment('name', content)
629
+
630
+ cached = @store.read('views/name')
631
+ assert_equal content, cached
632
+ assert_equal String, cached.class
633
+
634
+ html_safe = @controller.read_fragment('name')
635
+ assert_equal content, html_safe
636
+ assert html_safe.html_safe?
637
+ end
624
638
  end
625
639
 
626
640
  class FunctionalCachingController < ActionController::Base
@@ -2,6 +2,8 @@ require 'abstract_unit'
2
2
 
3
3
  class CookieTest < ActionController::TestCase
4
4
  class TestController < ActionController::Base
5
+ self.cookie_verifier_secret = "thisISverySECRET123"
6
+
5
7
  def authenticate
6
8
  cookies["user_name"] = "david"
7
9
  end
@@ -39,6 +41,18 @@ class CookieTest < ActionController::TestCase
39
41
  def authenticate_with_http_only
40
42
  cookies["user_name"] = { :value => "david", :httponly => true }
41
43
  end
44
+
45
+ def set_permanent_cookie
46
+ cookies.permanent[:user_name] = "Jamie"
47
+ end
48
+
49
+ def set_signed_cookie
50
+ cookies.signed[:user_id] = 45
51
+ end
52
+
53
+ def set_permanent_signed_cookie
54
+ cookies.permanent.signed[:remember_me] = 100
55
+ end
42
56
 
43
57
  def rescue_action(e)
44
58
  raise unless ActionView::MissingTemplate # No templates here, and we don't care about the output
@@ -131,4 +145,26 @@ class CookieTest < ActionController::TestCase
131
145
  cookies = @controller.send(:cookies)
132
146
  assert_equal 'david', cookies['user_name']
133
147
  end
134
- end
148
+
149
+ def test_permanent_cookie
150
+ get :set_permanent_cookie
151
+ assert_match /Jamie/, @response.headers["Set-Cookie"].first
152
+ assert_match %r(#{20.years.from_now.year}), @response.headers["Set-Cookie"].first
153
+ end
154
+
155
+ def test_signed_cookie
156
+ get :set_signed_cookie
157
+ assert_equal 45, @controller.send(:cookies).signed[:user_id]
158
+ end
159
+
160
+ def test_accessing_nonexistant_signed_cookie_should_not_raise_an_invalid_signature
161
+ get :set_signed_cookie
162
+ assert_nil @controller.send(:cookies).signed[:non_existant_attribute]
163
+ end
164
+
165
+ def test_permanent_signed_cookie
166
+ get :set_permanent_signed_cookie
167
+ assert_match %r(#{20.years.from_now.year}), @response.headers["Set-Cookie"].first
168
+ assert_equal 100, @controller.send(:cookies).signed[:remember_me]
169
+ end
170
+ end
@@ -71,6 +71,18 @@ class FlashTest < ActionController::TestCase
71
71
  redirect_to :action => "std_action"
72
72
  @flash_copy = {}.update(flash)
73
73
  end
74
+
75
+ def redirect_with_alert
76
+ redirect_to '/nowhere', :alert => "Beware the nowheres!"
77
+ end
78
+
79
+ def redirect_with_notice
80
+ redirect_to '/somewhere', :notice => "Good luck in the somewheres!"
81
+ end
82
+
83
+ def redirect_with_other_flashes
84
+ redirect_to '/wonderland', :flash => { :joyride => "Horses!" }
85
+ end
74
86
  end
75
87
 
76
88
  tests TestController
@@ -144,4 +156,19 @@ class FlashTest < ActionController::TestCase
144
156
  get :std_action
145
157
  assert_nil session["flash"]
146
158
  end
147
- end
159
+
160
+ def test_redirect_to_with_alert
161
+ get :redirect_with_alert
162
+ assert_equal "Beware the nowheres!", @controller.send(:flash)[:alert]
163
+ end
164
+
165
+ def test_redirect_to_with_notice
166
+ get :redirect_with_notice
167
+ assert_equal "Good luck in the somewheres!", @controller.send(:flash)[:notice]
168
+ end
169
+
170
+ def test_redirect_to_with_other_flashes
171
+ get :redirect_with_other_flashes
172
+ assert_equal "Horses!", @controller.send(:flash)[:joyride]
173
+ end
174
+ end
@@ -324,7 +324,6 @@ class IntegrationProcessTest < ActionController::IntegrationTest
324
324
  assert_equal "Gone", status_message
325
325
  assert_response 410
326
326
  assert_response :gone
327
- assert_equal "cookie_1=; path=/\ncookie_3=chocolate; path=/", headers["Set-Cookie"]
328
327
  assert_equal({"cookie_1"=>"", "cookie_2"=>"oatmeal", "cookie_3"=>"chocolate"}, cookies)
329
328
  assert_equal "Gone", response.body
330
329
  end
@@ -0,0 +1,24 @@
1
+ require 'abstract_unit'
2
+
3
+ class LocalizedController < ActionController::Base
4
+ def hello_world
5
+ end
6
+ end
7
+
8
+ class LocalizedTemplatesTest < ActionController::TestCase
9
+ tests LocalizedController
10
+
11
+ teardown { I18n.locale = :en }
12
+
13
+ def test_localized_template_is_used
14
+ I18n.locale = :de
15
+ get :hello_world
16
+ assert_equal "Gutten Tag", @response.body
17
+ end
18
+
19
+ def test_default_locale_template_is_used_when_locale_is_missing
20
+ I18n.locale = :dk
21
+ get :hello_world
22
+ assert_equal "Hello World", @response.body
23
+ end
24
+ end
@@ -0,0 +1,19 @@
1
+ require 'abstract_unit'
2
+
3
+ class OutputEscapingTest < ActiveSupport::TestCase
4
+
5
+ test "escape_html shouldn't die when passed nil" do
6
+ assert ERB::Util.h(nil).blank?
7
+ end
8
+
9
+ test "escapeHTML should escape strings" do
10
+ assert_equal "&lt;&gt;&quot;", ERB::Util.h("<>\"")
11
+ end
12
+
13
+ test "escapeHTML shouldn't touch explicitly safe strings" do
14
+ # TODO this seems easier to compose and reason about, but
15
+ # this should be verified
16
+ assert_equal "<", ERB::Util.h("<".html_safe)
17
+ end
18
+
19
+ end
@@ -219,7 +219,6 @@ class RackResponseTest < BaseRackTest
219
219
  "Content-Type" => "text/html; charset=utf-8",
220
220
  "Cache-Control" => "private, max-age=0, must-revalidate",
221
221
  "ETag" => '"65a8e27d8879283831b664bd8b7f0ad4"',
222
- "Set-Cookie" => "",
223
222
  "Content-Length" => "13"
224
223
  }, headers)
225
224
 
@@ -238,7 +237,6 @@ class RackResponseTest < BaseRackTest
238
237
  "Content-Type" => "text/html; charset=utf-8",
239
238
  "Cache-Control" => "private, max-age=0, must-revalidate",
240
239
  "ETag" => '"ebb5e89e8a94e9dd22abf5d915d112b2"',
241
- "Set-Cookie" => "",
242
240
  "Content-Length" => "8"
243
241
  }, headers)
244
242
  end
@@ -253,8 +251,7 @@ class RackResponseTest < BaseRackTest
253
251
  assert_equal 200, status
254
252
  assert_equal({
255
253
  "Content-Type" => "text/html; charset=utf-8",
256
- "Cache-Control" => "no-cache",
257
- "Set-Cookie" => ""
254
+ "Cache-Control" => "no-cache"
258
255
  }, headers)
259
256
 
260
257
  parts = []
@@ -652,6 +652,10 @@ class TestController < ActionController::Base
652
652
  render :partial => "customer_counter", :collection => [ Customer.new("david"), Customer.new("mary") ]
653
653
  end
654
654
 
655
+ def partial_collection_with_as_and_counter
656
+ render :partial => "customer_counter_with_as", :collection => [ Customer.new("david"), Customer.new("mary") ], :as => :client
657
+ end
658
+
655
659
  def partial_collection_with_locals
656
660
  render :partial => "customer_greeting", :collection => [ Customer.new("david"), Customer.new("mary") ], :locals => { :greeting => "Bonjour" }
657
661
  end
@@ -1470,6 +1474,11 @@ class RenderTest < ActionController::TestCase
1470
1474
  assert_equal "david0mary1", @response.body
1471
1475
  end
1472
1476
 
1477
+ def test_partial_collection_with_as_and_counter
1478
+ get :partial_collection_with_as_and_counter
1479
+ assert_equal "david0mary1", @response.body
1480
+ end
1481
+
1473
1482
  def test_partial_collection_with_locals
1474
1483
  get :partial_collection_with_locals
1475
1484
  assert_equal "Bonjour: davidBonjour: mary", @response.body
@@ -1590,7 +1599,7 @@ class EtagRenderTest < ActionController::TestCase
1590
1599
 
1591
1600
  def test_render_blank_body_shouldnt_set_etag
1592
1601
  get :blank_response
1593
- assert !@response.etag?
1602
+ assert !@response.etag?, @response.headers.inspect
1594
1603
  end
1595
1604
 
1596
1605
  def test_render_200_should_set_etag
@@ -1609,7 +1618,7 @@ class EtagRenderTest < ActionController::TestCase
1609
1618
  def test_render_against_etag_request_should_have_no_content_length_when_match
1610
1619
  @request.if_none_match = etag_for("hello david")
1611
1620
  get :render_hello_world_from_variable
1612
- assert !@response.headers.has_key?("Content-Length"), @response.headers['Content-Length']
1621
+ assert_nil @response.headers["Content-Length"], @response.headers.inspect
1613
1622
  end
1614
1623
 
1615
1624
  def test_render_against_etag_request_should_200_when_no_match
@@ -281,17 +281,23 @@ class RescueControllerTest < ActionController::TestCase
281
281
  end
282
282
 
283
283
  def test_local_request_when_remote_addr_is_localhost
284
- @controller.expects(:request).returns(@request).at_least_once
284
+ @controller.expects(:request).returns(@request).at_least(4)
285
285
  with_remote_addr '127.0.0.1' do
286
286
  assert @controller.send(:local_request?)
287
287
  end
288
+ with_remote_addr '::1' do
289
+ assert @controller.send(:local_request?)
290
+ end
288
291
  end
289
292
 
290
293
  def test_local_request_when_remote_addr_isnt_locahost
291
- @controller.expects(:request).returns(@request)
294
+ @controller.expects(:request).returns(@request).at_least(4)
292
295
  with_remote_addr '1.2.3.4' do
293
296
  assert !@controller.send(:local_request?)
294
297
  end
298
+ with_remote_addr '2002::102:304' do
299
+ assert !@controller.send(:local_request?)
300
+ end
295
301
  end
296
302
 
297
303
  def test_rescue_responses
@@ -1,3 +1,4 @@
1
+ # encoding: us-ascii
1
2
  require 'abstract_unit'
2
3
  require 'controller/fake_controllers'
3
4
  require 'action_controller/routing/route_set'
@@ -73,7 +73,7 @@ class SendFileTest < ActionController::TestCase
73
73
 
74
74
  assert_equal @controller.file_path, response.headers['X-Sendfile']
75
75
  assert response.body.blank?
76
- assert !response.etag?
76
+ assert !response.etag?, response.headers.inspect
77
77
  end
78
78
 
79
79
  def test_data
@@ -145,7 +145,7 @@ class CookieStoreTest < ActionController::IntegrationTest
145
145
  with_test_route_set do
146
146
  get '/no_session_access'
147
147
  assert_response :success
148
- assert_equal "", headers['Set-Cookie']
148
+ assert_equal nil, headers['Set-Cookie']
149
149
  end
150
150
  end
151
151
 
@@ -155,7 +155,7 @@ class CookieStoreTest < ActionController::IntegrationTest
155
155
  "fef868465920f415f2c0652d6910d3af288a0367"
156
156
  get '/no_session_access'
157
157
  assert_response :success
158
- assert_equal "", headers['Set-Cookie']
158
+ assert_equal nil, headers['Set-Cookie']
159
159
  end
160
160
  end
161
161
 
@@ -65,9 +65,11 @@ class UrlRewriterTests < ActionController::TestCase
65
65
  @params[:action] = 'bye'
66
66
  @params[:id] = '2'
67
67
 
68
- assert_equal '/hi/hi/2', @rewriter.rewrite(:only_path => true, :overwrite_params => {:action => 'hi'})
69
- u = @rewriter.rewrite(:only_path => false, :overwrite_params => {:action => 'hi'})
70
- assert_match %r(/hi/hi/2$), u
68
+ assert_deprecated /overwrite_params/ do
69
+ assert_equal '/hi/hi/2', @rewriter.rewrite(:only_path => true, :overwrite_params => {:action => 'hi'})
70
+ u = @rewriter.rewrite(:only_path => false, :overwrite_params => {:action => 'hi'})
71
+ assert_match %r(/hi/hi/2$), u
72
+ end
71
73
  end
72
74
 
73
75
  def test_overwrite_removes_original
@@ -75,9 +77,11 @@ class UrlRewriterTests < ActionController::TestCase
75
77
  @params[:action] = 'list'
76
78
  @params[:list_page] = 1
77
79
 
78
- assert_equal '/search/list?list_page=2', @rewriter.rewrite(:only_path => true, :overwrite_params => {"list_page" => 2})
79
- u = @rewriter.rewrite(:only_path => false, :overwrite_params => {:list_page => 2})
80
- assert_equal 'http://test.host/search/list?list_page=2', u
80
+ assert_deprecated /overwrite_params/ do
81
+ assert_equal '/search/list?list_page=2', @rewriter.rewrite(:only_path => true, :overwrite_params => {"list_page" => 2})
82
+ u = @rewriter.rewrite(:only_path => false, :overwrite_params => {:list_page => 2})
83
+ assert_equal 'http://test.host/search/list?list_page=2', u
84
+ end
81
85
  end
82
86
 
83
87
  def test_to_str
@@ -0,0 +1 @@
1
+ Gutten Tag
@@ -0,0 +1 @@
1
+ Hello World
@@ -0,0 +1 @@
1
+ <%= client.name %><%= client_counter %>
@@ -0,0 +1 @@
1
+ <%= "текст" %>
@@ -0,0 +1,2 @@
1
+ <%# encoding: utf-8 -%>
2
+ <%= "текст" %>
@@ -0,0 +1 @@
1
+ <%= t(['foo', 'bar']) %>
@@ -0,0 +1 @@
1
+ <%= t(['.foo', '.bar']) %>
@@ -1,2 +1,4 @@
1
- Русский текст
2
- 日本語のテキスト
1
+ Русский <%= render :partial => 'test/utf8_partial' %>
2
+ <%= "日".encoding %>
3
+ <%= @output_buffer.encoding %>
4
+ <%= __ENCODING__ %>
@@ -0,0 +1,5 @@
1
+ <%# encoding: utf-8 -%>
2
+ Русский <%= render :partial => 'test/utf8_partial_magic' %>
3
+ <%= "日".encoding %>
4
+ <%= @output_buffer.encoding %>
5
+ <%= __ENCODING__ %>
@@ -0,0 +1,5 @@
1
+ <%# encoding: utf-8 -%>
2
+ Русский <%= render :partial => 'test/utf8_partial' %>
3
+ <%= "日".encoding %>
4
+ <%= @output_buffer.encoding %>
5
+ <%= __ENCODING__ %>
@@ -2,7 +2,7 @@ require 'abstract_unit'
2
2
 
3
3
  class ActiveRecordHelperI18nTest < Test::Unit::TestCase
4
4
  include ActionView::Helpers::ActiveRecordHelper
5
-
5
+
6
6
  attr_reader :request
7
7
  def setup
8
8
  @object = stub :errors => stub(:count => 1, :full_messages => ['full_messages'])
@@ -35,10 +35,17 @@ class ActiveRecordHelperI18nTest < Test::Unit::TestCase
35
35
  I18n.expects(:t).with('', :default => '', :count => 1, :scope => [:activerecord, :models]).once.returns ''
36
36
  error_messages_for(:object => @object, :locale => 'en')
37
37
  end
38
-
38
+
39
39
  def test_error_messages_for_given_object_name_it_translates_object_name
40
40
  I18n.expects(:t).with(:header, :locale => 'en', :scope => [:activerecord, :errors, :template], :count => 1, :model => @object_name).returns "1 error prohibited this #{@object_name} from being saved"
41
41
  I18n.expects(:t).with(@object_name, :default => @object_name, :count => 1, :scope => [:activerecord, :models]).once.returns @object_name
42
42
  error_messages_for(:object => @object, :locale => 'en', :object_name => @object_name)
43
43
  end
44
+
45
+ def test_error_messages_for_given_object_name_with_underscore_it_translates_object_name
46
+ I18n.expects(:t).with('bank_account', :default => 'bank account', :count => 1, :scope => [:activerecord, :models]).once.returns 'bank account'
47
+ I18n.expects(:t).with(:header, :locale => 'en', :scope => [:activerecord, :errors, :template], :count => 1, :model => 'bank account').returns "1 error prohibited this bank account from being saved"
48
+ error_messages_for(:object => @object, :locale => 'en', :object_name => 'bank_account')
49
+ end
44
50
  end
51
+
@@ -128,7 +128,6 @@ class AssetTagHelperTest < ActionView::TestCase
128
128
 
129
129
  ImageLinkToTag = {
130
130
  %(image_tag("xml.png")) => %(<img alt="Xml" src="/images/xml.png" />),
131
- %(image_tag("..jpg")) => %(<img alt="" src="/images/..jpg" />),
132
131
  %(image_tag("rss.gif", :alt => "rss syndication")) => %(<img alt="rss syndication" src="/images/rss.gif" />),
133
132
  %(image_tag("gold.png", :size => "45x70")) => %(<img alt="Gold" height="70" src="/images/gold.png" width="45" />),
134
133
  %(image_tag("gold.png", "size" => "45x70")) => %(<img alt="Gold" height="70" src="/images/gold.png" width="45" />),
@@ -1229,6 +1229,23 @@ class DateHelperTest < ActionView::TestCase
1229
1229
  assert_dom_equal expected, date_select("post", "written_on", :order => [ :month, :year ])
1230
1230
  end
1231
1231
 
1232
+ def test_date_select_without_day_and_with_disabled_html_option
1233
+ @post = Post.new
1234
+ @post.written_on = Date.new(2004, 6, 15)
1235
+
1236
+ expected = "<input type=\"hidden\" id=\"post_written_on_3i\" disabled=\"disabled\" name=\"post[written_on(3i)]\" value=\"1\" />\n"
1237
+
1238
+ expected << %{<select id="post_written_on_2i" disabled="disabled" name="post[written_on(2i)]">\n}
1239
+ expected << %{<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6" selected="selected">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n}
1240
+ expected << "</select>\n"
1241
+
1242
+ expected << %{<select id="post_written_on_1i" disabled="disabled" name="post[written_on(1i)]">\n}
1243
+ expected << %{<option value="1999">1999</option>\n<option value="2000">2000</option>\n<option value="2001">2001</option>\n<option value="2002">2002</option>\n<option value="2003">2003</option>\n<option value="2004" selected="selected">2004</option>\n<option value="2005">2005</option>\n<option value="2006">2006</option>\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n}
1244
+ expected << "</select>\n"
1245
+
1246
+ assert_dom_equal expected, date_select("post", "written_on", { :order => [ :month, :year ] }, :disabled => true)
1247
+ end
1248
+
1232
1249
  def test_date_select_within_fields_for
1233
1250
  @post = Post.new
1234
1251
  @post.written_on = Date.new(2004, 6, 15)
@@ -1713,6 +1730,25 @@ class DateHelperTest < ActionView::TestCase
1713
1730
  assert_dom_equal expected, time_select("post", "written_on", :prompt => {:hour => 'Choose hour', :minute => 'Choose minute'})
1714
1731
  end
1715
1732
 
1733
+ def test_time_select_with_disabled_html_option
1734
+ @post = Post.new
1735
+ @post.written_on = Time.local(2004, 6, 15, 15, 16, 35)
1736
+
1737
+ expected = %{<input type="hidden" id="post_written_on_1i" disabled="disabled" name="post[written_on(1i)]" value="2004" />\n}
1738
+ expected << %{<input type="hidden" id="post_written_on_2i" disabled="disabled" name="post[written_on(2i)]" value="6" />\n}
1739
+ expected << %{<input type="hidden" id="post_written_on_3i" disabled="disabled" name="post[written_on(3i)]" value="15" />\n}
1740
+
1741
+ expected << %(<select id="post_written_on_4i" disabled="disabled" name="post[written_on(4i)]">\n)
1742
+ 0.upto(23) { |i| expected << %(<option value="#{sprintf("%02d", i)}"#{' selected="selected"' if i == 15}>#{sprintf("%02d", i)}</option>\n) }
1743
+ expected << "</select>\n"
1744
+ expected << " : "
1745
+ expected << %(<select id="post_written_on_5i" disabled="disabled" name="post[written_on(5i)]">\n)
1746
+ 0.upto(59) { |i| expected << %(<option value="#{sprintf("%02d", i)}"#{' selected="selected"' if i == 16}>#{sprintf("%02d", i)}</option>\n) }
1747
+ expected << "</select>\n"
1748
+
1749
+ assert_dom_equal expected, time_select("post", "written_on", {}, :disabled => true)
1750
+ end
1751
+
1716
1752
  def test_datetime_select
1717
1753
  @post = Post.new
1718
1754
  @post.updated_at = Time.local(2004, 6, 15, 16, 35)
@@ -2173,6 +2209,66 @@ class DateHelperTest < ActionView::TestCase
2173
2209
  assert_dom_equal expected, datetime_select("post", "updated_at", :discard_year => true, :discard_month => true)
2174
2210
  end
2175
2211
 
2212
+ def test_datetime_select_discard_year_and_month_with_disabled_html_option
2213
+ @post = Post.new
2214
+ @post.updated_at = Time.local(2004, 6, 15, 15, 16, 35)
2215
+
2216
+ expected = %{<input type="hidden" id="post_updated_at_1i" disabled="disabled" name="post[updated_at(1i)]" value="2004" />\n}
2217
+ expected << %{<input type="hidden" id="post_updated_at_2i" disabled="disabled" name="post[updated_at(2i)]" value="6" />\n}
2218
+ expected << %{<input type="hidden" id="post_updated_at_3i" disabled="disabled" name="post[updated_at(3i)]" value="15" />\n}
2219
+
2220
+ expected << %{<select id="post_updated_at_4i" disabled="disabled" name="post[updated_at(4i)]">\n}
2221
+ 0.upto(23) { |i| expected << %(<option value="#{sprintf("%02d", i)}"#{' selected="selected"' if i == 15}>#{sprintf("%02d", i)}</option>\n) }
2222
+ expected << "</select>\n"
2223
+ expected << " : "
2224
+ expected << %{<select id="post_updated_at_5i" disabled="disabled" name="post[updated_at(5i)]">\n}
2225
+ 0.upto(59) { |i| expected << %(<option value="#{sprintf("%02d", i)}"#{' selected="selected"' if i == 16}>#{sprintf("%02d", i)}</option>\n) }
2226
+ expected << "</select>\n"
2227
+
2228
+ assert_dom_equal expected, datetime_select("post", "updated_at", { :discard_year => true, :discard_month => true }, :disabled => true)
2229
+ end
2230
+
2231
+ def test_datetime_select_discard_hour
2232
+ @post = Post.new
2233
+ @post.updated_at = Time.local(2004, 6, 15, 15, 16, 35)
2234
+
2235
+ expected = %{<select id="post_updated_at_1i" name="post[updated_at(1i)]">\n}
2236
+ 1999.upto(2009) { |i| expected << %(<option value="#{i}"#{' selected="selected"' if i == 2004}>#{i}</option>\n) }
2237
+ expected << "</select>\n"
2238
+ expected << %{<select id="post_updated_at_2i" name="post[updated_at(2i)]">\n}
2239
+ 1.upto(12) { |i| expected << %(<option value="#{i}"#{' selected="selected"' if i == 6}>#{Date::MONTHNAMES[i]}</option>\n) }
2240
+ expected << "</select>\n"
2241
+ expected << %{<select id="post_updated_at_3i" name="post[updated_at(3i)]">\n}
2242
+ 1.upto(31) { |i| expected << %(<option value="#{i}"#{' selected="selected"' if i == 15}>#{i}</option>\n) }
2243
+ expected << "</select>\n"
2244
+
2245
+ assert_dom_equal expected, datetime_select("post", "updated_at", :discard_hour => true)
2246
+ end
2247
+
2248
+ def test_datetime_select_discard_minute
2249
+ @post = Post.new
2250
+ @post.updated_at = Time.local(2004, 6, 15, 15, 16, 35)
2251
+
2252
+ expected = %{<select id="post_updated_at_1i" name="post[updated_at(1i)]">\n}
2253
+ 1999.upto(2009) { |i| expected << %(<option value="#{i}"#{' selected="selected"' if i == 2004}>#{i}</option>\n) }
2254
+ expected << "</select>\n"
2255
+ expected << %{<select id="post_updated_at_2i" name="post[updated_at(2i)]">\n}
2256
+ 1.upto(12) { |i| expected << %(<option value="#{i}"#{' selected="selected"' if i == 6}>#{Date::MONTHNAMES[i]}</option>\n) }
2257
+ expected << "</select>\n"
2258
+ expected << %{<select id="post_updated_at_3i" name="post[updated_at(3i)]">\n}
2259
+ 1.upto(31) { |i| expected << %(<option value="#{i}"#{' selected="selected"' if i == 15}>#{i}</option>\n) }
2260
+ expected << "</select>\n"
2261
+
2262
+ expected << " &mdash; "
2263
+
2264
+ expected << %{<select id="post_updated_at_4i" name="post[updated_at(4i)]">\n}
2265
+ 0.upto(23) { |i| expected << %(<option value="#{sprintf("%02d", i)}"#{' selected="selected"' if i == 15}>#{sprintf("%02d", i)}</option>\n) }
2266
+ expected << "</select>\n"
2267
+ expected << %{<input type="hidden" id="post_updated_at_5i" name="post[updated_at(5i)]" value="16" />\n}
2268
+
2269
+ assert_dom_equal expected, datetime_select("post", "updated_at", :discard_minute => true)
2270
+ end
2271
+
2176
2272
  def test_datetime_select_invalid_order
2177
2273
  @post = Post.new
2178
2274
  @post.updated_at = Time.local(2004, 6, 15, 15, 16, 35)
@@ -2475,6 +2571,28 @@ class DateHelperTest < ActionView::TestCase
2475
2571
  }, options)
2476
2572
  end
2477
2573
 
2574
+ def test_select_html_safety
2575
+ assert select_day(16).html_safe?
2576
+ assert select_month(8).html_safe?
2577
+ assert select_year(Time.mktime(2003, 8, 16, 8, 4, 18)).html_safe?
2578
+ assert select_minute(Time.mktime(2003, 8, 16, 8, 4, 18)).html_safe?
2579
+ assert select_second(Time.mktime(2003, 8, 16, 8, 4, 18)).html_safe?
2580
+
2581
+ assert select_minute(8, :use_hidden => true).html_safe?
2582
+ assert select_month(8, :prompt => 'Choose month').html_safe?
2583
+
2584
+ assert select_time(Time.mktime(2003, 8, 16, 8, 4, 18), {}, :class => 'selector').html_safe?
2585
+ assert select_date(Time.mktime(2003, 8, 16), :date_separator => " / ", :start_year => 2003, :end_year => 2005, :prefix => "date[first]").html_safe?
2586
+ end
2587
+
2588
+ def test_object_select_html_safety
2589
+ @post = Post.new
2590
+ @post.written_on = Date.new(2004, 6, 15)
2591
+
2592
+ assert date_select("post", "written_on", :default => Time.local(2006, 9, 19, 15, 16, 35), :include_blank => true).html_safe?
2593
+ assert time_select("post", "written_on", :ignore_date => true).html_safe?
2594
+ end
2595
+
2478
2596
  protected
2479
2597
  def with_env_tz(new_tz = 'US/Eastern')
2480
2598
  old_tz, ENV['TZ'] = ENV['TZ'], new_tz