ruby-on-quails 0.1.0

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 (3458) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +13 -0
  3. data/.gitattributes +2 -0
  4. data/.github/issue_template.md +15 -0
  5. data/.github/pull_request_template.md +21 -0
  6. data/.github/stale.yml +28 -0
  7. data/.gitignore +24 -0
  8. data/.rubocop.yml +137 -0
  9. data/.travis.yml +123 -0
  10. data/.yardopts +4 -0
  11. data/CODE_OF_CONDUCT.md +12 -0
  12. data/CONTRIBUTING.md +49 -0
  13. data/Gemfile +168 -0
  14. data/Gemfile.lock +547 -0
  15. data/MIT-LICENSE +20 -0
  16. data/RAILS_VERSION +1 -0
  17. data/README.md +97 -0
  18. data/RELEASING_RAILS.md +225 -0
  19. data/Rakefile +72 -0
  20. data/actioncable/.gitignore +2 -0
  21. data/actioncable/CHANGELOG.md +26 -0
  22. data/actioncable/MIT-LICENSE +20 -0
  23. data/actioncable/README.md +567 -0
  24. data/actioncable/Rakefile +76 -0
  25. data/actioncable/actioncable.gemspec +32 -0
  26. data/actioncable/app/assets/javascripts/action_cable.coffee.erb +38 -0
  27. data/actioncable/app/assets/javascripts/action_cable/connection.coffee +116 -0
  28. data/actioncable/app/assets/javascripts/action_cable/connection_monitor.coffee +95 -0
  29. data/actioncable/app/assets/javascripts/action_cable/consumer.coffee +46 -0
  30. data/actioncable/app/assets/javascripts/action_cable/subscription.coffee +72 -0
  31. data/actioncable/app/assets/javascripts/action_cable/subscriptions.coffee +66 -0
  32. data/actioncable/bin/test +5 -0
  33. data/actioncable/blade.yml +34 -0
  34. data/actioncable/lib/action_cable.rb +54 -0
  35. data/actioncable/lib/action_cable/channel.rb +16 -0
  36. data/actioncable/lib/action_cable/channel/base.rb +305 -0
  37. data/actioncable/lib/action_cable/channel/broadcasting.rb +31 -0
  38. data/actioncable/lib/action_cable/channel/callbacks.rb +37 -0
  39. data/actioncable/lib/action_cable/channel/naming.rb +25 -0
  40. data/actioncable/lib/action_cable/channel/periodic_timers.rb +78 -0
  41. data/actioncable/lib/action_cable/channel/streams.rb +176 -0
  42. data/actioncable/lib/action_cable/connection.rb +21 -0
  43. data/actioncable/lib/action_cable/connection/authorization.rb +15 -0
  44. data/actioncable/lib/action_cable/connection/base.rb +260 -0
  45. data/actioncable/lib/action_cable/connection/client_socket.rb +157 -0
  46. data/actioncable/lib/action_cable/connection/identification.rb +47 -0
  47. data/actioncable/lib/action_cable/connection/internal_channel.rb +45 -0
  48. data/actioncable/lib/action_cable/connection/message_buffer.rb +57 -0
  49. data/actioncable/lib/action_cable/connection/stream.rb +115 -0
  50. data/actioncable/lib/action_cable/connection/stream_event_loop.rb +136 -0
  51. data/actioncable/lib/action_cable/connection/subscriptions.rb +83 -0
  52. data/actioncable/lib/action_cable/connection/tagged_logger_proxy.rb +42 -0
  53. data/actioncable/lib/action_cable/connection/web_socket.rb +43 -0
  54. data/actioncable/lib/action_cable/engine.rb +79 -0
  55. data/actioncable/lib/action_cable/gem_version.rb +17 -0
  56. data/actioncable/lib/action_cable/helpers/action_cable_helper.rb +42 -0
  57. data/actioncable/lib/action_cable/remote_connections.rb +69 -0
  58. data/actioncable/lib/action_cable/server.rb +17 -0
  59. data/actioncable/lib/action_cable/server/base.rb +89 -0
  60. data/actioncable/lib/action_cable/server/broadcasting.rb +54 -0
  61. data/actioncable/lib/action_cable/server/configuration.rb +43 -0
  62. data/actioncable/lib/action_cable/server/connections.rb +36 -0
  63. data/actioncable/lib/action_cable/server/worker.rb +77 -0
  64. data/actioncable/lib/action_cable/server/worker/active_record_connection_management.rb +21 -0
  65. data/actioncable/lib/action_cable/subscription_adapter.rb +11 -0
  66. data/actioncable/lib/action_cable/subscription_adapter/async.rb +29 -0
  67. data/actioncable/lib/action_cable/subscription_adapter/base.rb +30 -0
  68. data/actioncable/lib/action_cable/subscription_adapter/channel_prefix.rb +28 -0
  69. data/actioncable/lib/action_cable/subscription_adapter/evented_redis.rb +89 -0
  70. data/actioncable/lib/action_cable/subscription_adapter/inline.rb +37 -0
  71. data/actioncable/lib/action_cable/subscription_adapter/postgresql.rb +114 -0
  72. data/actioncable/lib/action_cable/subscription_adapter/redis.rb +178 -0
  73. data/actioncable/lib/action_cable/subscription_adapter/subscriber_map.rb +59 -0
  74. data/actioncable/lib/action_cable/version.rb +10 -0
  75. data/actioncable/lib/rails/generators/channel/USAGE +14 -0
  76. data/actioncable/lib/rails/generators/channel/channel_generator.rb +49 -0
  77. data/actioncable/lib/rails/generators/channel/templates/application_cable/channel.rb +4 -0
  78. data/actioncable/lib/rails/generators/channel/templates/application_cable/connection.rb +4 -0
  79. data/actioncable/lib/rails/generators/channel/templates/assets/cable.js +13 -0
  80. data/actioncable/lib/rails/generators/channel/templates/assets/channel.coffee +14 -0
  81. data/actioncable/lib/rails/generators/channel/templates/assets/channel.js +18 -0
  82. data/actioncable/lib/rails/generators/channel/templates/channel.rb +16 -0
  83. data/actioncable/package.json +24 -0
  84. data/actioncable/test/channel/base_test.rb +272 -0
  85. data/actioncable/test/channel/broadcasting_test.rb +31 -0
  86. data/actioncable/test/channel/naming_test.rb +12 -0
  87. data/actioncable/test/channel/periodic_timers_test.rb +74 -0
  88. data/actioncable/test/channel/rejection_test.rb +43 -0
  89. data/actioncable/test/channel/stream_test.rb +208 -0
  90. data/actioncable/test/client_test.rb +313 -0
  91. data/actioncable/test/connection/authorization_test.rb +33 -0
  92. data/actioncable/test/connection/base_test.rb +141 -0
  93. data/actioncable/test/connection/client_socket_test.rb +84 -0
  94. data/actioncable/test/connection/cross_site_forgery_test.rb +92 -0
  95. data/actioncable/test/connection/identifier_test.rb +77 -0
  96. data/actioncable/test/connection/multiple_identifiers_test.rb +39 -0
  97. data/actioncable/test/connection/stream_test.rb +66 -0
  98. data/actioncable/test/connection/string_identifier_test.rb +41 -0
  99. data/actioncable/test/connection/subscriptions_test.rb +116 -0
  100. data/actioncable/test/javascript/src/test.coffee +3 -0
  101. data/actioncable/test/javascript/src/test_helpers/consumer_test_helper.coffee +47 -0
  102. data/actioncable/test/javascript/src/test_helpers/index.coffee +11 -0
  103. data/actioncable/test/javascript/src/unit/action_cable_test.coffee +41 -0
  104. data/actioncable/test/javascript/src/unit/consumer_test.coffee +14 -0
  105. data/actioncable/test/javascript/src/unit/subscription_test.coffee +40 -0
  106. data/actioncable/test/javascript/src/unit/subscriptions_test.coffee +25 -0
  107. data/actioncable/test/javascript/vendor/mock-socket.js +4533 -0
  108. data/actioncable/test/server/base_test.rb +35 -0
  109. data/actioncable/test/server/broadcasting_test.rb +62 -0
  110. data/actioncable/test/stubs/global_id.rb +10 -0
  111. data/actioncable/test/stubs/room.rb +18 -0
  112. data/actioncable/test/stubs/test_adapter.rb +12 -0
  113. data/actioncable/test/stubs/test_connection.rb +35 -0
  114. data/actioncable/test/stubs/test_server.rb +32 -0
  115. data/actioncable/test/stubs/user.rb +17 -0
  116. data/actioncable/test/subscription_adapter/async_test.rb +19 -0
  117. data/actioncable/test/subscription_adapter/base_test.rb +65 -0
  118. data/actioncable/test/subscription_adapter/channel_prefix.rb +38 -0
  119. data/actioncable/test/subscription_adapter/common.rb +131 -0
  120. data/actioncable/test/subscription_adapter/evented_redis_test.rb +61 -0
  121. data/actioncable/test/subscription_adapter/inline_test.rb +19 -0
  122. data/actioncable/test/subscription_adapter/postgresql_test.rb +42 -0
  123. data/actioncable/test/subscription_adapter/redis_test.rb +28 -0
  124. data/actioncable/test/subscription_adapter/subscriber_map_test.rb +19 -0
  125. data/actioncable/test/test_helper.rb +37 -0
  126. data/actioncable/test/worker_test.rb +46 -0
  127. data/actionmailer/CHANGELOG.md +12 -0
  128. data/actionmailer/MIT-LICENSE +21 -0
  129. data/actionmailer/README.rdoc +175 -0
  130. data/actionmailer/Rakefile +25 -0
  131. data/actionmailer/actionmailer.gemspec +35 -0
  132. data/actionmailer/bin/test +5 -0
  133. data/actionmailer/lib/action_mailer.rb +62 -0
  134. data/actionmailer/lib/action_mailer/base.rb +981 -0
  135. data/actionmailer/lib/action_mailer/collector.rb +32 -0
  136. data/actionmailer/lib/action_mailer/delivery_job.rb +36 -0
  137. data/actionmailer/lib/action_mailer/delivery_methods.rb +82 -0
  138. data/actionmailer/lib/action_mailer/gem_version.rb +17 -0
  139. data/actionmailer/lib/action_mailer/inline_preview_interceptor.rb +59 -0
  140. data/actionmailer/lib/action_mailer/log_subscriber.rb +41 -0
  141. data/actionmailer/lib/action_mailer/mail_helper.rb +72 -0
  142. data/actionmailer/lib/action_mailer/message_delivery.rb +144 -0
  143. data/actionmailer/lib/action_mailer/parameterized.rb +154 -0
  144. data/actionmailer/lib/action_mailer/preview.rb +126 -0
  145. data/actionmailer/lib/action_mailer/railtie.rb +82 -0
  146. data/actionmailer/lib/action_mailer/rescuable.rb +29 -0
  147. data/actionmailer/lib/action_mailer/test_case.rb +123 -0
  148. data/actionmailer/lib/action_mailer/test_helper.rb +115 -0
  149. data/actionmailer/lib/action_mailer/version.rb +11 -0
  150. data/actionmailer/lib/rails/generators/mailer/USAGE +17 -0
  151. data/actionmailer/lib/rails/generators/mailer/mailer_generator.rb +38 -0
  152. data/actionmailer/lib/rails/generators/mailer/templates/application_mailer.rb +6 -0
  153. data/actionmailer/lib/rails/generators/mailer/templates/mailer.rb +17 -0
  154. data/actionmailer/test/abstract_unit.rb +47 -0
  155. data/actionmailer/test/assert_select_email_test.rb +49 -0
  156. data/actionmailer/test/asset_host_test.rb +39 -0
  157. data/actionmailer/test/base_test.rb +987 -0
  158. data/actionmailer/test/caching_test.rb +271 -0
  159. data/actionmailer/test/delivery_methods_test.rb +248 -0
  160. data/actionmailer/test/fixtures/anonymous/welcome.erb +1 -0
  161. data/actionmailer/test/fixtures/another.path/base_mailer/welcome.erb +1 -0
  162. data/actionmailer/test/fixtures/asset_host_mailer/email_with_asset.html.erb +1 -0
  163. data/actionmailer/test/fixtures/asset_mailer/welcome.html.erb +1 -0
  164. data/actionmailer/test/fixtures/attachments/foo.jpg +0 -0
  165. data/actionmailer/test/fixtures/attachments/test.jpg +0 -0
  166. data/actionmailer/test/fixtures/auto_layout_mailer/hello.html.erb +1 -0
  167. data/actionmailer/test/fixtures/auto_layout_mailer/multipart.html.erb +1 -0
  168. data/actionmailer/test/fixtures/auto_layout_mailer/multipart.text.erb +1 -0
  169. data/actionmailer/test/fixtures/base_mailer/attachment_with_content.erb +1 -0
  170. data/actionmailer/test/fixtures/base_mailer/attachment_with_hash.html.erb +0 -0
  171. data/actionmailer/test/fixtures/base_mailer/attachment_with_hash_default_encoding.html.erb +0 -0
  172. data/actionmailer/test/fixtures/base_mailer/different_layout.html.erb +1 -0
  173. data/actionmailer/test/fixtures/base_mailer/different_layout.text.erb +1 -0
  174. data/actionmailer/test/fixtures/base_mailer/email_with_translations.html.erb +1 -0
  175. data/actionmailer/test/fixtures/base_mailer/explicit_multipart_templates.html.erb +1 -0
  176. data/actionmailer/test/fixtures/base_mailer/explicit_multipart_templates.text.erb +1 -0
  177. data/actionmailer/test/fixtures/base_mailer/explicit_multipart_with_one_template.erb +1 -0
  178. data/actionmailer/test/fixtures/base_mailer/html_only.html.erb +1 -0
  179. data/actionmailer/test/fixtures/base_mailer/implicit_multipart.html.erb +1 -0
  180. data/actionmailer/test/fixtures/base_mailer/implicit_multipart.text.erb +1 -0
  181. data/actionmailer/test/fixtures/base_mailer/implicit_with_locale.de-AT.text.erb +1 -0
  182. data/actionmailer/test/fixtures/base_mailer/implicit_with_locale.de.html.erb +1 -0
  183. data/actionmailer/test/fixtures/base_mailer/implicit_with_locale.en.html.erb +1 -0
  184. data/actionmailer/test/fixtures/base_mailer/implicit_with_locale.html.erb +1 -0
  185. data/actionmailer/test/fixtures/base_mailer/implicit_with_locale.pl.text.erb +1 -0
  186. data/actionmailer/test/fixtures/base_mailer/implicit_with_locale.text.erb +1 -0
  187. data/actionmailer/test/fixtures/base_mailer/inline_attachment.html.erb +5 -0
  188. data/actionmailer/test/fixtures/base_mailer/inline_attachment.text.erb +4 -0
  189. data/actionmailer/test/fixtures/base_mailer/plain_text_only.text.erb +1 -0
  190. data/actionmailer/test/fixtures/base_mailer/welcome.erb +1 -0
  191. data/actionmailer/test/fixtures/base_mailer/welcome_with_headers.html.erb +0 -0
  192. data/actionmailer/test/fixtures/base_mailer/without_mail_call.erb +1 -0
  193. data/actionmailer/test/fixtures/base_test/after_action_mailer/welcome.html.erb +0 -0
  194. data/actionmailer/test/fixtures/base_test/before_action_mailer/welcome.html.erb +0 -0
  195. data/actionmailer/test/fixtures/base_test/default_inline_attachment_mailer/welcome.html.erb +0 -0
  196. data/actionmailer/test/fixtures/base_test/late_inline_attachment_mailer/on_render.erb +7 -0
  197. data/actionmailer/test/fixtures/caching_mailer/_partial.html.erb +3 -0
  198. data/actionmailer/test/fixtures/caching_mailer/fragment_cache.html.erb +3 -0
  199. data/actionmailer/test/fixtures/caching_mailer/fragment_cache_in_partials.html.erb +1 -0
  200. data/actionmailer/test/fixtures/caching_mailer/fragment_caching_options.html.erb +3 -0
  201. data/actionmailer/test/fixtures/caching_mailer/multipart_cache.html.erb +3 -0
  202. data/actionmailer/test/fixtures/caching_mailer/multipart_cache.text.erb +3 -0
  203. data/actionmailer/test/fixtures/caching_mailer/skip_fragment_cache_digesting.html.erb +3 -0
  204. data/actionmailer/test/fixtures/explicit_layout_mailer/logout.html.erb +1 -0
  205. data/actionmailer/test/fixtures/explicit_layout_mailer/signup.html.erb +1 -0
  206. data/actionmailer/test/fixtures/i18n_test_mailer/mail_with_i18n_subject.erb +4 -0
  207. data/actionmailer/test/fixtures/layouts/auto_layout_mailer.html.erb +1 -0
  208. data/actionmailer/test/fixtures/layouts/auto_layout_mailer.text.erb +1 -0
  209. data/actionmailer/test/fixtures/layouts/different_layout.html.erb +1 -0
  210. data/actionmailer/test/fixtures/layouts/different_layout.text.erb +1 -0
  211. data/actionmailer/test/fixtures/layouts/spam.html.erb +1 -0
  212. data/actionmailer/test/fixtures/mail_delivery_test/delivery_mailer/welcome.html.erb +0 -0
  213. data/actionmailer/test/fixtures/nested_layout_mailer/signup.html.erb +1 -0
  214. data/actionmailer/test/fixtures/proc_mailer/welcome.html.erb +0 -0
  215. data/actionmailer/test/fixtures/raw_email +14 -0
  216. data/actionmailer/test/fixtures/templates/signed_up.erb +3 -0
  217. data/actionmailer/test/fixtures/test_helper_mailer/welcome +1 -0
  218. data/actionmailer/test/fixtures/url_test_mailer/exercise_url_for.erb +1 -0
  219. data/actionmailer/test/fixtures/url_test_mailer/signed_up_with_url.erb +5 -0
  220. data/actionmailer/test/i18n_with_controller_test.rb +77 -0
  221. data/actionmailer/test/log_subscriber_test.rb +49 -0
  222. data/actionmailer/test/mail_helper_test.rb +125 -0
  223. data/actionmailer/test/mail_layout_test.rb +97 -0
  224. data/actionmailer/test/mailers/asset_mailer.rb +9 -0
  225. data/actionmailer/test/mailers/base_mailer.rb +138 -0
  226. data/actionmailer/test/mailers/caching_mailer.rb +25 -0
  227. data/actionmailer/test/mailers/delayed_mailer.rb +28 -0
  228. data/actionmailer/test/mailers/params_mailer.rb +13 -0
  229. data/actionmailer/test/mailers/proc_mailer.rb +18 -0
  230. data/actionmailer/test/message_delivery_test.rb +167 -0
  231. data/actionmailer/test/parameterized_test.rb +56 -0
  232. data/actionmailer/test/test_case_test.rb +68 -0
  233. data/actionmailer/test/test_helper_test.rb +223 -0
  234. data/actionmailer/test/url_test.rb +144 -0
  235. data/actionpack/CHANGELOG.md +75 -0
  236. data/actionpack/MIT-LICENSE +21 -0
  237. data/actionpack/README.rdoc +57 -0
  238. data/actionpack/Rakefile +40 -0
  239. data/actionpack/actionpack.gemspec +38 -0
  240. data/actionpack/bin/test +5 -0
  241. data/actionpack/lib/abstract_controller.rb +26 -0
  242. data/actionpack/lib/abstract_controller/asset_paths.rb +12 -0
  243. data/actionpack/lib/abstract_controller/base.rb +267 -0
  244. data/actionpack/lib/abstract_controller/caching.rb +66 -0
  245. data/actionpack/lib/abstract_controller/caching/fragments.rb +166 -0
  246. data/actionpack/lib/abstract_controller/callbacks.rb +212 -0
  247. data/actionpack/lib/abstract_controller/collector.rb +43 -0
  248. data/actionpack/lib/abstract_controller/error.rb +6 -0
  249. data/actionpack/lib/abstract_controller/helpers.rb +194 -0
  250. data/actionpack/lib/abstract_controller/logger.rb +14 -0
  251. data/actionpack/lib/abstract_controller/railties/routes_helpers.rb +20 -0
  252. data/actionpack/lib/abstract_controller/rendering.rb +136 -0
  253. data/actionpack/lib/abstract_controller/translation.rb +31 -0
  254. data/actionpack/lib/abstract_controller/url_for.rb +35 -0
  255. data/actionpack/lib/action_controller.rb +65 -0
  256. data/actionpack/lib/action_controller/api.rb +149 -0
  257. data/actionpack/lib/action_controller/api/api_rendering.rb +16 -0
  258. data/actionpack/lib/action_controller/base.rb +275 -0
  259. data/actionpack/lib/action_controller/caching.rb +46 -0
  260. data/actionpack/lib/action_controller/form_builder.rb +50 -0
  261. data/actionpack/lib/action_controller/log_subscriber.rb +78 -0
  262. data/actionpack/lib/action_controller/metal.rb +258 -0
  263. data/actionpack/lib/action_controller/metal/basic_implicit_render.rb +13 -0
  264. data/actionpack/lib/action_controller/metal/conditional_get.rb +274 -0
  265. data/actionpack/lib/action_controller/metal/cookies.rb +16 -0
  266. data/actionpack/lib/action_controller/metal/data_streaming.rb +152 -0
  267. data/actionpack/lib/action_controller/metal/etag_with_flash.rb +18 -0
  268. data/actionpack/lib/action_controller/metal/etag_with_template_digest.rb +57 -0
  269. data/actionpack/lib/action_controller/metal/exceptions.rb +56 -0
  270. data/actionpack/lib/action_controller/metal/flash.rb +61 -0
  271. data/actionpack/lib/action_controller/metal/force_ssl.rb +99 -0
  272. data/actionpack/lib/action_controller/metal/head.rb +60 -0
  273. data/actionpack/lib/action_controller/metal/helpers.rb +123 -0
  274. data/actionpack/lib/action_controller/metal/http_authentication.rb +522 -0
  275. data/actionpack/lib/action_controller/metal/implicit_render.rb +73 -0
  276. data/actionpack/lib/action_controller/metal/instrumentation.rb +111 -0
  277. data/actionpack/lib/action_controller/metal/live.rb +312 -0
  278. data/actionpack/lib/action_controller/metal/mime_responds.rb +313 -0
  279. data/actionpack/lib/action_controller/metal/parameter_encoding.rb +51 -0
  280. data/actionpack/lib/action_controller/metal/params_wrapper.rb +285 -0
  281. data/actionpack/lib/action_controller/metal/redirecting.rb +124 -0
  282. data/actionpack/lib/action_controller/metal/renderers.rb +181 -0
  283. data/actionpack/lib/action_controller/metal/rendering.rb +124 -0
  284. data/actionpack/lib/action_controller/metal/request_forgery_protection.rb +433 -0
  285. data/actionpack/lib/action_controller/metal/rescue.rb +28 -0
  286. data/actionpack/lib/action_controller/metal/streaming.rb +223 -0
  287. data/actionpack/lib/action_controller/metal/strong_parameters.rb +1085 -0
  288. data/actionpack/lib/action_controller/metal/testing.rb +22 -0
  289. data/actionpack/lib/action_controller/metal/url_for.rb +58 -0
  290. data/actionpack/lib/action_controller/railtie.rb +89 -0
  291. data/actionpack/lib/action_controller/railties/helpers.rb +24 -0
  292. data/actionpack/lib/action_controller/renderer.rb +117 -0
  293. data/actionpack/lib/action_controller/template_assertions.rb +11 -0
  294. data/actionpack/lib/action_controller/test_case.rb +626 -0
  295. data/actionpack/lib/action_dispatch.rb +111 -0
  296. data/actionpack/lib/action_dispatch/http/cache.rb +216 -0
  297. data/actionpack/lib/action_dispatch/http/filter_parameters.rb +84 -0
  298. data/actionpack/lib/action_dispatch/http/filter_redirect.rb +37 -0
  299. data/actionpack/lib/action_dispatch/http/headers.rb +132 -0
  300. data/actionpack/lib/action_dispatch/http/mime_negotiation.rb +173 -0
  301. data/actionpack/lib/action_dispatch/http/mime_type.rb +342 -0
  302. data/actionpack/lib/action_dispatch/http/mime_types.rb +37 -0
  303. data/actionpack/lib/action_dispatch/http/parameter_filter.rb +86 -0
  304. data/actionpack/lib/action_dispatch/http/parameters.rb +131 -0
  305. data/actionpack/lib/action_dispatch/http/rack_cache.rb +63 -0
  306. data/actionpack/lib/action_dispatch/http/request.rb +412 -0
  307. data/actionpack/lib/action_dispatch/http/response.rb +519 -0
  308. data/actionpack/lib/action_dispatch/http/upload.rb +84 -0
  309. data/actionpack/lib/action_dispatch/http/url.rb +350 -0
  310. data/actionpack/lib/action_dispatch/journey.rb +7 -0
  311. data/actionpack/lib/action_dispatch/journey/formatter.rb +189 -0
  312. data/actionpack/lib/action_dispatch/journey/gtg/builder.rb +164 -0
  313. data/actionpack/lib/action_dispatch/journey/gtg/simulator.rb +41 -0
  314. data/actionpack/lib/action_dispatch/journey/gtg/transition_table.rb +158 -0
  315. data/actionpack/lib/action_dispatch/journey/nfa/builder.rb +78 -0
  316. data/actionpack/lib/action_dispatch/journey/nfa/dot.rb +36 -0
  317. data/actionpack/lib/action_dispatch/journey/nfa/simulator.rb +49 -0
  318. data/actionpack/lib/action_dispatch/journey/nfa/transition_table.rb +120 -0
  319. data/actionpack/lib/action_dispatch/journey/nodes/node.rb +140 -0
  320. data/actionpack/lib/action_dispatch/journey/parser.rb +199 -0
  321. data/actionpack/lib/action_dispatch/journey/parser.y +50 -0
  322. data/actionpack/lib/action_dispatch/journey/parser_extras.rb +31 -0
  323. data/actionpack/lib/action_dispatch/journey/path/pattern.rb +198 -0
  324. data/actionpack/lib/action_dispatch/journey/route.rb +203 -0
  325. data/actionpack/lib/action_dispatch/journey/router.rb +156 -0
  326. data/actionpack/lib/action_dispatch/journey/router/utils.rb +102 -0
  327. data/actionpack/lib/action_dispatch/journey/routes.rb +81 -0
  328. data/actionpack/lib/action_dispatch/journey/scanner.rb +64 -0
  329. data/actionpack/lib/action_dispatch/journey/visitors.rb +268 -0
  330. data/actionpack/lib/action_dispatch/journey/visualizer/fsm.css +30 -0
  331. data/actionpack/lib/action_dispatch/journey/visualizer/fsm.js +134 -0
  332. data/actionpack/lib/action_dispatch/journey/visualizer/index.html.erb +52 -0
  333. data/actionpack/lib/action_dispatch/middleware/callbacks.rb +36 -0
  334. data/actionpack/lib/action_dispatch/middleware/cookies.rb +686 -0
  335. data/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb +205 -0
  336. data/actionpack/lib/action_dispatch/middleware/debug_locks.rb +124 -0
  337. data/actionpack/lib/action_dispatch/middleware/exception_wrapper.rb +146 -0
  338. data/actionpack/lib/action_dispatch/middleware/executor.rb +21 -0
  339. data/actionpack/lib/action_dispatch/middleware/flash.rb +300 -0
  340. data/actionpack/lib/action_dispatch/middleware/public_exceptions.rb +57 -0
  341. data/actionpack/lib/action_dispatch/middleware/reloader.rb +12 -0
  342. data/actionpack/lib/action_dispatch/middleware/remote_ip.rb +183 -0
  343. data/actionpack/lib/action_dispatch/middleware/request_id.rb +43 -0
  344. data/actionpack/lib/action_dispatch/middleware/session/abstract_store.rb +92 -0
  345. data/actionpack/lib/action_dispatch/middleware/session/cache_store.rb +54 -0
  346. data/actionpack/lib/action_dispatch/middleware/session/cookie_store.rb +131 -0
  347. data/actionpack/lib/action_dispatch/middleware/session/mem_cache_store.rb +28 -0
  348. data/actionpack/lib/action_dispatch/middleware/show_exceptions.rb +62 -0
  349. data/actionpack/lib/action_dispatch/middleware/ssl.rb +144 -0
  350. data/actionpack/lib/action_dispatch/middleware/stack.rb +116 -0
  351. data/actionpack/lib/action_dispatch/middleware/static.rb +130 -0
  352. data/actionpack/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb +22 -0
  353. data/actionpack/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb +23 -0
  354. data/actionpack/lib/action_dispatch/middleware/templates/rescues/_source.html.erb +27 -0
  355. data/actionpack/lib/action_dispatch/middleware/templates/rescues/_source.text.erb +8 -0
  356. data/actionpack/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb +52 -0
  357. data/actionpack/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb +9 -0
  358. data/actionpack/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +16 -0
  359. data/actionpack/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb +9 -0
  360. data/actionpack/lib/action_dispatch/middleware/templates/rescues/layout.erb +160 -0
  361. data/actionpack/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +11 -0
  362. data/actionpack/lib/action_dispatch/middleware/templates/rescues/missing_template.text.erb +3 -0
  363. data/actionpack/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +32 -0
  364. data/actionpack/lib/action_dispatch/middleware/templates/rescues/routing_error.text.erb +11 -0
  365. data/actionpack/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +20 -0
  366. data/actionpack/lib/action_dispatch/middleware/templates/rescues/template_error.text.erb +7 -0
  367. data/actionpack/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +6 -0
  368. data/actionpack/lib/action_dispatch/middleware/templates/rescues/unknown_action.text.erb +3 -0
  369. data/actionpack/lib/action_dispatch/middleware/templates/routes/_route.html.erb +16 -0
  370. data/actionpack/lib/action_dispatch/middleware/templates/routes/_table.html.erb +200 -0
  371. data/actionpack/lib/action_dispatch/railtie.rb +50 -0
  372. data/actionpack/lib/action_dispatch/request/session.rb +233 -0
  373. data/actionpack/lib/action_dispatch/request/utils.rb +76 -0
  374. data/actionpack/lib/action_dispatch/routing.rb +260 -0
  375. data/actionpack/lib/action_dispatch/routing/endpoint.rb +12 -0
  376. data/actionpack/lib/action_dispatch/routing/inspector.rb +225 -0
  377. data/actionpack/lib/action_dispatch/routing/mapper.rb +2256 -0
  378. data/actionpack/lib/action_dispatch/routing/polymorphic_routes.rb +352 -0
  379. data/actionpack/lib/action_dispatch/routing/redirection.rb +201 -0
  380. data/actionpack/lib/action_dispatch/routing/route_set.rb +870 -0
  381. data/actionpack/lib/action_dispatch/routing/routes_proxy.rb +69 -0
  382. data/actionpack/lib/action_dispatch/routing/url_for.rb +218 -0
  383. data/actionpack/lib/action_dispatch/system_test_case.rb +133 -0
  384. data/actionpack/lib/action_dispatch/system_testing/driver.rb +55 -0
  385. data/actionpack/lib/action_dispatch/system_testing/server.rb +45 -0
  386. data/actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +100 -0
  387. data/actionpack/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb +27 -0
  388. data/actionpack/lib/action_dispatch/system_testing/test_helpers/undef_methods.rb +26 -0
  389. data/actionpack/lib/action_dispatch/testing/assertion_response.rb +47 -0
  390. data/actionpack/lib/action_dispatch/testing/assertions.rb +24 -0
  391. data/actionpack/lib/action_dispatch/testing/assertions/response.rb +107 -0
  392. data/actionpack/lib/action_dispatch/testing/assertions/routing.rb +222 -0
  393. data/actionpack/lib/action_dispatch/testing/integration.rb +652 -0
  394. data/actionpack/lib/action_dispatch/testing/request_encoder.rb +55 -0
  395. data/actionpack/lib/action_dispatch/testing/test_process.rb +50 -0
  396. data/actionpack/lib/action_dispatch/testing/test_request.rb +71 -0
  397. data/actionpack/lib/action_dispatch/testing/test_response.rb +53 -0
  398. data/actionpack/lib/action_pack.rb +26 -0
  399. data/actionpack/lib/action_pack/gem_version.rb +17 -0
  400. data/actionpack/lib/action_pack/version.rb +10 -0
  401. data/actionpack/test/abstract/callbacks_test.rb +270 -0
  402. data/actionpack/test/abstract/collector_test.rb +65 -0
  403. data/actionpack/test/abstract/translation_test.rb +79 -0
  404. data/actionpack/test/abstract_unit.rb +451 -0
  405. data/actionpack/test/assertions/response_assertions_test.rb +141 -0
  406. data/actionpack/test/controller/action_pack_assertions_test.rb +493 -0
  407. data/actionpack/test/controller/api/conditional_get_test.rb +59 -0
  408. data/actionpack/test/controller/api/data_streaming_test.rb +28 -0
  409. data/actionpack/test/controller/api/force_ssl_test.rb +22 -0
  410. data/actionpack/test/controller/api/implicit_render_test.rb +17 -0
  411. data/actionpack/test/controller/api/params_wrapper_test.rb +28 -0
  412. data/actionpack/test/controller/api/redirect_to_test.rb +21 -0
  413. data/actionpack/test/controller/api/renderers_test.rb +50 -0
  414. data/actionpack/test/controller/api/url_for_test.rb +22 -0
  415. data/actionpack/test/controller/api/with_cookies_test.rb +23 -0
  416. data/actionpack/test/controller/api/with_helpers_test.rb +44 -0
  417. data/actionpack/test/controller/base_test.rb +323 -0
  418. data/actionpack/test/controller/caching_test.rb +503 -0
  419. data/actionpack/test/controller/content_type_test.rb +169 -0
  420. data/actionpack/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
  421. data/actionpack/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
  422. data/actionpack/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
  423. data/actionpack/test/controller/default_url_options_with_before_action_test.rb +28 -0
  424. data/actionpack/test/controller/filters_test.rb +1050 -0
  425. data/actionpack/test/controller/flash_hash_test.rb +216 -0
  426. data/actionpack/test/controller/flash_test.rb +371 -0
  427. data/actionpack/test/controller/force_ssl_test.rb +333 -0
  428. data/actionpack/test/controller/form_builder_test.rb +19 -0
  429. data/actionpack/test/controller/helper_test.rb +295 -0
  430. data/actionpack/test/controller/http_basic_authentication_test.rb +179 -0
  431. data/actionpack/test/controller/http_digest_authentication_test.rb +282 -0
  432. data/actionpack/test/controller/http_token_authentication_test.rb +216 -0
  433. data/actionpack/test/controller/integration_test.rb +1122 -0
  434. data/actionpack/test/controller/live_stream_test.rb +518 -0
  435. data/actionpack/test/controller/localized_templates_test.rb +48 -0
  436. data/actionpack/test/controller/log_subscriber_test.rb +371 -0
  437. data/actionpack/test/controller/metal/renderers_test.rb +50 -0
  438. data/actionpack/test/controller/metal_test.rb +32 -0
  439. data/actionpack/test/controller/mime/accept_format_test.rb +94 -0
  440. data/actionpack/test/controller/mime/respond_to_test.rb +843 -0
  441. data/actionpack/test/controller/new_base/bare_metal_test.rb +184 -0
  442. data/actionpack/test/controller/new_base/base_test.rb +134 -0
  443. data/actionpack/test/controller/new_base/content_negotiation_test.rb +28 -0
  444. data/actionpack/test/controller/new_base/content_type_test.rb +116 -0
  445. data/actionpack/test/controller/new_base/middleware_test.rb +112 -0
  446. data/actionpack/test/controller/new_base/render_action_test.rb +314 -0
  447. data/actionpack/test/controller/new_base/render_body_test.rb +172 -0
  448. data/actionpack/test/controller/new_base/render_context_test.rb +54 -0
  449. data/actionpack/test/controller/new_base/render_file_test.rb +72 -0
  450. data/actionpack/test/controller/new_base/render_html_test.rb +192 -0
  451. data/actionpack/test/controller/new_base/render_implicit_action_test.rb +59 -0
  452. data/actionpack/test/controller/new_base/render_layout_test.rb +128 -0
  453. data/actionpack/test/controller/new_base/render_partial_test.rb +62 -0
  454. data/actionpack/test/controller/new_base/render_plain_test.rb +170 -0
  455. data/actionpack/test/controller/new_base/render_streaming_test.rb +116 -0
  456. data/actionpack/test/controller/new_base/render_template_test.rb +240 -0
  457. data/actionpack/test/controller/new_base/render_test.rb +142 -0
  458. data/actionpack/test/controller/new_base/render_xml_test.rb +12 -0
  459. data/actionpack/test/controller/output_escaping_test.rb +17 -0
  460. data/actionpack/test/controller/parameter_encoding_test.rb +52 -0
  461. data/actionpack/test/controller/parameters/accessors_test.rb +279 -0
  462. data/actionpack/test/controller/parameters/always_permitted_parameters_test.rb +30 -0
  463. data/actionpack/test/controller/parameters/dup_test.rb +67 -0
  464. data/actionpack/test/controller/parameters/log_on_unpermitted_params_test.rb +70 -0
  465. data/actionpack/test/controller/parameters/multi_parameter_attributes_test.rb +39 -0
  466. data/actionpack/test/controller/parameters/mutators_test.rb +122 -0
  467. data/actionpack/test/controller/parameters/nested_parameters_permit_test.rb +184 -0
  468. data/actionpack/test/controller/parameters/parameters_permit_test.rb +513 -0
  469. data/actionpack/test/controller/parameters/raise_on_unpermitted_params_test.rb +33 -0
  470. data/actionpack/test/controller/parameters/serialization_test.rb +55 -0
  471. data/actionpack/test/controller/params_wrapper_test.rb +408 -0
  472. data/actionpack/test/controller/permitted_params_test.rb +27 -0
  473. data/actionpack/test/controller/redirect_test.rb +358 -0
  474. data/actionpack/test/controller/render_js_test.rb +36 -0
  475. data/actionpack/test/controller/render_json_test.rb +137 -0
  476. data/actionpack/test/controller/render_test.rb +810 -0
  477. data/actionpack/test/controller/render_xml_test.rb +102 -0
  478. data/actionpack/test/controller/renderer_test.rb +136 -0
  479. data/actionpack/test/controller/renderers_test.rb +91 -0
  480. data/actionpack/test/controller/request/test_request_test.rb +42 -0
  481. data/actionpack/test/controller/request_forgery_protection_test.rb +998 -0
  482. data/actionpack/test/controller/required_params_test.rb +100 -0
  483. data/actionpack/test/controller/rescue_test.rb +364 -0
  484. data/actionpack/test/controller/resources_test.rb +1369 -0
  485. data/actionpack/test/controller/routing_test.rb +2108 -0
  486. data/actionpack/test/controller/runner_test.rb +24 -0
  487. data/actionpack/test/controller/send_file_test.rb +259 -0
  488. data/actionpack/test/controller/show_exceptions_test.rb +114 -0
  489. data/actionpack/test/controller/streaming_test.rb +28 -0
  490. data/actionpack/test/controller/test_case_test.rb +1120 -0
  491. data/actionpack/test/controller/url_for_integration_test.rb +193 -0
  492. data/actionpack/test/controller/url_for_test.rb +519 -0
  493. data/actionpack/test/controller/url_rewriter_test.rb +92 -0
  494. data/actionpack/test/controller/webservice_test.rb +135 -0
  495. data/actionpack/test/dispatch/callbacks_test.rb +47 -0
  496. data/actionpack/test/dispatch/cookies_test.rb +1288 -0
  497. data/actionpack/test/dispatch/debug_exceptions_test.rb +502 -0
  498. data/actionpack/test/dispatch/debug_locks_test.rb +38 -0
  499. data/actionpack/test/dispatch/exception_wrapper_test.rb +120 -0
  500. data/actionpack/test/dispatch/executor_test.rb +136 -0
  501. data/actionpack/test/dispatch/header_test.rb +169 -0
  502. data/actionpack/test/dispatch/live_response_test.rb +98 -0
  503. data/actionpack/test/dispatch/mapper_test.rb +210 -0
  504. data/actionpack/test/dispatch/middleware_stack_test.rb +115 -0
  505. data/actionpack/test/dispatch/mime_type_test.rb +187 -0
  506. data/actionpack/test/dispatch/mount_test.rb +95 -0
  507. data/actionpack/test/dispatch/prefix_generation_test.rb +463 -0
  508. data/actionpack/test/dispatch/rack_cache_test.rb +23 -0
  509. data/actionpack/test/dispatch/reloader_test.rb +167 -0
  510. data/actionpack/test/dispatch/request/json_params_parsing_test.rb +207 -0
  511. data/actionpack/test/dispatch/request/multipart_params_parsing_test.rb +202 -0
  512. data/actionpack/test/dispatch/request/query_string_parsing_test.rb +176 -0
  513. data/actionpack/test/dispatch/request/session_test.rb +164 -0
  514. data/actionpack/test/dispatch/request/url_encoded_params_parsing_test.rb +181 -0
  515. data/actionpack/test/dispatch/request_id_test.rb +70 -0
  516. data/actionpack/test/dispatch/request_test.rb +1306 -0
  517. data/actionpack/test/dispatch/response_test.rb +536 -0
  518. data/actionpack/test/dispatch/routing/concerns_test.rb +124 -0
  519. data/actionpack/test/dispatch/routing/custom_url_helpers_test.rb +333 -0
  520. data/actionpack/test/dispatch/routing/inspector_test.rb +425 -0
  521. data/actionpack/test/dispatch/routing/ipv6_redirect_test.rb +46 -0
  522. data/actionpack/test/dispatch/routing/route_set_test.rb +166 -0
  523. data/actionpack/test/dispatch/routing_assertions_test.rb +132 -0
  524. data/actionpack/test/dispatch/routing_test.rb +5055 -0
  525. data/actionpack/test/dispatch/runner_test.rb +19 -0
  526. data/actionpack/test/dispatch/session/abstract_store_test.rb +58 -0
  527. data/actionpack/test/dispatch/session/cache_store_test.rb +183 -0
  528. data/actionpack/test/dispatch/session/cookie_store_test.rb +370 -0
  529. data/actionpack/test/dispatch/session/mem_cache_store_test.rb +205 -0
  530. data/actionpack/test/dispatch/session/test_session_test.rb +65 -0
  531. data/actionpack/test/dispatch/show_exceptions_test.rb +138 -0
  532. data/actionpack/test/dispatch/ssl_test.rb +220 -0
  533. data/actionpack/test/dispatch/static_test.rb +309 -0
  534. data/actionpack/test/dispatch/system_testing/driver_test.rb +37 -0
  535. data/actionpack/test/dispatch/system_testing/screenshot_helper_test.rb +74 -0
  536. data/actionpack/test/dispatch/system_testing/server_test.rb +19 -0
  537. data/actionpack/test/dispatch/system_testing/system_test_case_test.rb +67 -0
  538. data/actionpack/test/dispatch/test_request_test.rb +131 -0
  539. data/actionpack/test/dispatch/test_response_test.rb +37 -0
  540. data/actionpack/test/dispatch/uploaded_file_test.rb +113 -0
  541. data/actionpack/test/dispatch/url_generation_test.rb +141 -0
  542. data/actionpack/test/fixtures/_top_level_partial_only.erb +1 -0
  543. data/actionpack/test/fixtures/alternate_helpers/foo_helper.rb +5 -0
  544. data/actionpack/test/fixtures/bad_customers/_bad_customer.html.erb +1 -0
  545. data/actionpack/test/fixtures/collection_cache/index.html.erb +1 -0
  546. data/actionpack/test/fixtures/company.rb +11 -0
  547. data/actionpack/test/fixtures/customers/_commented_customer.html.erb +5 -0
  548. data/actionpack/test/fixtures/customers/_customer.html.erb +4 -0
  549. data/actionpack/test/fixtures/filter_test/implicit_actions/edit.html.erb +1 -0
  550. data/actionpack/test/fixtures/filter_test/implicit_actions/show.html.erb +1 -0
  551. data/actionpack/test/fixtures/functional_caching/_partial.erb +3 -0
  552. data/actionpack/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +3 -0
  553. data/actionpack/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +5 -0
  554. data/actionpack/test/fixtures/functional_caching/formatted_fragment_cached_with_variant.html+phone.erb +3 -0
  555. data/actionpack/test/fixtures/functional_caching/fragment_cached.html.erb +3 -0
  556. data/actionpack/test/fixtures/functional_caching/fragment_cached_with_options.html.erb +3 -0
  557. data/actionpack/test/fixtures/functional_caching/fragment_cached_without_digest.html.erb +3 -0
  558. data/actionpack/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +1 -0
  559. data/actionpack/test/fixtures/functional_caching/inline_fragment_cached.html.erb +2 -0
  560. data/actionpack/test/fixtures/helpers/abc_helper.rb +5 -0
  561. data/actionpack/test/fixtures/helpers/fun/games_helper.rb +7 -0
  562. data/actionpack/test/fixtures/helpers/fun/pdf_helper.rb +7 -0
  563. data/actionpack/test/fixtures/helpers/just_me_helper.rb +5 -0
  564. data/actionpack/test/fixtures/helpers/me_too_helper.rb +5 -0
  565. data/actionpack/test/fixtures/helpers1_pack/pack1_helper.rb +7 -0
  566. data/actionpack/test/fixtures/helpers2_pack/pack2_helper.rb +7 -0
  567. data/actionpack/test/fixtures/helpers_typo/admin/users_helper.rb +6 -0
  568. data/actionpack/test/fixtures/implicit_render_test/empty_action_with_mobile_variant.html+mobile.erb +1 -0
  569. data/actionpack/test/fixtures/implicit_render_test/empty_action_with_template.html.erb +1 -0
  570. data/actionpack/test/fixtures/layouts/_customers.erb +1 -0
  571. data/actionpack/test/fixtures/layouts/block_with_layout.erb +3 -0
  572. data/actionpack/test/fixtures/layouts/builder.builder +3 -0
  573. data/actionpack/test/fixtures/layouts/partial_with_layout.erb +3 -0
  574. data/actionpack/test/fixtures/layouts/standard.html.erb +1 -0
  575. data/actionpack/test/fixtures/layouts/talk_from_action.erb +2 -0
  576. data/actionpack/test/fixtures/layouts/with_html_partial.html.erb +1 -0
  577. data/actionpack/test/fixtures/layouts/xhr.html.erb +2 -0
  578. data/actionpack/test/fixtures/layouts/yield.erb +2 -0
  579. data/actionpack/test/fixtures/load_me.rb +4 -0
  580. data/actionpack/test/fixtures/localized/hello_world.de.html +1 -0
  581. data/actionpack/test/fixtures/localized/hello_world.en.html +1 -0
  582. data/actionpack/test/fixtures/localized/hello_world.it.erb +1 -0
  583. data/actionpack/test/fixtures/multipart/binary_file +0 -0
  584. data/actionpack/test/fixtures/multipart/boundary_problem_file +10 -0
  585. data/actionpack/test/fixtures/multipart/bracketed_param +5 -0
  586. data/actionpack/test/fixtures/multipart/bracketed_utf8_param +5 -0
  587. data/actionpack/test/fixtures/multipart/empty +10 -0
  588. data/actionpack/test/fixtures/multipart/hello.txt +1 -0
  589. data/actionpack/test/fixtures/multipart/large_text_file +10 -0
  590. data/actionpack/test/fixtures/multipart/mixed_files +0 -0
  591. data/actionpack/test/fixtures/multipart/none +9 -0
  592. data/actionpack/test/fixtures/multipart/ruby_on_rails.jpg +0 -0
  593. data/actionpack/test/fixtures/multipart/single_parameter +5 -0
  594. data/actionpack/test/fixtures/multipart/single_utf8_param +5 -0
  595. data/actionpack/test/fixtures/multipart/text_file +10 -0
  596. data/actionpack/test/fixtures/multipart/utf8_filename +10 -0
  597. data/actionpack/test/fixtures/namespaced/implicit_render_test/hello_world.erb +1 -0
  598. data/actionpack/test/fixtures/old_content_type/render_default_content_types_for_respond_to.xml.erb +1 -0
  599. data/actionpack/test/fixtures/old_content_type/render_default_for_builder.builder +1 -0
  600. data/actionpack/test/fixtures/old_content_type/render_default_for_erb.erb +1 -0
  601. data/actionpack/test/fixtures/post_test/layouts/post.html.erb +1 -0
  602. data/actionpack/test/fixtures/post_test/layouts/super_post.iphone.erb +1 -0
  603. data/actionpack/test/fixtures/post_test/post/index.html.erb +1 -0
  604. data/actionpack/test/fixtures/post_test/post/index.iphone.erb +1 -0
  605. data/actionpack/test/fixtures/post_test/super_post/index.html.erb +1 -0
  606. data/actionpack/test/fixtures/post_test/super_post/index.iphone.erb +1 -0
  607. data/actionpack/test/fixtures/public/400.html +1 -0
  608. data/actionpack/test/fixtures/public/404.html +1 -0
  609. data/actionpack/test/fixtures/public/500.da.html +1 -0
  610. data/actionpack/test/fixtures/public/500.html +1 -0
  611. data/actionpack/test/fixtures/public/bar.html +1 -0
  612. data/actionpack/test/fixtures/public/bar/index.html +1 -0
  613. data/actionpack/test/fixtures/public/foo/bar.html +1 -0
  614. data/actionpack/test/fixtures/public/foo/baz.css +3 -0
  615. data/actionpack/test/fixtures/public/foo/index.html +1 -0
  616. data/actionpack/test/fixtures/public/foo/other-index.html +1 -0
  617. data/actionpack/test/fixtures/public/foo//343/201/223/343/202/223/343/201/253/343/201/241/343/201/257.html +1 -0
  618. data/actionpack/test/fixtures/public/gzip/application-a71b3024f80aea3181c09774ca17e712.js +4 -0
  619. data/actionpack/test/fixtures/public/gzip/application-a71b3024f80aea3181c09774ca17e712.js.gz +0 -0
  620. data/actionpack/test/fixtures/public/gzip/foo.zoo +4 -0
  621. data/actionpack/test/fixtures/public/gzip/foo.zoo.gz +0 -0
  622. data/actionpack/test/fixtures/public/index.html +1 -0
  623. data/actionpack/test/fixtures/public/other-index.html +1 -0
  624. data/actionpack/test/fixtures/respond_to/all_types_with_layout.html.erb +1 -0
  625. data/actionpack/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +1 -0
  626. data/actionpack/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +1 -0
  627. data/actionpack/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +1 -0
  628. data/actionpack/test/fixtures/respond_to/layouts/missing.html.erb +1 -0
  629. data/actionpack/test/fixtures/respond_to/layouts/standard.html.erb +1 -0
  630. data/actionpack/test/fixtures/respond_to/layouts/standard.iphone.erb +1 -0
  631. data/actionpack/test/fixtures/respond_to/using_defaults.html.erb +1 -0
  632. data/actionpack/test/fixtures/respond_to/using_defaults.xml.builder +1 -0
  633. data/actionpack/test/fixtures/respond_to/using_defaults_with_all.html.erb +1 -0
  634. data/actionpack/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +1 -0
  635. data/actionpack/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +1 -0
  636. data/actionpack/test/fixtures/respond_to/variant_any_implicit_render.html+phablet.erb +1 -0
  637. data/actionpack/test/fixtures/respond_to/variant_any_implicit_render.html+tablet.erb +1 -0
  638. data/actionpack/test/fixtures/respond_to/variant_inline_syntax_without_block.html+phone.erb +1 -0
  639. data/actionpack/test/fixtures/respond_to/variant_plus_none_for_format.html.erb +1 -0
  640. data/actionpack/test/fixtures/respond_to/variant_with_implicit_template_rendering.html+mobile.erb +1 -0
  641. data/actionpack/test/fixtures/ruby_template.ruby +2 -0
  642. data/actionpack/test/fixtures/session_autoload_test/session_autoload_test/foo.rb +12 -0
  643. data/actionpack/test/fixtures/shared.html.erb +1 -0
  644. data/actionpack/test/fixtures/star_star_mime/index.js.erb +1 -0
  645. data/actionpack/test/fixtures/test/_partial.erb +1 -0
  646. data/actionpack/test/fixtures/test/_partial.html.erb +1 -0
  647. data/actionpack/test/fixtures/test/_partial.js.erb +1 -0
  648. data/actionpack/test/fixtures/test/dot.directory/render_file_with_ivar.erb +1 -0
  649. data/actionpack/test/fixtures/test/formatted_xml_erb.builder +1 -0
  650. data/actionpack/test/fixtures/test/formatted_xml_erb.html.erb +1 -0
  651. data/actionpack/test/fixtures/test/formatted_xml_erb.xml.erb +1 -0
  652. data/actionpack/test/fixtures/test/hello/hello.erb +1 -0
  653. data/actionpack/test/fixtures/test/hello_world.erb +1 -0
  654. data/actionpack/test/fixtures/test/hello_world_with_partial.html.erb +2 -0
  655. data/actionpack/test/fixtures/test/hello_xml_world.builder +11 -0
  656. data/actionpack/test/fixtures/test/implicit_content_type.atom.builder +2 -0
  657. data/actionpack/test/fixtures/test/render_file_with_ivar.erb +1 -0
  658. data/actionpack/test/fixtures/test/render_file_with_locals.erb +1 -0
  659. data/actionpack/test/fixtures/test/with_implicit_template.erb +1 -0
  660. data/actionpack/test/fixtures//345/205/254/345/205/261/bar.html +1 -0
  661. data/actionpack/test/fixtures//345/205/254/345/205/261/bar/index.html +1 -0
  662. data/actionpack/test/fixtures//345/205/254/345/205/261/foo/bar.html +1 -0
  663. data/actionpack/test/fixtures//345/205/254/345/205/261/foo/baz.css +3 -0
  664. data/actionpack/test/fixtures//345/205/254/345/205/261/foo/index.html +1 -0
  665. data/actionpack/test/fixtures//345/205/254/345/205/261/foo/other-index.html +1 -0
  666. data/actionpack/test/fixtures//345/205/254/345/205/261/foo//343/201/223/343/202/223/343/201/253/343/201/241/343/201/257.html +1 -0
  667. data/actionpack/test/fixtures//345/205/254/345/205/261/gzip/application-a71b3024f80aea3181c09774ca17e712.js +4 -0
  668. data/actionpack/test/fixtures//345/205/254/345/205/261/gzip/application-a71b3024f80aea3181c09774ca17e712.js.gz +0 -0
  669. data/actionpack/test/fixtures//345/205/254/345/205/261/gzip/foo.zoo +4 -0
  670. data/actionpack/test/fixtures//345/205/254/345/205/261/gzip/foo.zoo.gz +0 -0
  671. data/actionpack/test/fixtures//345/205/254/345/205/261/index.html +1 -0
  672. data/actionpack/test/fixtures//345/205/254/345/205/261/other-index.html +1 -0
  673. data/actionpack/test/journey/gtg/builder_test.rb +81 -0
  674. data/actionpack/test/journey/gtg/transition_table_test.rb +125 -0
  675. data/actionpack/test/journey/nfa/simulator_test.rb +100 -0
  676. data/actionpack/test/journey/nfa/transition_table_test.rb +74 -0
  677. data/actionpack/test/journey/nodes/symbol_test.rb +19 -0
  678. data/actionpack/test/journey/path/pattern_test.rb +286 -0
  679. data/actionpack/test/journey/route/definition/parser_test.rb +112 -0
  680. data/actionpack/test/journey/route/definition/scanner_test.rb +71 -0
  681. data/actionpack/test/journey/route_test.rb +113 -0
  682. data/actionpack/test/journey/router/utils_test.rb +48 -0
  683. data/actionpack/test/journey/router_test.rb +535 -0
  684. data/actionpack/test/journey/routes_test.rb +62 -0
  685. data/actionpack/test/lib/controller/fake_controllers.rb +37 -0
  686. data/actionpack/test/lib/controller/fake_models.rb +79 -0
  687. data/actionpack/test/routing/helper_test.rb +33 -0
  688. data/actionview/.gitignore +2 -0
  689. data/actionview/CHANGELOG.md +35 -0
  690. data/actionview/MIT-LICENSE +21 -0
  691. data/actionview/README.rdoc +38 -0
  692. data/actionview/RUNNING_UJS_TESTS.rdoc +7 -0
  693. data/actionview/RUNNING_UNIT_TESTS.rdoc +27 -0
  694. data/actionview/Rakefile +136 -0
  695. data/actionview/actionview.gemspec +38 -0
  696. data/actionview/app/assets/javascripts/MIT-LICENSE +20 -0
  697. data/actionview/app/assets/javascripts/README.md +60 -0
  698. data/actionview/app/assets/javascripts/rails-ujs.coffee +39 -0
  699. data/actionview/app/assets/javascripts/rails-ujs/BANNER.js +5 -0
  700. data/actionview/app/assets/javascripts/rails-ujs/features/confirm.coffee +26 -0
  701. data/actionview/app/assets/javascripts/rails-ujs/features/disable.coffee +82 -0
  702. data/actionview/app/assets/javascripts/rails-ujs/features/method.coffee +34 -0
  703. data/actionview/app/assets/javascripts/rails-ujs/features/remote.coffee +90 -0
  704. data/actionview/app/assets/javascripts/rails-ujs/start.coffee +70 -0
  705. data/actionview/app/assets/javascripts/rails-ujs/utils/ajax.coffee +96 -0
  706. data/actionview/app/assets/javascripts/rails-ujs/utils/csrf.coffee +25 -0
  707. data/actionview/app/assets/javascripts/rails-ujs/utils/dom.coffee +28 -0
  708. data/actionview/app/assets/javascripts/rails-ujs/utils/event.coffee +40 -0
  709. data/actionview/app/assets/javascripts/rails-ujs/utils/form.coffee +36 -0
  710. data/actionview/bin/test +5 -0
  711. data/actionview/blade.yml +11 -0
  712. data/actionview/coffeelint.json +135 -0
  713. data/actionview/lib/action_view.rb +98 -0
  714. data/actionview/lib/action_view/base.rb +215 -0
  715. data/actionview/lib/action_view/buffers.rb +52 -0
  716. data/actionview/lib/action_view/context.rb +38 -0
  717. data/actionview/lib/action_view/dependency_tracker.rb +175 -0
  718. data/actionview/lib/action_view/digestor.rb +128 -0
  719. data/actionview/lib/action_view/flows.rb +76 -0
  720. data/actionview/lib/action_view/gem_version.rb +17 -0
  721. data/actionview/lib/action_view/helpers.rb +66 -0
  722. data/actionview/lib/action_view/helpers/active_model_helper.rb +51 -0
  723. data/actionview/lib/action_view/helpers/asset_tag_helper.rb +400 -0
  724. data/actionview/lib/action_view/helpers/asset_url_helper.rb +469 -0
  725. data/actionview/lib/action_view/helpers/atom_feed_helper.rb +205 -0
  726. data/actionview/lib/action_view/helpers/cache_helper.rb +263 -0
  727. data/actionview/lib/action_view/helpers/capture_helper.rb +212 -0
  728. data/actionview/lib/action_view/helpers/controller_helper.rb +36 -0
  729. data/actionview/lib/action_view/helpers/csrf_helper.rb +35 -0
  730. data/actionview/lib/action_view/helpers/date_helper.rb +1156 -0
  731. data/actionview/lib/action_view/helpers/debug_helper.rb +36 -0
  732. data/actionview/lib/action_view/helpers/form_helper.rb +2355 -0
  733. data/actionview/lib/action_view/helpers/form_options_helper.rb +883 -0
  734. data/actionview/lib/action_view/helpers/form_tag_helper.rb +916 -0
  735. data/actionview/lib/action_view/helpers/javascript_helper.rb +83 -0
  736. data/actionview/lib/action_view/helpers/number_helper.rb +451 -0
  737. data/actionview/lib/action_view/helpers/output_safety_helper.rb +70 -0
  738. data/actionview/lib/action_view/helpers/record_tag_helper.rb +23 -0
  739. data/actionview/lib/action_view/helpers/rendering_helper.rb +100 -0
  740. data/actionview/lib/action_view/helpers/sanitize_helper.rb +177 -0
  741. data/actionview/lib/action_view/helpers/tag_helper.rb +313 -0
  742. data/actionview/lib/action_view/helpers/tags.rb +44 -0
  743. data/actionview/lib/action_view/helpers/tags/base.rb +192 -0
  744. data/actionview/lib/action_view/helpers/tags/check_box.rb +66 -0
  745. data/actionview/lib/action_view/helpers/tags/checkable.rb +18 -0
  746. data/actionview/lib/action_view/helpers/tags/collection_check_boxes.rb +36 -0
  747. data/actionview/lib/action_view/helpers/tags/collection_helpers.rb +119 -0
  748. data/actionview/lib/action_view/helpers/tags/collection_radio_buttons.rb +31 -0
  749. data/actionview/lib/action_view/helpers/tags/collection_select.rb +30 -0
  750. data/actionview/lib/action_view/helpers/tags/color_field.rb +27 -0
  751. data/actionview/lib/action_view/helpers/tags/date_field.rb +15 -0
  752. data/actionview/lib/action_view/helpers/tags/date_select.rb +74 -0
  753. data/actionview/lib/action_view/helpers/tags/datetime_field.rb +32 -0
  754. data/actionview/lib/action_view/helpers/tags/datetime_local_field.rb +21 -0
  755. data/actionview/lib/action_view/helpers/tags/datetime_select.rb +10 -0
  756. data/actionview/lib/action_view/helpers/tags/email_field.rb +10 -0
  757. data/actionview/lib/action_view/helpers/tags/file_field.rb +10 -0
  758. data/actionview/lib/action_view/helpers/tags/grouped_collection_select.rb +31 -0
  759. data/actionview/lib/action_view/helpers/tags/hidden_field.rb +10 -0
  760. data/actionview/lib/action_view/helpers/tags/label.rb +85 -0
  761. data/actionview/lib/action_view/helpers/tags/month_field.rb +15 -0
  762. data/actionview/lib/action_view/helpers/tags/number_field.rb +20 -0
  763. data/actionview/lib/action_view/helpers/tags/password_field.rb +14 -0
  764. data/actionview/lib/action_view/helpers/tags/placeholderable.rb +24 -0
  765. data/actionview/lib/action_view/helpers/tags/radio_button.rb +33 -0
  766. data/actionview/lib/action_view/helpers/tags/range_field.rb +10 -0
  767. data/actionview/lib/action_view/helpers/tags/search_field.rb +27 -0
  768. data/actionview/lib/action_view/helpers/tags/select.rb +43 -0
  769. data/actionview/lib/action_view/helpers/tags/tel_field.rb +10 -0
  770. data/actionview/lib/action_view/helpers/tags/text_area.rb +24 -0
  771. data/actionview/lib/action_view/helpers/tags/text_field.rb +34 -0
  772. data/actionview/lib/action_view/helpers/tags/time_field.rb +15 -0
  773. data/actionview/lib/action_view/helpers/tags/time_select.rb +10 -0
  774. data/actionview/lib/action_view/helpers/tags/time_zone_select.rb +22 -0
  775. data/actionview/lib/action_view/helpers/tags/translator.rb +44 -0
  776. data/actionview/lib/action_view/helpers/tags/url_field.rb +10 -0
  777. data/actionview/lib/action_view/helpers/tags/week_field.rb +15 -0
  778. data/actionview/lib/action_view/helpers/text_helper.rb +486 -0
  779. data/actionview/lib/action_view/helpers/translation_helper.rb +141 -0
  780. data/actionview/lib/action_view/helpers/url_helper.rb +654 -0
  781. data/actionview/lib/action_view/layouts.rb +433 -0
  782. data/actionview/lib/action_view/locale/en.yml +56 -0
  783. data/actionview/lib/action_view/log_subscriber.rb +96 -0
  784. data/actionview/lib/action_view/lookup_context.rb +274 -0
  785. data/actionview/lib/action_view/model_naming.rb +14 -0
  786. data/actionview/lib/action_view/path_set.rb +100 -0
  787. data/actionview/lib/action_view/railtie.rb +75 -0
  788. data/actionview/lib/action_view/record_identifier.rb +112 -0
  789. data/actionview/lib/action_view/renderer/abstract_renderer.rb +55 -0
  790. data/actionview/lib/action_view/renderer/partial_renderer.rb +552 -0
  791. data/actionview/lib/action_view/renderer/partial_renderer/collection_caching.rb +57 -0
  792. data/actionview/lib/action_view/renderer/renderer.rb +56 -0
  793. data/actionview/lib/action_view/renderer/streaming_template_renderer.rb +103 -0
  794. data/actionview/lib/action_view/renderer/template_renderer.rb +102 -0
  795. data/actionview/lib/action_view/rendering.rb +155 -0
  796. data/actionview/lib/action_view/routing_url_for.rb +145 -0
  797. data/actionview/lib/action_view/tasks/cache_digests.rake +25 -0
  798. data/actionview/lib/action_view/template.rb +361 -0
  799. data/actionview/lib/action_view/template/error.rb +144 -0
  800. data/actionview/lib/action_view/template/handlers.rb +66 -0
  801. data/actionview/lib/action_view/template/handlers/builder.rb +25 -0
  802. data/actionview/lib/action_view/template/handlers/erb.rb +77 -0
  803. data/actionview/lib/action_view/template/handlers/erb/deprecated_erubis.rb +11 -0
  804. data/actionview/lib/action_view/template/handlers/erb/erubi.rb +83 -0
  805. data/actionview/lib/action_view/template/handlers/erb/erubis.rb +83 -0
  806. data/actionview/lib/action_view/template/handlers/html.rb +11 -0
  807. data/actionview/lib/action_view/template/handlers/raw.rb +11 -0
  808. data/actionview/lib/action_view/template/html.rb +34 -0
  809. data/actionview/lib/action_view/template/resolver.rb +391 -0
  810. data/actionview/lib/action_view/template/text.rb +33 -0
  811. data/actionview/lib/action_view/template/types.rb +57 -0
  812. data/actionview/lib/action_view/test_case.rb +300 -0
  813. data/actionview/lib/action_view/testing/resolvers.rb +54 -0
  814. data/actionview/lib/action_view/version.rb +10 -0
  815. data/actionview/lib/action_view/view_paths.rb +105 -0
  816. data/actionview/package.json +36 -0
  817. data/actionview/test/abstract_unit.rb +287 -0
  818. data/actionview/test/actionpack/abstract/abstract_controller_test.rb +292 -0
  819. data/actionview/test/actionpack/abstract/helper_test.rb +128 -0
  820. data/actionview/test/actionpack/abstract/layouts_test.rb +568 -0
  821. data/actionview/test/actionpack/abstract/render_test.rb +103 -0
  822. data/actionview/test/actionpack/abstract/views/abstract_controller/testing/me3/formatted.html.erb +1 -0
  823. data/actionview/test/actionpack/abstract/views/abstract_controller/testing/me3/index.erb +1 -0
  824. data/actionview/test/actionpack/abstract/views/abstract_controller/testing/me4/index.erb +1 -0
  825. data/actionview/test/actionpack/abstract/views/action_with_ivars.erb +1 -0
  826. data/actionview/test/actionpack/abstract/views/helper_test.erb +1 -0
  827. data/actionview/test/actionpack/abstract/views/index.erb +1 -0
  828. data/actionview/test/actionpack/abstract/views/layouts/abstract_controller/testing/me4.erb +1 -0
  829. data/actionview/test/actionpack/abstract/views/layouts/application.erb +1 -0
  830. data/actionview/test/actionpack/abstract/views/naked_render.erb +1 -0
  831. data/actionview/test/actionpack/controller/capture_test.rb +83 -0
  832. data/actionview/test/actionpack/controller/layout_test.rb +270 -0
  833. data/actionview/test/actionpack/controller/render_test.rb +1294 -0
  834. data/actionview/test/actionpack/controller/view_paths_test.rb +174 -0
  835. data/actionview/test/active_record_unit.rb +92 -0
  836. data/actionview/test/activerecord/controller_runtime_test.rb +95 -0
  837. data/actionview/test/activerecord/debug_helper_test.rb +19 -0
  838. data/actionview/test/activerecord/form_helper_activerecord_test.rb +90 -0
  839. data/actionview/test/activerecord/polymorphic_routes_test.rb +780 -0
  840. data/actionview/test/activerecord/relation_cache_test.rb +23 -0
  841. data/actionview/test/activerecord/render_partial_with_record_identification_test.rb +198 -0
  842. data/actionview/test/fixtures/_top_level_partial.html.erb +1 -0
  843. data/actionview/test/fixtures/_top_level_partial_only.erb +1 -0
  844. data/actionview/test/fixtures/actionpack/bad_customers/_bad_customer.html.erb +1 -0
  845. data/actionview/test/fixtures/actionpack/customers/_customer.html.erb +1 -0
  846. data/actionview/test/fixtures/actionpack/fun/games/_form.erb +1 -0
  847. data/actionview/test/fixtures/actionpack/fun/games/hello_world.erb +1 -0
  848. data/actionview/test/fixtures/actionpack/good_customers/_good_customer.html.erb +1 -0
  849. data/actionview/test/fixtures/actionpack/hello.html +1 -0
  850. data/actionview/test/fixtures/actionpack/layout_tests/alt/layouts/alt.erb +1 -0
  851. data/actionview/test/fixtures/actionpack/layout_tests/layouts/controller_name_space/nested.erb +1 -0
  852. data/actionview/test/fixtures/actionpack/layout_tests/layouts/item.erb +1 -0
  853. data/actionview/test/fixtures/actionpack/layout_tests/layouts/layout_test.erb +1 -0
  854. data/actionview/test/fixtures/actionpack/layout_tests/layouts/multiple_extensions.html.erb +1 -0
  855. data/actionview/test/fixtures/actionpack/layout_tests/layouts/symlinked/symlinked_layout.erb +5 -0
  856. data/actionview/test/fixtures/actionpack/layout_tests/layouts/third_party_template_library.mab +1 -0
  857. data/actionview/test/fixtures/actionpack/layout_tests/views/goodbye.erb +1 -0
  858. data/actionview/test/fixtures/actionpack/layout_tests/views/hello.erb +1 -0
  859. data/actionview/test/fixtures/actionpack/layouts/_column.html.erb +2 -0
  860. data/actionview/test/fixtures/actionpack/layouts/_customers.erb +1 -0
  861. data/actionview/test/fixtures/actionpack/layouts/_partial_and_yield.erb +2 -0
  862. data/actionview/test/fixtures/actionpack/layouts/_yield_only.erb +1 -0
  863. data/actionview/test/fixtures/actionpack/layouts/_yield_with_params.erb +1 -0
  864. data/actionview/test/fixtures/actionpack/layouts/block_with_layout.erb +3 -0
  865. data/actionview/test/fixtures/actionpack/layouts/builder.builder +3 -0
  866. data/actionview/test/fixtures/actionpack/layouts/partial_with_layout.erb +3 -0
  867. data/actionview/test/fixtures/actionpack/layouts/standard.html.erb +1 -0
  868. data/actionview/test/fixtures/actionpack/layouts/standard.text.erb +1 -0
  869. data/actionview/test/fixtures/actionpack/layouts/streaming.erb +4 -0
  870. data/actionview/test/fixtures/actionpack/layouts/talk_from_action.erb +2 -0
  871. data/actionview/test/fixtures/actionpack/layouts/with_html_partial.html.erb +1 -0
  872. data/actionview/test/fixtures/actionpack/layouts/xhr.html.erb +2 -0
  873. data/actionview/test/fixtures/actionpack/layouts/yield.erb +2 -0
  874. data/actionview/test/fixtures/actionpack/layouts/yield_with_render_inline_inside.erb +2 -0
  875. data/actionview/test/fixtures/actionpack/layouts/yield_with_render_partial_inside.erb +2 -0
  876. data/actionview/test/fixtures/actionpack/quiz/questions/_question.html.erb +1 -0
  877. data/actionview/test/fixtures/actionpack/shared.html.erb +1 -0
  878. data/actionview/test/fixtures/actionpack/test/_changing_priority.html.erb +1 -0
  879. data/actionview/test/fixtures/actionpack/test/_changing_priority.json.erb +1 -0
  880. data/actionview/test/fixtures/actionpack/test/_counter.html.erb +1 -0
  881. data/actionview/test/fixtures/actionpack/test/_customer.erb +1 -0
  882. data/actionview/test/fixtures/actionpack/test/_customer_counter.erb +1 -0
  883. data/actionview/test/fixtures/actionpack/test/_customer_counter_with_as.erb +1 -0
  884. data/actionview/test/fixtures/actionpack/test/_customer_greeting.erb +1 -0
  885. data/actionview/test/fixtures/actionpack/test/_customer_iteration.erb +1 -0
  886. data/actionview/test/fixtures/actionpack/test/_customer_iteration_with_as.erb +1 -0
  887. data/actionview/test/fixtures/actionpack/test/_customer_with_var.erb +1 -0
  888. data/actionview/test/fixtures/actionpack/test/_directory/_partial_with_locales.html.erb +1 -0
  889. data/actionview/test/fixtures/actionpack/test/_first_json_partial.json.erb +1 -0
  890. data/actionview/test/fixtures/actionpack/test/_form.erb +1 -0
  891. data/actionview/test/fixtures/actionpack/test/_hash_greeting.erb +1 -0
  892. data/actionview/test/fixtures/actionpack/test/_hash_object.erb +2 -0
  893. data/actionview/test/fixtures/actionpack/test/_hello.builder +1 -0
  894. data/actionview/test/fixtures/actionpack/test/_json_change_priority.json.erb +0 -0
  895. data/actionview/test/fixtures/actionpack/test/_labelling_form.erb +1 -0
  896. data/actionview/test/fixtures/actionpack/test/_layout_for_partial.html.erb +3 -0
  897. data/actionview/test/fixtures/actionpack/test/_partial.erb +1 -0
  898. data/actionview/test/fixtures/actionpack/test/_partial.html.erb +1 -0
  899. data/actionview/test/fixtures/actionpack/test/_partial.js.erb +1 -0
  900. data/actionview/test/fixtures/actionpack/test/_partial_for_use_in_layout.html.erb +1 -0
  901. data/actionview/test/fixtures/actionpack/test/_partial_html_erb.html.erb +1 -0
  902. data/actionview/test/fixtures/actionpack/test/_partial_name_local_variable.erb +1 -0
  903. data/actionview/test/fixtures/actionpack/test/_partial_only.erb +1 -0
  904. data/actionview/test/fixtures/actionpack/test/_partial_only_html.html +1 -0
  905. data/actionview/test/fixtures/actionpack/test/_partial_with_partial.erb +2 -0
  906. data/actionview/test/fixtures/actionpack/test/_person.erb +2 -0
  907. data/actionview/test/fixtures/actionpack/test/_raise_indentation.html.erb +13 -0
  908. data/actionview/test/fixtures/actionpack/test/_second_json_partial.json.erb +1 -0
  909. data/actionview/test/fixtures/actionpack/test/action_talk_to_layout.erb +2 -0
  910. data/actionview/test/fixtures/actionpack/test/calling_partial_with_layout.html.erb +1 -0
  911. data/actionview/test/fixtures/actionpack/test/capturing.erb +4 -0
  912. data/actionview/test/fixtures/actionpack/test/change_priority.html.erb +2 -0
  913. data/actionview/test/fixtures/actionpack/test/content_for.erb +1 -0
  914. data/actionview/test/fixtures/actionpack/test/content_for_concatenated.erb +3 -0
  915. data/actionview/test/fixtures/actionpack/test/content_for_with_parameter.erb +2 -0
  916. data/actionview/test/fixtures/actionpack/test/dot.directory/render_file_with_ivar.erb +1 -0
  917. data/actionview/test/fixtures/actionpack/test/formatted_html_erb.html.erb +1 -0
  918. data/actionview/test/fixtures/actionpack/test/formatted_xml_erb.builder +1 -0
  919. data/actionview/test/fixtures/actionpack/test/formatted_xml_erb.html.erb +1 -0
  920. data/actionview/test/fixtures/actionpack/test/formatted_xml_erb.xml.erb +1 -0
  921. data/actionview/test/fixtures/actionpack/test/greeting.html.erb +1 -0
  922. data/actionview/test/fixtures/actionpack/test/greeting.xml.erb +1 -0
  923. data/actionview/test/fixtures/actionpack/test/hello,world.erb +1 -0
  924. data/actionview/test/fixtures/actionpack/test/hello.builder +4 -0
  925. data/actionview/test/fixtures/actionpack/test/hello/hello.erb +1 -0
  926. data/actionview/test/fixtures/actionpack/test/hello_world.erb +1 -0
  927. data/actionview/test/fixtures/actionpack/test/hello_world_container.builder +3 -0
  928. data/actionview/test/fixtures/actionpack/test/hello_world_from_rxml.builder +3 -0
  929. data/actionview/test/fixtures/actionpack/test/hello_world_with_layout_false.erb +1 -0
  930. data/actionview/test/fixtures/actionpack/test/hello_world_with_partial.html.erb +2 -0
  931. data/actionview/test/fixtures/actionpack/test/hello_xml_world.builder +11 -0
  932. data/actionview/test/fixtures/actionpack/test/html_template.html.erb +1 -0
  933. data/actionview/test/fixtures/actionpack/test/hyphen-ated.erb +1 -0
  934. data/actionview/test/fixtures/actionpack/test/implicit_content_type.atom.builder +2 -0
  935. data/actionview/test/fixtures/actionpack/test/list.erb +1 -0
  936. data/actionview/test/fixtures/actionpack/test/non_erb_block_content_for.builder +4 -0
  937. data/actionview/test/fixtures/actionpack/test/potential_conflicts.erb +4 -0
  938. data/actionview/test/fixtures/actionpack/test/proper_block_detection.erb +1 -0
  939. data/actionview/test/fixtures/actionpack/test/render_file_from_template.html.erb +1 -0
  940. data/actionview/test/fixtures/actionpack/test/render_file_with_ivar.erb +1 -0
  941. data/actionview/test/fixtures/actionpack/test/render_file_with_locals.erb +1 -0
  942. data/actionview/test/fixtures/actionpack/test/render_file_with_locals_and_default.erb +1 -0
  943. data/actionview/test/fixtures/actionpack/test/render_implicit_html_template_from_xhr_request.da.html.erb +1 -0
  944. data/actionview/test/fixtures/actionpack/test/render_implicit_html_template_from_xhr_request.html.erb +1 -0
  945. data/actionview/test/fixtures/actionpack/test/render_implicit_js_template_without_layout.js.erb +1 -0
  946. data/actionview/test/fixtures/actionpack/test/render_partial_inside_directory.html.erb +1 -0
  947. data/actionview/test/fixtures/actionpack/test/render_to_string_test.erb +1 -0
  948. data/actionview/test/fixtures/actionpack/test/render_two_partials.html.erb +2 -0
  949. data/actionview/test/fixtures/actionpack/test/using_layout_around_block.html.erb +1 -0
  950. data/actionview/test/fixtures/actionpack/test/with_html_partial.html.erb +1 -0
  951. data/actionview/test/fixtures/actionpack/test/with_partial.html.erb +1 -0
  952. data/actionview/test/fixtures/actionpack/test/with_partial.text.erb +1 -0
  953. data/actionview/test/fixtures/actionpack/test/with_xml_template.html.erb +1 -0
  954. data/actionview/test/fixtures/comments/empty.de.html.erb +1 -0
  955. data/actionview/test/fixtures/comments/empty.html+grid.erb +1 -0
  956. data/actionview/test/fixtures/comments/empty.html.builder +1 -0
  957. data/actionview/test/fixtures/comments/empty.html.erb +1 -0
  958. data/actionview/test/fixtures/comments/empty.xml.erb +1 -0
  959. data/actionview/test/fixtures/companies.yml +24 -0
  960. data/actionview/test/fixtures/company.rb +11 -0
  961. data/actionview/test/fixtures/custom_pattern/another.html.erb +1 -0
  962. data/actionview/test/fixtures/custom_pattern/html/another.erb +1 -0
  963. data/actionview/test/fixtures/custom_pattern/html/path.erb +1 -0
  964. data/actionview/test/fixtures/customers/_customer.html.erb +1 -0
  965. data/actionview/test/fixtures/customers/_customer.xml.erb +1 -0
  966. data/actionview/test/fixtures/db_definitions/sqlite.sql +49 -0
  967. data/actionview/test/fixtures/developer.rb +8 -0
  968. data/actionview/test/fixtures/developers.yml +21 -0
  969. data/actionview/test/fixtures/developers/_developer.erb +1 -0
  970. data/actionview/test/fixtures/developers_projects.yml +13 -0
  971. data/actionview/test/fixtures/digestor/api/comments/_comment.json.erb +1 -0
  972. data/actionview/test/fixtures/digestor/api/comments/_comments.json.erb +1 -0
  973. data/actionview/test/fixtures/digestor/comments/_comment.html.erb +1 -0
  974. data/actionview/test/fixtures/digestor/comments/_comments.html.erb +1 -0
  975. data/actionview/test/fixtures/digestor/events/_completed.html.erb +0 -0
  976. data/actionview/test/fixtures/digestor/events/_event.html.erb +0 -0
  977. data/actionview/test/fixtures/digestor/events/index.html.erb +1 -0
  978. data/actionview/test/fixtures/digestor/level/_recursion.html.erb +1 -0
  979. data/actionview/test/fixtures/digestor/level/below/_header.html.erb +0 -0
  980. data/actionview/test/fixtures/digestor/level/below/index.html.erb +1 -0
  981. data/actionview/test/fixtures/digestor/level/recursion.html.erb +1 -0
  982. data/actionview/test/fixtures/digestor/messages/_form.html.erb +0 -0
  983. data/actionview/test/fixtures/digestor/messages/_header.html.erb +0 -0
  984. data/actionview/test/fixtures/digestor/messages/_message.html.erb +1 -0
  985. data/actionview/test/fixtures/digestor/messages/actions/_move.html.erb +0 -0
  986. data/actionview/test/fixtures/digestor/messages/edit.html.erb +5 -0
  987. data/actionview/test/fixtures/digestor/messages/index.html.erb +2 -0
  988. data/actionview/test/fixtures/digestor/messages/new.html+iphone.erb +15 -0
  989. data/actionview/test/fixtures/digestor/messages/peek.html.erb +2 -0
  990. data/actionview/test/fixtures/digestor/messages/show.html.erb +14 -0
  991. data/actionview/test/fixtures/digestor/messages/thread.json.erb +1 -0
  992. data/actionview/test/fixtures/fun/games/_game.erb +1 -0
  993. data/actionview/test/fixtures/fun/games/hello_world.erb +1 -0
  994. data/actionview/test/fixtures/fun/serious/games/_game.erb +1 -0
  995. data/actionview/test/fixtures/games/_game.erb +1 -0
  996. data/actionview/test/fixtures/good_customers/_good_customer.html.erb +1 -0
  997. data/actionview/test/fixtures/helpers/abc_helper.rb +5 -0
  998. data/actionview/test/fixtures/helpers/helpery_test_helper.rb +7 -0
  999. data/actionview/test/fixtures/helpers_missing/invalid_require_helper.rb +6 -0
  1000. data/actionview/test/fixtures/layout_tests/alt/hello.erb +1 -0
  1001. data/actionview/test/fixtures/layouts/_column.html.erb +2 -0
  1002. data/actionview/test/fixtures/layouts/_customers.erb +1 -0
  1003. data/actionview/test/fixtures/layouts/_partial_and_yield.erb +2 -0
  1004. data/actionview/test/fixtures/layouts/_yield_only.erb +1 -0
  1005. data/actionview/test/fixtures/layouts/_yield_with_params.erb +1 -0
  1006. data/actionview/test/fixtures/layouts/render_partial_html.erb +2 -0
  1007. data/actionview/test/fixtures/layouts/streaming.erb +4 -0
  1008. data/actionview/test/fixtures/layouts/streaming_with_capture.erb +6 -0
  1009. data/actionview/test/fixtures/layouts/yield.erb +2 -0
  1010. data/actionview/test/fixtures/layouts/yield_with_render_inline_inside.erb +2 -0
  1011. data/actionview/test/fixtures/layouts/yield_with_render_partial_inside.erb +2 -0
  1012. data/actionview/test/fixtures/mascot.rb +5 -0
  1013. data/actionview/test/fixtures/mascots.yml +4 -0
  1014. data/actionview/test/fixtures/mascots/_mascot.html.erb +1 -0
  1015. data/actionview/test/fixtures/override/test/hello_world.erb +1 -0
  1016. data/actionview/test/fixtures/override2/layouts/test/sub.erb +1 -0
  1017. data/actionview/test/fixtures/plain_text.raw +1 -0
  1018. data/actionview/test/fixtures/plain_text_with_characters.raw +1 -0
  1019. data/actionview/test/fixtures/project.rb +9 -0
  1020. data/actionview/test/fixtures/projects.yml +7 -0
  1021. data/actionview/test/fixtures/projects/_project.erb +1 -0
  1022. data/actionview/test/fixtures/public/.gitignore +1 -0
  1023. data/actionview/test/fixtures/public/elsewhere/cools.js +1 -0
  1024. data/actionview/test/fixtures/public/elsewhere/file.css +1 -0
  1025. data/actionview/test/fixtures/public/foo/baz.css +3 -0
  1026. data/actionview/test/fixtures/public/javascripts/application.js +1 -0
  1027. data/actionview/test/fixtures/public/javascripts/bank.js +1 -0
  1028. data/actionview/test/fixtures/public/javascripts/common.javascript +1 -0
  1029. data/actionview/test/fixtures/public/javascripts/controls.js +1 -0
  1030. data/actionview/test/fixtures/public/javascripts/dragdrop.js +1 -0
  1031. data/actionview/test/fixtures/public/javascripts/effects.js +1 -0
  1032. data/actionview/test/fixtures/public/javascripts/prototype.js +1 -0
  1033. data/actionview/test/fixtures/public/javascripts/robber.js +1 -0
  1034. data/actionview/test/fixtures/public/javascripts/subdir/subdir.js +1 -0
  1035. data/actionview/test/fixtures/public/javascripts/version.1.0.js +1 -0
  1036. data/actionview/test/fixtures/public/stylesheets/bank.css +1 -0
  1037. data/actionview/test/fixtures/public/stylesheets/random.styles +1 -0
  1038. data/actionview/test/fixtures/public/stylesheets/robber.css +1 -0
  1039. data/actionview/test/fixtures/public/stylesheets/subdir/subdir.css +1 -0
  1040. data/actionview/test/fixtures/public/stylesheets/version.1.0.css +1 -0
  1041. data/actionview/test/fixtures/replies.yml +15 -0
  1042. data/actionview/test/fixtures/replies/_reply.erb +1 -0
  1043. data/actionview/test/fixtures/reply.rb +9 -0
  1044. data/actionview/test/fixtures/respond_to/using_defaults_with_all.html.erb +1 -0
  1045. data/actionview/test/fixtures/ruby_template.ruby +2 -0
  1046. data/actionview/test/fixtures/shared.html.erb +1 -0
  1047. data/actionview/test/fixtures/test/_200.html.erb +1 -0
  1048. data/actionview/test/fixtures/test/_FooBar.html.erb +1 -0
  1049. data/actionview/test/fixtures/test/_a-in.html.erb +0 -0
  1050. data/actionview/test/fixtures/test/_b_layout_for_partial.html.erb +1 -0
  1051. data/actionview/test/fixtures/test/_b_layout_for_partial_with_object.html.erb +1 -0
  1052. data/actionview/test/fixtures/test/_b_layout_for_partial_with_object_counter.html.erb +1 -0
  1053. data/actionview/test/fixtures/test/_builder_tag_nested_in_content_tag.erb +3 -0
  1054. data/actionview/test/fixtures/test/_cached_customer.erb +3 -0
  1055. data/actionview/test/fixtures/test/_cached_customer_as.erb +3 -0
  1056. data/actionview/test/fixtures/test/_cached_nested_cached_customer.erb +3 -0
  1057. data/actionview/test/fixtures/test/_changing_priority.html.erb +1 -0
  1058. data/actionview/test/fixtures/test/_changing_priority.json.erb +1 -0
  1059. data/actionview/test/fixtures/test/_content_tag_nested_in_content_tag.erb +3 -0
  1060. data/actionview/test/fixtures/test/_counter.html.erb +1 -0
  1061. data/actionview/test/fixtures/test/_customer.erb +1 -0
  1062. data/actionview/test/fixtures/test/_customer.mobile.erb +1 -0
  1063. data/actionview/test/fixtures/test/_customer_greeting.erb +1 -0
  1064. data/actionview/test/fixtures/test/_customer_with_var.erb +1 -0
  1065. data/actionview/test/fixtures/test/_directory/_partial_with_locales.html.erb +1 -0
  1066. data/actionview/test/fixtures/test/_first_json_partial.json.erb +1 -0
  1067. data/actionview/test/fixtures/test/_from_helper.erb +1 -0
  1068. data/actionview/test/fixtures/test/_json_change_priority.json.erb +0 -0
  1069. data/actionview/test/fixtures/test/_klass.erb +1 -0
  1070. data/actionview/test/fixtures/test/_label_with_block.erb +4 -0
  1071. data/actionview/test/fixtures/test/_layout_for_block_with_args.html.erb +3 -0
  1072. data/actionview/test/fixtures/test/_layout_for_partial.html.erb +3 -0
  1073. data/actionview/test/fixtures/test/_layout_with_partial_and_yield.html.erb +4 -0
  1074. data/actionview/test/fixtures/test/_local_inspector.html.erb +1 -0
  1075. data/actionview/test/fixtures/test/_nested_cached_customer.erb +1 -0
  1076. data/actionview/test/fixtures/test/_object_inspector.erb +1 -0
  1077. data/actionview/test/fixtures/test/_one.html.erb +1 -0
  1078. data/actionview/test/fixtures/test/_partial.erb +1 -0
  1079. data/actionview/test/fixtures/test/_partial.html.erb +1 -0
  1080. data/actionview/test/fixtures/test/_partial.js.erb +1 -0
  1081. data/actionview/test/fixtures/test/_partial_for_use_in_layout.html.erb +1 -0
  1082. data/actionview/test/fixtures/test/_partial_iteration_1.erb +1 -0
  1083. data/actionview/test/fixtures/test/_partial_iteration_2.erb +1 -0
  1084. data/actionview/test/fixtures/test/_partial_name_in_local_assigns.erb +1 -0
  1085. data/actionview/test/fixtures/test/_partial_name_local_variable.erb +1 -0
  1086. data/actionview/test/fixtures/test/_partial_only.erb +1 -0
  1087. data/actionview/test/fixtures/test/_partial_shortcut_with_block_content.html.erb +3 -0
  1088. data/actionview/test/fixtures/test/_partial_with_layout.erb +2 -0
  1089. data/actionview/test/fixtures/test/_partial_with_layout_block_content.erb +4 -0
  1090. data/actionview/test/fixtures/test/_partial_with_layout_block_partial.erb +4 -0
  1091. data/actionview/test/fixtures/test/_partial_with_only_html_version.html.erb +1 -0
  1092. data/actionview/test/fixtures/test/_partial_with_partial.erb +2 -0
  1093. data/actionview/test/fixtures/test/_partial_with_variants.html+grid.erb +1 -0
  1094. data/actionview/test/fixtures/test/_partialhtml.html +1 -0
  1095. data/actionview/test/fixtures/test/_raise.html.erb +1 -0
  1096. data/actionview/test/fixtures/test/_raise_indentation.html.erb +13 -0
  1097. data/actionview/test/fixtures/test/_second_json_partial.json.erb +1 -0
  1098. data/actionview/test/fixtures/test/_two.html.erb +1 -0
  1099. data/actionview/test/fixtures/test/_utf8_partial.html.erb +1 -0
  1100. data/actionview/test/fixtures/test/_utf8_partial_magic.html.erb +2 -0
  1101. data/actionview/test/fixtures/test/_/360/237/215/243.erb +1 -0
  1102. data/actionview/test/fixtures/test/basic.html.erb +1 -0
  1103. data/actionview/test/fixtures/test/calling_partial_with_layout.html.erb +1 -0
  1104. data/actionview/test/fixtures/test/change_priority.html.erb +2 -0
  1105. data/actionview/test/fixtures/test/dont_pick_me +1 -0
  1106. data/actionview/test/fixtures/test/dot.directory/render_file_with_ivar.erb +1 -0
  1107. data/actionview/test/fixtures/test/greeting.xml.erb +1 -0
  1108. data/actionview/test/fixtures/test/hello.builder +4 -0
  1109. data/actionview/test/fixtures/test/hello/hello.erb +1 -0
  1110. data/actionview/test/fixtures/test/hello_world.da.html.erb +1 -0
  1111. data/actionview/test/fixtures/test/hello_world.erb +1 -0
  1112. data/actionview/test/fixtures/test/hello_world.erb~ +1 -0
  1113. data/actionview/test/fixtures/test/hello_world.html+phone.erb +1 -0
  1114. data/actionview/test/fixtures/test/hello_world.pt-BR.html.erb +1 -0
  1115. data/actionview/test/fixtures/test/hello_world.text+phone.erb +1 -0
  1116. data/actionview/test/fixtures/test/hello_world_with_partial.html.erb +2 -0
  1117. data/actionview/test/fixtures/test/html_template.html.erb +1 -0
  1118. data/actionview/test/fixtures/test/layout_render_file.erb +2 -0
  1119. data/actionview/test/fixtures/test/layout_render_object.erb +1 -0
  1120. data/actionview/test/fixtures/test/list.erb +1 -0
  1121. data/actionview/test/fixtures/test/malformed/malformed.en.html.erb~ +1 -0
  1122. data/actionview/test/fixtures/test/malformed/malformed.erb~ +1 -0
  1123. data/actionview/test/fixtures/test/malformed/malformed.html.erb~ +1 -0
  1124. data/actionview/test/fixtures/test/malformed/malformed~ +1 -0
  1125. data/actionview/test/fixtures/test/nested_layout.erb +3 -0
  1126. data/actionview/test/fixtures/test/nested_streaming.erb +3 -0
  1127. data/actionview/test/fixtures/test/nil_return.erb +1 -0
  1128. data/actionview/test/fixtures/test/one.html.erb +1 -0
  1129. data/actionview/test/fixtures/test/render_file_inspect_local_assigns.erb +1 -0
  1130. data/actionview/test/fixtures/test/render_file_instance_variable.erb +1 -0
  1131. data/actionview/test/fixtures/test/render_file_unicode_local.erb +1 -0
  1132. data/actionview/test/fixtures/test/render_file_with_ivar.erb +1 -0
  1133. data/actionview/test/fixtures/test/render_file_with_locals.erb +1 -0
  1134. data/actionview/test/fixtures/test/render_file_with_locals_and_default.erb +1 -0
  1135. data/actionview/test/fixtures/test/render_file_with_ruby_keyword_locals.erb +1 -0
  1136. data/actionview/test/fixtures/test/render_partial_inside_directory.html.erb +1 -0
  1137. data/actionview/test/fixtures/test/render_two_partials.html.erb +2 -0
  1138. data/actionview/test/fixtures/test/streaming.erb +3 -0
  1139. data/actionview/test/fixtures/test/streaming_buster.erb +3 -0
  1140. data/actionview/test/fixtures/test/sub_template_raise.html.erb +1 -0
  1141. data/actionview/test/fixtures/test/template.erb +1 -0
  1142. data/actionview/test/fixtures/test/test_template_with_delegation_reserved_keywords.erb +1 -0
  1143. data/actionview/test/fixtures/test/update_element_with_capture.erb +9 -0
  1144. data/actionview/test/fixtures/test/utf8.html.erb +4 -0
  1145. data/actionview/test/fixtures/test/utf8_magic.html.erb +5 -0
  1146. data/actionview/test/fixtures/test/utf8_magic_with_bare_partial.html.erb +5 -0
  1147. data/actionview/test/fixtures/topic.rb +5 -0
  1148. data/actionview/test/fixtures/topics.yml +22 -0
  1149. data/actionview/test/fixtures/topics/_topic.html.erb +1 -0
  1150. data/actionview/test/fixtures/translations/templates/array.erb +1 -0
  1151. data/actionview/test/fixtures/translations/templates/default.erb +1 -0
  1152. data/actionview/test/fixtures/translations/templates/found.erb +1 -0
  1153. data/actionview/test/fixtures/translations/templates/missing.erb +1 -0
  1154. data/actionview/test/fixtures/with_format.json.erb +1 -0
  1155. data/actionview/test/lib/controller/fake_models.rb +204 -0
  1156. data/actionview/test/template/active_model_helper_test.rb +100 -0
  1157. data/actionview/test/template/asset_tag_helper_test.rb +831 -0
  1158. data/actionview/test/template/atom_feed_helper_test.rb +375 -0
  1159. data/actionview/test/template/capture_helper_test.rb +228 -0
  1160. data/actionview/test/template/compiled_templates_test.rb +94 -0
  1161. data/actionview/test/template/controller_helper_test.rb +34 -0
  1162. data/actionview/test/template/date_helper_i18n_test.rb +166 -0
  1163. data/actionview/test/template/date_helper_test.rb +3642 -0
  1164. data/actionview/test/template/dependency_tracker_test.rb +195 -0
  1165. data/actionview/test/template/digestor_test.rb +388 -0
  1166. data/actionview/test/template/erb/deprecated_erubis_implementation_test.rb +15 -0
  1167. data/actionview/test/template/erb/form_for_test.rb +13 -0
  1168. data/actionview/test/template/erb/helper.rb +26 -0
  1169. data/actionview/test/template/erb/tag_helper_test.rb +32 -0
  1170. data/actionview/test/template/erb_util_test.rb +114 -0
  1171. data/actionview/test/template/form_collections_helper_test.rb +527 -0
  1172. data/actionview/test/template/form_helper/form_with_test.rb +2239 -0
  1173. data/actionview/test/template/form_helper_test.rb +3522 -0
  1174. data/actionview/test/template/form_options_helper_i18n_test.rb +30 -0
  1175. data/actionview/test/template/form_options_helper_test.rb +1417 -0
  1176. data/actionview/test/template/form_tag_helper_test.rb +785 -0
  1177. data/actionview/test/template/html_test.rb +19 -0
  1178. data/actionview/test/template/javascript_helper_test.rb +64 -0
  1179. data/actionview/test/template/log_subscriber_test.rb +224 -0
  1180. data/actionview/test/template/lookup_context_test.rb +289 -0
  1181. data/actionview/test/template/number_helper_test.rb +204 -0
  1182. data/actionview/test/template/output_safety_helper_test.rb +119 -0
  1183. data/actionview/test/template/partial_iteration_test.rb +35 -0
  1184. data/actionview/test/template/record_identifier_test.rb +93 -0
  1185. data/actionview/test/template/record_tag_helper_test.rb +33 -0
  1186. data/actionview/test/template/render_test.rb +725 -0
  1187. data/actionview/test/template/resolver_cache_test.rb +9 -0
  1188. data/actionview/test/template/resolver_patterns_test.rb +44 -0
  1189. data/actionview/test/template/sanitize_helper_test.rb +43 -0
  1190. data/actionview/test/template/streaming_render_test.rb +113 -0
  1191. data/actionview/test/template/tag_helper_test.rb +357 -0
  1192. data/actionview/test/template/template_error_test.rb +37 -0
  1193. data/actionview/test/template/template_test.rb +207 -0
  1194. data/actionview/test/template/test_case_test.rb +335 -0
  1195. data/actionview/test/template/test_test.rb +94 -0
  1196. data/actionview/test/template/testing/fixture_resolver_test.rb +20 -0
  1197. data/actionview/test/template/testing/null_resolver_test.rb +14 -0
  1198. data/actionview/test/template/text_helper_test.rb +535 -0
  1199. data/actionview/test/template/text_test.rb +25 -0
  1200. data/actionview/test/template/translation_helper_test.rb +238 -0
  1201. data/actionview/test/template/url_helper_test.rb +969 -0
  1202. data/actionview/test/ujs/.gitignore +1 -0
  1203. data/actionview/test/ujs/config.ru +6 -0
  1204. data/actionview/test/ujs/public/test/.eslintrc.yml +21 -0
  1205. data/actionview/test/ujs/public/test/call-remote-callbacks.js +273 -0
  1206. data/actionview/test/ujs/public/test/call-remote.js +275 -0
  1207. data/actionview/test/ujs/public/test/csrf-refresh.js +24 -0
  1208. data/actionview/test/ujs/public/test/csrf-token.js +27 -0
  1209. data/actionview/test/ujs/public/test/data-confirm.js +316 -0
  1210. data/actionview/test/ujs/public/test/data-disable-with.js +391 -0
  1211. data/actionview/test/ujs/public/test/data-disable.js +321 -0
  1212. data/actionview/test/ujs/public/test/data-method.js +85 -0
  1213. data/actionview/test/ujs/public/test/data-remote.js +438 -0
  1214. data/actionview/test/ujs/public/test/override.js +56 -0
  1215. data/actionview/test/ujs/public/test/settings.js +116 -0
  1216. data/actionview/test/ujs/public/vendor/jquery-2.2.0.js +9831 -0
  1217. data/actionview/test/ujs/public/vendor/jquery.metadata.js +122 -0
  1218. data/actionview/test/ujs/public/vendor/qunit.css +237 -0
  1219. data/actionview/test/ujs/public/vendor/qunit.js +2288 -0
  1220. data/actionview/test/ujs/server.rb +74 -0
  1221. data/actionview/test/ujs/views/layouts/application.html.erb +25 -0
  1222. data/actionview/test/ujs/views/tests/index.html.erb +11 -0
  1223. data/activejob/CHANGELOG.md +8 -0
  1224. data/activejob/MIT-LICENSE +21 -0
  1225. data/activejob/README.md +126 -0
  1226. data/activejob/Rakefile +79 -0
  1227. data/activejob/activejob.gemspec +30 -0
  1228. data/activejob/bin/test +5 -0
  1229. data/activejob/lib/active_job.rb +39 -0
  1230. data/activejob/lib/active_job/arguments.rb +156 -0
  1231. data/activejob/lib/active_job/base.rb +74 -0
  1232. data/activejob/lib/active_job/callbacks.rb +155 -0
  1233. data/activejob/lib/active_job/configured_job.rb +18 -0
  1234. data/activejob/lib/active_job/core.rb +140 -0
  1235. data/activejob/lib/active_job/enqueuing.rb +59 -0
  1236. data/activejob/lib/active_job/exceptions.rb +124 -0
  1237. data/activejob/lib/active_job/execution.rb +49 -0
  1238. data/activejob/lib/active_job/gem_version.rb +17 -0
  1239. data/activejob/lib/active_job/logging.rb +130 -0
  1240. data/activejob/lib/active_job/queue_adapter.rb +66 -0
  1241. data/activejob/lib/active_job/queue_adapters.rb +139 -0
  1242. data/activejob/lib/active_job/queue_adapters/async_adapter.rb +116 -0
  1243. data/activejob/lib/active_job/queue_adapters/backburner_adapter.rb +36 -0
  1244. data/activejob/lib/active_job/queue_adapters/delayed_job_adapter.rb +43 -0
  1245. data/activejob/lib/active_job/queue_adapters/inline_adapter.rb +23 -0
  1246. data/activejob/lib/active_job/queue_adapters/qu_adapter.rb +46 -0
  1247. data/activejob/lib/active_job/queue_adapters/que_adapter.rb +39 -0
  1248. data/activejob/lib/active_job/queue_adapters/queue_classic_adapter.rb +58 -0
  1249. data/activejob/lib/active_job/queue_adapters/resque_adapter.rb +53 -0
  1250. data/activejob/lib/active_job/queue_adapters/sidekiq_adapter.rb +47 -0
  1251. data/activejob/lib/active_job/queue_adapters/sneakers_adapter.rb +48 -0
  1252. data/activejob/lib/active_job/queue_adapters/sucker_punch_adapter.rb +49 -0
  1253. data/activejob/lib/active_job/queue_adapters/test_adapter.rb +67 -0
  1254. data/activejob/lib/active_job/queue_name.rb +49 -0
  1255. data/activejob/lib/active_job/queue_priority.rb +43 -0
  1256. data/activejob/lib/active_job/railtie.rb +34 -0
  1257. data/activejob/lib/active_job/test_case.rb +11 -0
  1258. data/activejob/lib/active_job/test_helper.rb +448 -0
  1259. data/activejob/lib/active_job/translation.rb +13 -0
  1260. data/activejob/lib/active_job/version.rb +10 -0
  1261. data/activejob/lib/rails/generators/job/job_generator.rb +40 -0
  1262. data/activejob/lib/rails/generators/job/templates/application_job.rb +9 -0
  1263. data/activejob/lib/rails/generators/job/templates/job.rb +9 -0
  1264. data/activejob/test/adapters/async.rb +4 -0
  1265. data/activejob/test/adapters/backburner.rb +5 -0
  1266. data/activejob/test/adapters/delayed_job.rb +8 -0
  1267. data/activejob/test/adapters/inline.rb +3 -0
  1268. data/activejob/test/adapters/qu.rb +5 -0
  1269. data/activejob/test/adapters/que.rb +6 -0
  1270. data/activejob/test/adapters/queue_classic.rb +4 -0
  1271. data/activejob/test/adapters/resque.rb +4 -0
  1272. data/activejob/test/adapters/sidekiq.rb +4 -0
  1273. data/activejob/test/adapters/sneakers.rb +4 -0
  1274. data/activejob/test/adapters/sucker_punch.rb +4 -0
  1275. data/activejob/test/adapters/test.rb +5 -0
  1276. data/activejob/test/cases/adapter_test.rb +9 -0
  1277. data/activejob/test/cases/argument_serialization_test.rb +113 -0
  1278. data/activejob/test/cases/callbacks_test.rb +25 -0
  1279. data/activejob/test/cases/exceptions_test.rb +109 -0
  1280. data/activejob/test/cases/job_serialization_test.rb +57 -0
  1281. data/activejob/test/cases/logging_test.rb +137 -0
  1282. data/activejob/test/cases/queue_adapter_test.rb +51 -0
  1283. data/activejob/test/cases/queue_naming_test.rb +104 -0
  1284. data/activejob/test/cases/queue_priority_test.rb +49 -0
  1285. data/activejob/test/cases/queuing_test.rb +44 -0
  1286. data/activejob/test/cases/rescue_test.rb +36 -0
  1287. data/activejob/test/cases/test_case_test.rb +25 -0
  1288. data/activejob/test/cases/test_helper_test.rb +929 -0
  1289. data/activejob/test/cases/translation_test.rb +22 -0
  1290. data/activejob/test/helper.rb +18 -0
  1291. data/activejob/test/integration/queuing_test.rb +117 -0
  1292. data/activejob/test/jobs/application_job.rb +4 -0
  1293. data/activejob/test/jobs/callback_job.rb +29 -0
  1294. data/activejob/test/jobs/gid_job.rb +9 -0
  1295. data/activejob/test/jobs/hello_job.rb +9 -0
  1296. data/activejob/test/jobs/inherited_job.rb +7 -0
  1297. data/activejob/test/jobs/kwargs_job.rb +9 -0
  1298. data/activejob/test/jobs/logging_job.rb +11 -0
  1299. data/activejob/test/jobs/nested_job.rb +11 -0
  1300. data/activejob/test/jobs/overridden_logging_job.rb +11 -0
  1301. data/activejob/test/jobs/provider_jid_job.rb +9 -0
  1302. data/activejob/test/jobs/queue_adapter_job.rb +5 -0
  1303. data/activejob/test/jobs/queue_as_job.rb +12 -0
  1304. data/activejob/test/jobs/rescue_job.rb +29 -0
  1305. data/activejob/test/jobs/retry_job.rb +31 -0
  1306. data/activejob/test/jobs/translated_hello_job.rb +12 -0
  1307. data/activejob/test/models/person.rb +22 -0
  1308. data/activejob/test/support/backburner/inline.rb +10 -0
  1309. data/activejob/test/support/delayed_job/delayed/backend/test.rb +112 -0
  1310. data/activejob/test/support/delayed_job/delayed/serialization/test.rb +0 -0
  1311. data/activejob/test/support/integration/adapters/async.rb +12 -0
  1312. data/activejob/test/support/integration/adapters/backburner.rb +39 -0
  1313. data/activejob/test/support/integration/adapters/delayed_job.rb +23 -0
  1314. data/activejob/test/support/integration/adapters/inline.rb +16 -0
  1315. data/activejob/test/support/integration/adapters/qu.rb +40 -0
  1316. data/activejob/test/support/integration/adapters/que.rb +41 -0
  1317. data/activejob/test/support/integration/adapters/queue_classic.rb +39 -0
  1318. data/activejob/test/support/integration/adapters/resque.rb +51 -0
  1319. data/activejob/test/support/integration/adapters/sidekiq.rb +104 -0
  1320. data/activejob/test/support/integration/adapters/sneakers.rb +90 -0
  1321. data/activejob/test/support/integration/adapters/sucker_punch.rb +8 -0
  1322. data/activejob/test/support/integration/dummy_app_template.rb +32 -0
  1323. data/activejob/test/support/integration/helper.rb +33 -0
  1324. data/activejob/test/support/integration/jobs_manager.rb +29 -0
  1325. data/activejob/test/support/integration/test_case_helpers.rb +65 -0
  1326. data/activejob/test/support/job_buffer.rb +21 -0
  1327. data/activejob/test/support/que/inline.rb +16 -0
  1328. data/activejob/test/support/queue_classic/inline.rb +25 -0
  1329. data/activejob/test/support/sneakers/inline.rb +14 -0
  1330. data/activemodel/CHANGELOG.md +41 -0
  1331. data/activemodel/MIT-LICENSE +21 -0
  1332. data/activemodel/README.rdoc +264 -0
  1333. data/activemodel/Rakefile +23 -0
  1334. data/activemodel/activemodel.gemspec +29 -0
  1335. data/activemodel/bin/test +5 -0
  1336. data/activemodel/lib/active_model.rb +74 -0
  1337. data/activemodel/lib/active_model/attribute_assignment.rb +55 -0
  1338. data/activemodel/lib/active_model/attribute_methods.rb +478 -0
  1339. data/activemodel/lib/active_model/callbacks.rb +153 -0
  1340. data/activemodel/lib/active_model/conversion.rb +111 -0
  1341. data/activemodel/lib/active_model/dirty.rb +274 -0
  1342. data/activemodel/lib/active_model/errors.rb +513 -0
  1343. data/activemodel/lib/active_model/forbidden_attributes_protection.rb +31 -0
  1344. data/activemodel/lib/active_model/gem_version.rb +17 -0
  1345. data/activemodel/lib/active_model/lint.rb +118 -0
  1346. data/activemodel/lib/active_model/locale/en.yml +36 -0
  1347. data/activemodel/lib/active_model/model.rb +99 -0
  1348. data/activemodel/lib/active_model/naming.rb +318 -0
  1349. data/activemodel/lib/active_model/railtie.rb +14 -0
  1350. data/activemodel/lib/active_model/secure_password.rb +129 -0
  1351. data/activemodel/lib/active_model/serialization.rb +192 -0
  1352. data/activemodel/lib/active_model/serializers/json.rb +146 -0
  1353. data/activemodel/lib/active_model/translation.rb +70 -0
  1354. data/activemodel/lib/active_model/type.rb +49 -0
  1355. data/activemodel/lib/active_model/type/big_integer.rb +15 -0
  1356. data/activemodel/lib/active_model/type/binary.rb +52 -0
  1357. data/activemodel/lib/active_model/type/boolean.rb +34 -0
  1358. data/activemodel/lib/active_model/type/date.rb +56 -0
  1359. data/activemodel/lib/active_model/type/date_time.rb +50 -0
  1360. data/activemodel/lib/active_model/type/decimal.rb +70 -0
  1361. data/activemodel/lib/active_model/type/float.rb +36 -0
  1362. data/activemodel/lib/active_model/type/helpers.rb +6 -0
  1363. data/activemodel/lib/active_model/type/helpers/accepts_multiparameter_time.rb +41 -0
  1364. data/activemodel/lib/active_model/type/helpers/mutable.rb +20 -0
  1365. data/activemodel/lib/active_model/type/helpers/numeric.rb +37 -0
  1366. data/activemodel/lib/active_model/type/helpers/time_value.rb +79 -0
  1367. data/activemodel/lib/active_model/type/immutable_string.rb +32 -0
  1368. data/activemodel/lib/active_model/type/integer.rb +70 -0
  1369. data/activemodel/lib/active_model/type/registry.rb +70 -0
  1370. data/activemodel/lib/active_model/type/string.rb +26 -0
  1371. data/activemodel/lib/active_model/type/time.rb +48 -0
  1372. data/activemodel/lib/active_model/type/value.rb +122 -0
  1373. data/activemodel/lib/active_model/validations.rb +439 -0
  1374. data/activemodel/lib/active_model/validations/absence.rb +33 -0
  1375. data/activemodel/lib/active_model/validations/acceptance.rb +106 -0
  1376. data/activemodel/lib/active_model/validations/callbacks.rb +116 -0
  1377. data/activemodel/lib/active_model/validations/clusivity.rb +54 -0
  1378. data/activemodel/lib/active_model/validations/confirmation.rb +80 -0
  1379. data/activemodel/lib/active_model/validations/exclusion.rb +49 -0
  1380. data/activemodel/lib/active_model/validations/format.rb +114 -0
  1381. data/activemodel/lib/active_model/validations/helper_methods.rb +15 -0
  1382. data/activemodel/lib/active_model/validations/inclusion.rb +47 -0
  1383. data/activemodel/lib/active_model/validations/length.rb +123 -0
  1384. data/activemodel/lib/active_model/validations/numericality.rb +165 -0
  1385. data/activemodel/lib/active_model/validations/presence.rb +39 -0
  1386. data/activemodel/lib/active_model/validations/validates.rb +174 -0
  1387. data/activemodel/lib/active_model/validations/with.rb +147 -0
  1388. data/activemodel/lib/active_model/validator.rb +183 -0
  1389. data/activemodel/lib/active_model/version.rb +10 -0
  1390. data/activemodel/test/cases/attribute_assignment_test.rb +131 -0
  1391. data/activemodel/test/cases/attribute_methods_test.rb +283 -0
  1392. data/activemodel/test/cases/callbacks_test.rb +134 -0
  1393. data/activemodel/test/cases/conversion_test.rb +52 -0
  1394. data/activemodel/test/cases/dirty_test.rb +222 -0
  1395. data/activemodel/test/cases/errors_test.rb +420 -0
  1396. data/activemodel/test/cases/forbidden_attributes_protection_test.rb +44 -0
  1397. data/activemodel/test/cases/helper.rb +25 -0
  1398. data/activemodel/test/cases/lint_test.rb +22 -0
  1399. data/activemodel/test/cases/model_test.rb +79 -0
  1400. data/activemodel/test/cases/naming_test.rb +282 -0
  1401. data/activemodel/test/cases/railtie_test.rb +34 -0
  1402. data/activemodel/test/cases/secure_password_test.rb +220 -0
  1403. data/activemodel/test/cases/serialization_test.rb +177 -0
  1404. data/activemodel/test/cases/serializers/json_serialization_test.rb +204 -0
  1405. data/activemodel/test/cases/translation_test.rb +113 -0
  1406. data/activemodel/test/cases/type/big_integer_test.rb +26 -0
  1407. data/activemodel/test/cases/type/binary_test.rb +17 -0
  1408. data/activemodel/test/cases/type/boolean_test.rb +41 -0
  1409. data/activemodel/test/cases/type/date_test.rb +21 -0
  1410. data/activemodel/test/cases/type/date_time_test.rb +40 -0
  1411. data/activemodel/test/cases/type/decimal_test.rb +74 -0
  1412. data/activemodel/test/cases/type/float_test.rb +32 -0
  1413. data/activemodel/test/cases/type/immutable_string_test.rb +23 -0
  1414. data/activemodel/test/cases/type/integer_test.rb +118 -0
  1415. data/activemodel/test/cases/type/registry_test.rb +43 -0
  1416. data/activemodel/test/cases/type/string_test.rb +39 -0
  1417. data/activemodel/test/cases/type/time_test.rb +23 -0
  1418. data/activemodel/test/cases/type/value_test.rb +16 -0
  1419. data/activemodel/test/cases/validations/absence_validation_test.rb +69 -0
  1420. data/activemodel/test/cases/validations/acceptance_validation_test.rb +88 -0
  1421. data/activemodel/test/cases/validations/callbacks_test.rb +145 -0
  1422. data/activemodel/test/cases/validations/conditional_validation_test.rb +149 -0
  1423. data/activemodel/test/cases/validations/confirmation_validation_test.rb +121 -0
  1424. data/activemodel/test/cases/validations/exclusion_validation_test.rb +109 -0
  1425. data/activemodel/test/cases/validations/format_validation_test.rb +149 -0
  1426. data/activemodel/test/cases/validations/i18n_generate_message_validation_test.rb +152 -0
  1427. data/activemodel/test/cases/validations/i18n_validation_test.rb +344 -0
  1428. data/activemodel/test/cases/validations/inclusion_validation_test.rb +161 -0
  1429. data/activemodel/test/cases/validations/length_validation_test.rb +413 -0
  1430. data/activemodel/test/cases/validations/numericality_validation_test.rb +305 -0
  1431. data/activemodel/test/cases/validations/presence_validation_test.rb +107 -0
  1432. data/activemodel/test/cases/validations/validates_test.rb +159 -0
  1433. data/activemodel/test/cases/validations/validations_context_test.rb +70 -0
  1434. data/activemodel/test/cases/validations/with_validation_test.rb +185 -0
  1435. data/activemodel/test/cases/validations_test.rb +465 -0
  1436. data/activemodel/test/models/account.rb +7 -0
  1437. data/activemodel/test/models/blog_post.rb +11 -0
  1438. data/activemodel/test/models/contact.rb +42 -0
  1439. data/activemodel/test/models/custom_reader.rb +17 -0
  1440. data/activemodel/test/models/helicopter.rb +9 -0
  1441. data/activemodel/test/models/person.rb +19 -0
  1442. data/activemodel/test/models/person_with_validator.rb +26 -0
  1443. data/activemodel/test/models/reply.rb +34 -0
  1444. data/activemodel/test/models/sheep.rb +5 -0
  1445. data/activemodel/test/models/topic.rb +41 -0
  1446. data/activemodel/test/models/track_back.rb +13 -0
  1447. data/activemodel/test/models/user.rb +12 -0
  1448. data/activemodel/test/models/visitor.rb +12 -0
  1449. data/activemodel/test/validators/email_validator.rb +8 -0
  1450. data/activemodel/test/validators/namespace/email_validator.rb +8 -0
  1451. data/activerecord/CHANGELOG.md +242 -0
  1452. data/activerecord/MIT-LICENSE +20 -0
  1453. data/activerecord/README.rdoc +217 -0
  1454. data/activerecord/RUNNING_UNIT_TESTS.rdoc +51 -0
  1455. data/activerecord/Rakefile +142 -0
  1456. data/activerecord/activerecord.gemspec +35 -0
  1457. data/activerecord/bin/test +20 -0
  1458. data/activerecord/examples/.gitignore +1 -0
  1459. data/activerecord/examples/performance.rb +185 -0
  1460. data/activerecord/examples/simple.rb +15 -0
  1461. data/activerecord/lib/active_record.rb +183 -0
  1462. data/activerecord/lib/active_record/aggregations.rb +284 -0
  1463. data/activerecord/lib/active_record/association_relation.rb +40 -0
  1464. data/activerecord/lib/active_record/associations.rb +1885 -0
  1465. data/activerecord/lib/active_record/associations/alias_tracker.rb +94 -0
  1466. data/activerecord/lib/active_record/associations/association.rb +284 -0
  1467. data/activerecord/lib/active_record/associations/association_scope.rb +181 -0
  1468. data/activerecord/lib/active_record/associations/belongs_to_association.rb +113 -0
  1469. data/activerecord/lib/active_record/associations/belongs_to_polymorphic_association.rb +42 -0
  1470. data/activerecord/lib/active_record/associations/builder/association.rb +145 -0
  1471. data/activerecord/lib/active_record/associations/builder/belongs_to.rb +150 -0
  1472. data/activerecord/lib/active_record/associations/builder/collection_association.rb +82 -0
  1473. data/activerecord/lib/active_record/associations/builder/has_and_belongs_to_many.rb +135 -0
  1474. data/activerecord/lib/active_record/associations/builder/has_many.rb +17 -0
  1475. data/activerecord/lib/active_record/associations/builder/has_one.rb +30 -0
  1476. data/activerecord/lib/active_record/associations/builder/singular_association.rb +42 -0
  1477. data/activerecord/lib/active_record/associations/collection_association.rb +505 -0
  1478. data/activerecord/lib/active_record/associations/collection_proxy.rb +1159 -0
  1479. data/activerecord/lib/active_record/associations/foreign_association.rb +13 -0
  1480. data/activerecord/lib/active_record/associations/has_many_association.rb +135 -0
  1481. data/activerecord/lib/active_record/associations/has_many_through_association.rb +216 -0
  1482. data/activerecord/lib/active_record/associations/has_one_association.rb +111 -0
  1483. data/activerecord/lib/active_record/associations/has_one_through_association.rb +42 -0
  1484. data/activerecord/lib/active_record/associations/join_dependency.rb +287 -0
  1485. data/activerecord/lib/active_record/associations/join_dependency/join_association.rb +61 -0
  1486. data/activerecord/lib/active_record/associations/join_dependency/join_base.rb +23 -0
  1487. data/activerecord/lib/active_record/associations/join_dependency/join_part.rb +64 -0
  1488. data/activerecord/lib/active_record/associations/preloader.rb +204 -0
  1489. data/activerecord/lib/active_record/associations/preloader/association.rb +133 -0
  1490. data/activerecord/lib/active_record/associations/preloader/belongs_to.rb +17 -0
  1491. data/activerecord/lib/active_record/associations/preloader/collection_association.rb +19 -0
  1492. data/activerecord/lib/active_record/associations/preloader/has_many.rb +17 -0
  1493. data/activerecord/lib/active_record/associations/preloader/has_many_through.rb +21 -0
  1494. data/activerecord/lib/active_record/associations/preloader/has_one.rb +17 -0
  1495. data/activerecord/lib/active_record/associations/preloader/has_one_through.rb +11 -0
  1496. data/activerecord/lib/active_record/associations/preloader/singular_association.rb +20 -0
  1497. data/activerecord/lib/active_record/associations/preloader/through_association.rb +111 -0
  1498. data/activerecord/lib/active_record/associations/singular_association.rb +79 -0
  1499. data/activerecord/lib/active_record/associations/through_association.rb +108 -0
  1500. data/activerecord/lib/active_record/attribute.rb +242 -0
  1501. data/activerecord/lib/active_record/attribute/user_provided_default.rb +32 -0
  1502. data/activerecord/lib/active_record/attribute_assignment.rb +93 -0
  1503. data/activerecord/lib/active_record/attribute_decorators.rb +90 -0
  1504. data/activerecord/lib/active_record/attribute_methods.rb +449 -0
  1505. data/activerecord/lib/active_record/attribute_methods/before_type_cast.rb +78 -0
  1506. data/activerecord/lib/active_record/attribute_methods/dirty.rb +251 -0
  1507. data/activerecord/lib/active_record/attribute_methods/primary_key.rb +141 -0
  1508. data/activerecord/lib/active_record/attribute_methods/query.rb +42 -0
  1509. data/activerecord/lib/active_record/attribute_methods/read.rb +84 -0
  1510. data/activerecord/lib/active_record/attribute_methods/serialization.rb +90 -0
  1511. data/activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb +91 -0
  1512. data/activerecord/lib/active_record/attribute_methods/write.rb +67 -0
  1513. data/activerecord/lib/active_record/attribute_mutation_tracker.rb +111 -0
  1514. data/activerecord/lib/active_record/attribute_set.rb +113 -0
  1515. data/activerecord/lib/active_record/attribute_set/builder.rb +126 -0
  1516. data/activerecord/lib/active_record/attribute_set/yaml_encoder.rb +43 -0
  1517. data/activerecord/lib/active_record/attributes.rb +266 -0
  1518. data/activerecord/lib/active_record/autosave_association.rb +490 -0
  1519. data/activerecord/lib/active_record/base.rb +329 -0
  1520. data/activerecord/lib/active_record/callbacks.rb +349 -0
  1521. data/activerecord/lib/active_record/coders/json.rb +15 -0
  1522. data/activerecord/lib/active_record/coders/yaml_column.rb +50 -0
  1523. data/activerecord/lib/active_record/collection_cache_key.rb +51 -0
  1524. data/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb +990 -0
  1525. data/activerecord/lib/active_record/connection_adapters/abstract/database_limits.rb +67 -0
  1526. data/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb +491 -0
  1527. data/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb +140 -0
  1528. data/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb +216 -0
  1529. data/activerecord/lib/active_record/connection_adapters/abstract/savepoints.rb +23 -0
  1530. data/activerecord/lib/active_record/connection_adapters/abstract/schema_creation.rb +145 -0
  1531. data/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb +654 -0
  1532. data/activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb +95 -0
  1533. data/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb +1378 -0
  1534. data/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb +274 -0
  1535. data/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb +599 -0
  1536. data/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +885 -0
  1537. data/activerecord/lib/active_record/connection_adapters/column.rb +91 -0
  1538. data/activerecord/lib/active_record/connection_adapters/connection_specification.rb +275 -0
  1539. data/activerecord/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb +24 -0
  1540. data/activerecord/lib/active_record/connection_adapters/mysql/column.rb +27 -0
  1541. data/activerecord/lib/active_record/connection_adapters/mysql/database_statements.rb +97 -0
  1542. data/activerecord/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +72 -0
  1543. data/activerecord/lib/active_record/connection_adapters/mysql/quoting.rb +44 -0
  1544. data/activerecord/lib/active_record/connection_adapters/mysql/schema_creation.rb +73 -0
  1545. data/activerecord/lib/active_record/connection_adapters/mysql/schema_definitions.rb +92 -0
  1546. data/activerecord/lib/active_record/connection_adapters/mysql/schema_dumper.rb +73 -0
  1547. data/activerecord/lib/active_record/connection_adapters/mysql/schema_statements.rb +139 -0
  1548. data/activerecord/lib/active_record/connection_adapters/mysql/type_metadata.rb +35 -0
  1549. data/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb +125 -0
  1550. data/activerecord/lib/active_record/connection_adapters/postgresql/column.rb +17 -0
  1551. data/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb +163 -0
  1552. data/activerecord/lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb +44 -0
  1553. data/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb +33 -0
  1554. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/array.rb +82 -0
  1555. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/bit.rb +56 -0
  1556. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb +15 -0
  1557. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +17 -0
  1558. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +50 -0
  1559. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +23 -0
  1560. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +15 -0
  1561. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/enum.rb +21 -0
  1562. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +71 -0
  1563. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/inet.rb +15 -0
  1564. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +15 -0
  1565. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/legacy_point.rb +45 -0
  1566. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/money.rb +41 -0
  1567. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/oid.rb +15 -0
  1568. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/point.rb +65 -0
  1569. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/range.rb +93 -0
  1570. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +18 -0
  1571. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +111 -0
  1572. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +23 -0
  1573. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/vector.rb +28 -0
  1574. data/activerecord/lib/active_record/connection_adapters/postgresql/oid/xml.rb +30 -0
  1575. data/activerecord/lib/active_record/connection_adapters/postgresql/quoting.rb +152 -0
  1576. data/activerecord/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +51 -0
  1577. data/activerecord/lib/active_record/connection_adapters/postgresql/schema_creation.rb +17 -0
  1578. data/activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +195 -0
  1579. data/activerecord/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +38 -0
  1580. data/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb +678 -0
  1581. data/activerecord/lib/active_record/connection_adapters/postgresql/type_metadata.rb +39 -0
  1582. data/activerecord/lib/active_record/connection_adapters/postgresql/utils.rb +81 -0
  1583. data/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +838 -0
  1584. data/activerecord/lib/active_record/connection_adapters/schema_cache.rb +118 -0
  1585. data/activerecord/lib/active_record/connection_adapters/sql_type_metadata.rb +34 -0
  1586. data/activerecord/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +21 -0
  1587. data/activerecord/lib/active_record/connection_adapters/sqlite3/quoting.rb +62 -0
  1588. data/activerecord/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +17 -0
  1589. data/activerecord/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +30 -0
  1590. data/activerecord/lib/active_record/connection_adapters/sqlite3/schema_dumper.rb +18 -0
  1591. data/activerecord/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +102 -0
  1592. data/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb +531 -0
  1593. data/activerecord/lib/active_record/connection_adapters/statement_pool.rb +61 -0
  1594. data/activerecord/lib/active_record/connection_handling.rb +145 -0
  1595. data/activerecord/lib/active_record/core.rb +560 -0
  1596. data/activerecord/lib/active_record/counter_cache.rb +214 -0
  1597. data/activerecord/lib/active_record/define_callbacks.rb +22 -0
  1598. data/activerecord/lib/active_record/dynamic_matchers.rb +122 -0
  1599. data/activerecord/lib/active_record/enum.rb +241 -0
  1600. data/activerecord/lib/active_record/errors.rb +342 -0
  1601. data/activerecord/lib/active_record/explain.rb +50 -0
  1602. data/activerecord/lib/active_record/explain_registry.rb +32 -0
  1603. data/activerecord/lib/active_record/explain_subscriber.rb +34 -0
  1604. data/activerecord/lib/active_record/fixture_set/file.rb +82 -0
  1605. data/activerecord/lib/active_record/fixtures.rb +1074 -0
  1606. data/activerecord/lib/active_record/gem_version.rb +17 -0
  1607. data/activerecord/lib/active_record/inheritance.rb +254 -0
  1608. data/activerecord/lib/active_record/integration.rb +155 -0
  1609. data/activerecord/lib/active_record/internal_metadata.rb +45 -0
  1610. data/activerecord/lib/active_record/legacy_yaml_adapter.rb +48 -0
  1611. data/activerecord/lib/active_record/locale/en.yml +48 -0
  1612. data/activerecord/lib/active_record/locking/optimistic.rb +212 -0
  1613. data/activerecord/lib/active_record/locking/pessimistic.rb +88 -0
  1614. data/activerecord/lib/active_record/log_subscriber.rb +96 -0
  1615. data/activerecord/lib/active_record/migration.rb +1340 -0
  1616. data/activerecord/lib/active_record/migration/command_recorder.rb +240 -0
  1617. data/activerecord/lib/active_record/migration/compatibility.rb +170 -0
  1618. data/activerecord/lib/active_record/migration/join_table.rb +17 -0
  1619. data/activerecord/lib/active_record/model_schema.rb +515 -0
  1620. data/activerecord/lib/active_record/nested_attributes.rb +589 -0
  1621. data/activerecord/lib/active_record/no_touching.rb +58 -0
  1622. data/activerecord/lib/active_record/null_relation.rb +68 -0
  1623. data/activerecord/lib/active_record/persistence.rb +623 -0
  1624. data/activerecord/lib/active_record/query_cache.rb +49 -0
  1625. data/activerecord/lib/active_record/querying.rb +70 -0
  1626. data/activerecord/lib/active_record/railtie.rb +214 -0
  1627. data/activerecord/lib/active_record/railties/console_sandbox.rb +7 -0
  1628. data/activerecord/lib/active_record/railties/controller_runtime.rb +56 -0
  1629. data/activerecord/lib/active_record/railties/databases.rake +369 -0
  1630. data/activerecord/lib/active_record/railties/jdbcmysql_error.rb +18 -0
  1631. data/activerecord/lib/active_record/readonly_attributes.rb +24 -0
  1632. data/activerecord/lib/active_record/reflection.rb +1102 -0
  1633. data/activerecord/lib/active_record/relation.rb +730 -0
  1634. data/activerecord/lib/active_record/relation/batches.rb +280 -0
  1635. data/activerecord/lib/active_record/relation/batches/batch_enumerator.rb +69 -0
  1636. data/activerecord/lib/active_record/relation/calculations.rb +407 -0
  1637. data/activerecord/lib/active_record/relation/delegation.rb +113 -0
  1638. data/activerecord/lib/active_record/relation/finder_methods.rb +566 -0
  1639. data/activerecord/lib/active_record/relation/from_clause.rb +26 -0
  1640. data/activerecord/lib/active_record/relation/merger.rb +168 -0
  1641. data/activerecord/lib/active_record/relation/predicate_builder.rb +133 -0
  1642. data/activerecord/lib/active_record/relation/predicate_builder/array_handler.rb +48 -0
  1643. data/activerecord/lib/active_record/relation/predicate_builder/association_query_value.rb +46 -0
  1644. data/activerecord/lib/active_record/relation/predicate_builder/base_handler.rb +19 -0
  1645. data/activerecord/lib/active_record/relation/predicate_builder/basic_object_handler.rb +20 -0
  1646. data/activerecord/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +54 -0
  1647. data/activerecord/lib/active_record/relation/predicate_builder/range_handler.rb +41 -0
  1648. data/activerecord/lib/active_record/relation/predicate_builder/relation_handler.rb +15 -0
  1649. data/activerecord/lib/active_record/relation/query_attribute.rb +26 -0
  1650. data/activerecord/lib/active_record/relation/query_methods.rb +1194 -0
  1651. data/activerecord/lib/active_record/relation/record_fetch_warning.rb +51 -0
  1652. data/activerecord/lib/active_record/relation/spawn_methods.rb +77 -0
  1653. data/activerecord/lib/active_record/relation/where_clause.rb +172 -0
  1654. data/activerecord/lib/active_record/relation/where_clause_factory.rb +35 -0
  1655. data/activerecord/lib/active_record/result.rb +149 -0
  1656. data/activerecord/lib/active_record/runtime_registry.rb +24 -0
  1657. data/activerecord/lib/active_record/sanitization.rb +216 -0
  1658. data/activerecord/lib/active_record/schema.rb +70 -0
  1659. data/activerecord/lib/active_record/schema_dumper.rb +254 -0
  1660. data/activerecord/lib/active_record/schema_migration.rb +56 -0
  1661. data/activerecord/lib/active_record/scoping.rb +106 -0
  1662. data/activerecord/lib/active_record/scoping/default.rb +152 -0
  1663. data/activerecord/lib/active_record/scoping/named.rb +199 -0
  1664. data/activerecord/lib/active_record/secure_token.rb +40 -0
  1665. data/activerecord/lib/active_record/serialization.rb +22 -0
  1666. data/activerecord/lib/active_record/statement_cache.rb +121 -0
  1667. data/activerecord/lib/active_record/store.rb +211 -0
  1668. data/activerecord/lib/active_record/suppressor.rb +61 -0
  1669. data/activerecord/lib/active_record/table_metadata.rb +75 -0
  1670. data/activerecord/lib/active_record/tasks/database_tasks.rb +327 -0
  1671. data/activerecord/lib/active_record/tasks/mysql_database_tasks.rb +162 -0
  1672. data/activerecord/lib/active_record/tasks/postgresql_database_tasks.rb +143 -0
  1673. data/activerecord/lib/active_record/tasks/sqlite_database_tasks.rb +83 -0
  1674. data/activerecord/lib/active_record/timestamp.rb +146 -0
  1675. data/activerecord/lib/active_record/touch_later.rb +64 -0
  1676. data/activerecord/lib/active_record/transactions.rb +499 -0
  1677. data/activerecord/lib/active_record/translation.rb +24 -0
  1678. data/activerecord/lib/active_record/type.rb +79 -0
  1679. data/activerecord/lib/active_record/type/adapter_specific_registry.rb +136 -0
  1680. data/activerecord/lib/active_record/type/date.rb +9 -0
  1681. data/activerecord/lib/active_record/type/date_time.rb +9 -0
  1682. data/activerecord/lib/active_record/type/decimal_without_scale.rb +15 -0
  1683. data/activerecord/lib/active_record/type/hash_lookup_type_map.rb +25 -0
  1684. data/activerecord/lib/active_record/type/internal/timezone.rb +17 -0
  1685. data/activerecord/lib/active_record/type/json.rb +30 -0
  1686. data/activerecord/lib/active_record/type/serialized.rb +67 -0
  1687. data/activerecord/lib/active_record/type/text.rb +11 -0
  1688. data/activerecord/lib/active_record/type/time.rb +21 -0
  1689. data/activerecord/lib/active_record/type/type_map.rb +62 -0
  1690. data/activerecord/lib/active_record/type/unsigned_integer.rb +17 -0
  1691. data/activerecord/lib/active_record/type_caster.rb +9 -0
  1692. data/activerecord/lib/active_record/type_caster/connection.rb +33 -0
  1693. data/activerecord/lib/active_record/type_caster/map.rb +23 -0
  1694. data/activerecord/lib/active_record/validations.rb +93 -0
  1695. data/activerecord/lib/active_record/validations/absence.rb +25 -0
  1696. data/activerecord/lib/active_record/validations/associated.rb +60 -0
  1697. data/activerecord/lib/active_record/validations/length.rb +26 -0
  1698. data/activerecord/lib/active_record/validations/presence.rb +68 -0
  1699. data/activerecord/lib/active_record/validations/uniqueness.rb +240 -0
  1700. data/activerecord/lib/active_record/version.rb +10 -0
  1701. data/activerecord/lib/rails/generators/active_record.rb +19 -0
  1702. data/activerecord/lib/rails/generators/active_record/application_record/application_record_generator.rb +27 -0
  1703. data/activerecord/lib/rails/generators/active_record/application_record/templates/application_record.rb +5 -0
  1704. data/activerecord/lib/rails/generators/active_record/migration.rb +35 -0
  1705. data/activerecord/lib/rails/generators/active_record/migration/migration_generator.rb +78 -0
  1706. data/activerecord/lib/rails/generators/active_record/migration/templates/create_table_migration.rb +24 -0
  1707. data/activerecord/lib/rails/generators/active_record/migration/templates/migration.rb +46 -0
  1708. data/activerecord/lib/rails/generators/active_record/model/model_generator.rb +48 -0
  1709. data/activerecord/lib/rails/generators/active_record/model/templates/model.rb +13 -0
  1710. data/activerecord/lib/rails/generators/active_record/model/templates/module.rb +7 -0
  1711. data/activerecord/test/.gitignore +1 -0
  1712. data/activerecord/test/active_record/connection_adapters/fake_adapter.rb +51 -0
  1713. data/activerecord/test/assets/example.log +1 -0
  1714. data/activerecord/test/assets/flowers.jpg +0 -0
  1715. data/activerecord/test/assets/schema_dump_5_1.yml +345 -0
  1716. data/activerecord/test/assets/test.txt +1 -0
  1717. data/activerecord/test/cases/adapter_test.rb +404 -0
  1718. data/activerecord/test/cases/adapters/mysql2/active_schema_test.rb +195 -0
  1719. data/activerecord/test/cases/adapters/mysql2/bind_parameter_test.rb +52 -0
  1720. data/activerecord/test/cases/adapters/mysql2/boolean_test.rb +102 -0
  1721. data/activerecord/test/cases/adapters/mysql2/case_sensitivity_test.rb +65 -0
  1722. data/activerecord/test/cases/adapters/mysql2/charset_collation_test.rb +56 -0
  1723. data/activerecord/test/cases/adapters/mysql2/connection_test.rb +225 -0
  1724. data/activerecord/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +54 -0
  1725. data/activerecord/test/cases/adapters/mysql2/enum_test.rb +23 -0
  1726. data/activerecord/test/cases/adapters/mysql2/explain_test.rb +23 -0
  1727. data/activerecord/test/cases/adapters/mysql2/json_test.rb +24 -0
  1728. data/activerecord/test/cases/adapters/mysql2/mysql2_adapter_test.rb +77 -0
  1729. data/activerecord/test/cases/adapters/mysql2/schema_migrations_test.rb +65 -0
  1730. data/activerecord/test/cases/adapters/mysql2/schema_test.rb +128 -0
  1731. data/activerecord/test/cases/adapters/mysql2/sp_test.rb +38 -0
  1732. data/activerecord/test/cases/adapters/mysql2/sql_types_test.rb +16 -0
  1733. data/activerecord/test/cases/adapters/mysql2/table_options_test.rb +44 -0
  1734. data/activerecord/test/cases/adapters/mysql2/transaction_test.rb +69 -0
  1735. data/activerecord/test/cases/adapters/mysql2/unsigned_type_test.rb +68 -0
  1736. data/activerecord/test/cases/adapters/mysql2/virtual_column_test.rb +61 -0
  1737. data/activerecord/test/cases/adapters/postgresql/active_schema_test.rb +100 -0
  1738. data/activerecord/test/cases/adapters/postgresql/array_test.rb +388 -0
  1739. data/activerecord/test/cases/adapters/postgresql/bit_string_test.rb +84 -0
  1740. data/activerecord/test/cases/adapters/postgresql/bytea_test.rb +137 -0
  1741. data/activerecord/test/cases/adapters/postgresql/case_insensitive_test.rb +28 -0
  1742. data/activerecord/test/cases/adapters/postgresql/change_schema_test.rb +40 -0
  1743. data/activerecord/test/cases/adapters/postgresql/cidr_test.rb +27 -0
  1744. data/activerecord/test/cases/adapters/postgresql/citext_test.rb +80 -0
  1745. data/activerecord/test/cases/adapters/postgresql/collation_test.rb +55 -0
  1746. data/activerecord/test/cases/adapters/postgresql/composite_test.rb +134 -0
  1747. data/activerecord/test/cases/adapters/postgresql/connection_test.rb +272 -0
  1748. data/activerecord/test/cases/adapters/postgresql/datatype_test.rb +93 -0
  1749. data/activerecord/test/cases/adapters/postgresql/domain_test.rb +49 -0
  1750. data/activerecord/test/cases/adapters/postgresql/enum_test.rb +93 -0
  1751. data/activerecord/test/cases/adapters/postgresql/explain_test.rb +22 -0
  1752. data/activerecord/test/cases/adapters/postgresql/extension_migration_test.rb +65 -0
  1753. data/activerecord/test/cases/adapters/postgresql/full_text_test.rb +46 -0
  1754. data/activerecord/test/cases/adapters/postgresql/geometric_test.rb +373 -0
  1755. data/activerecord/test/cases/adapters/postgresql/hstore_test.rb +380 -0
  1756. data/activerecord/test/cases/adapters/postgresql/infinity_test.rb +71 -0
  1757. data/activerecord/test/cases/adapters/postgresql/integer_test.rb +27 -0
  1758. data/activerecord/test/cases/adapters/postgresql/json_test.rb +52 -0
  1759. data/activerecord/test/cases/adapters/postgresql/ltree_test.rb +55 -0
  1760. data/activerecord/test/cases/adapters/postgresql/money_test.rb +98 -0
  1761. data/activerecord/test/cases/adapters/postgresql/network_test.rb +96 -0
  1762. data/activerecord/test/cases/adapters/postgresql/numbers_test.rb +51 -0
  1763. data/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb +390 -0
  1764. data/activerecord/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
  1765. data/activerecord/test/cases/adapters/postgresql/quoting_test.rb +45 -0
  1766. data/activerecord/test/cases/adapters/postgresql/range_test.rb +351 -0
  1767. data/activerecord/test/cases/adapters/postgresql/referential_integrity_test.rb +113 -0
  1768. data/activerecord/test/cases/adapters/postgresql/rename_table_test.rb +36 -0
  1769. data/activerecord/test/cases/adapters/postgresql/schema_authorization_test.rb +110 -0
  1770. data/activerecord/test/cases/adapters/postgresql/schema_test.rb +592 -0
  1771. data/activerecord/test/cases/adapters/postgresql/serial_test.rb +88 -0
  1772. data/activerecord/test/cases/adapters/postgresql/statement_pool_test.rb +43 -0
  1773. data/activerecord/test/cases/adapters/postgresql/timestamp_test.rb +92 -0
  1774. data/activerecord/test/cases/adapters/postgresql/transaction_test.rb +104 -0
  1775. data/activerecord/test/cases/adapters/postgresql/type_lookup_test.rb +35 -0
  1776. data/activerecord/test/cases/adapters/postgresql/utils_test.rb +64 -0
  1777. data/activerecord/test/cases/adapters/postgresql/uuid_test.rb +376 -0
  1778. data/activerecord/test/cases/adapters/postgresql/xml_test.rb +56 -0
  1779. data/activerecord/test/cases/adapters/sqlite3/collation_test.rb +55 -0
  1780. data/activerecord/test/cases/adapters/sqlite3/copy_table_test.rb +101 -0
  1781. data/activerecord/test/cases/adapters/sqlite3/explain_test.rb +23 -0
  1782. data/activerecord/test/cases/adapters/sqlite3/quoting_test.rb +58 -0
  1783. data/activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +421 -0
  1784. data/activerecord/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +26 -0
  1785. data/activerecord/test/cases/adapters/sqlite3/statement_pool_test.rb +21 -0
  1786. data/activerecord/test/cases/aggregations_test.rb +170 -0
  1787. data/activerecord/test/cases/ar_schema_test.rb +145 -0
  1788. data/activerecord/test/cases/associations/belongs_to_associations_test.rb +1196 -0
  1789. data/activerecord/test/cases/associations/bidirectional_destroy_dependencies_test.rb +43 -0
  1790. data/activerecord/test/cases/associations/callbacks_test.rb +191 -0
  1791. data/activerecord/test/cases/associations/cascaded_eager_loading_test.rb +184 -0
  1792. data/activerecord/test/cases/associations/eager_load_includes_full_sti_class_test.rb +44 -0
  1793. data/activerecord/test/cases/associations/eager_load_nested_include_test.rb +126 -0
  1794. data/activerecord/test/cases/associations/eager_singularization_test.rb +148 -0
  1795. data/activerecord/test/cases/associations/eager_test.rb +1500 -0
  1796. data/activerecord/test/cases/associations/extension_test.rb +94 -0
  1797. data/activerecord/test/cases/associations/has_and_belongs_to_many_associations_test.rb +1033 -0
  1798. data/activerecord/test/cases/associations/has_many_associations_test.rb +2619 -0
  1799. data/activerecord/test/cases/associations/has_many_through_associations_test.rb +1309 -0
  1800. data/activerecord/test/cases/associations/has_one_associations_test.rb +727 -0
  1801. data/activerecord/test/cases/associations/has_one_through_associations_test.rb +392 -0
  1802. data/activerecord/test/cases/associations/inner_join_association_test.rb +141 -0
  1803. data/activerecord/test/cases/associations/inverse_associations_test.rb +727 -0
  1804. data/activerecord/test/cases/associations/join_model_test.rb +778 -0
  1805. data/activerecord/test/cases/associations/left_outer_join_association_test.rb +90 -0
  1806. data/activerecord/test/cases/associations/nested_through_associations_test.rb +581 -0
  1807. data/activerecord/test/cases/associations/required_test.rb +132 -0
  1808. data/activerecord/test/cases/associations_test.rb +370 -0
  1809. data/activerecord/test/cases/attribute_decorators_test.rb +127 -0
  1810. data/activerecord/test/cases/attribute_methods/read_test.rb +61 -0
  1811. data/activerecord/test/cases/attribute_methods_test.rb +1038 -0
  1812. data/activerecord/test/cases/attribute_set_test.rb +255 -0
  1813. data/activerecord/test/cases/attribute_test.rb +255 -0
  1814. data/activerecord/test/cases/attributes_test.rb +269 -0
  1815. data/activerecord/test/cases/autosave_association_test.rb +1738 -0
  1816. data/activerecord/test/cases/base_test.rb +1460 -0
  1817. data/activerecord/test/cases/batches_test.rb +676 -0
  1818. data/activerecord/test/cases/binary_test.rb +46 -0
  1819. data/activerecord/test/cases/bind_parameter_test.rb +108 -0
  1820. data/activerecord/test/cases/cache_key_test.rb +53 -0
  1821. data/activerecord/test/cases/calculations_test.rb +894 -0
  1822. data/activerecord/test/cases/callbacks_test.rb +479 -0
  1823. data/activerecord/test/cases/clone_test.rb +42 -0
  1824. data/activerecord/test/cases/coders/json_test.rb +17 -0
  1825. data/activerecord/test/cases/coders/yaml_column_test.rb +66 -0
  1826. data/activerecord/test/cases/collection_cache_key_test.rb +117 -0
  1827. data/activerecord/test/cases/column_alias_test.rb +19 -0
  1828. data/activerecord/test/cases/column_definition_test.rb +34 -0
  1829. data/activerecord/test/cases/comment_test.rb +146 -0
  1830. data/activerecord/test/cases/connection_adapters/adapter_leasing_test.rb +58 -0
  1831. data/activerecord/test/cases/connection_adapters/connection_handler_test.rb +232 -0
  1832. data/activerecord/test/cases/connection_adapters/connection_specification_test.rb +14 -0
  1833. data/activerecord/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +257 -0
  1834. data/activerecord/test/cases/connection_adapters/mysql_type_lookup_test.rb +78 -0
  1835. data/activerecord/test/cases/connection_adapters/schema_cache_test.rb +101 -0
  1836. data/activerecord/test/cases/connection_adapters/type_lookup_test.rb +120 -0
  1837. data/activerecord/test/cases/connection_management_test.rb +114 -0
  1838. data/activerecord/test/cases/connection_pool_test.rb +569 -0
  1839. data/activerecord/test/cases/connection_specification/resolver_test.rb +137 -0
  1840. data/activerecord/test/cases/core_test.rb +114 -0
  1841. data/activerecord/test/cases/counter_cache_test.rb +367 -0
  1842. data/activerecord/test/cases/custom_locking_test.rb +19 -0
  1843. data/activerecord/test/cases/database_statements_test.rb +37 -0
  1844. data/activerecord/test/cases/date_test.rb +46 -0
  1845. data/activerecord/test/cases/date_time_precision_test.rb +89 -0
  1846. data/activerecord/test/cases/date_time_test.rb +76 -0
  1847. data/activerecord/test/cases/defaults_test.rb +209 -0
  1848. data/activerecord/test/cases/dirty_test.rb +871 -0
  1849. data/activerecord/test/cases/disconnected_test.rb +32 -0
  1850. data/activerecord/test/cases/dup_test.rb +161 -0
  1851. data/activerecord/test/cases/enum_test.rb +493 -0
  1852. data/activerecord/test/cases/errors_test.rb +18 -0
  1853. data/activerecord/test/cases/explain_subscriber_test.rb +66 -0
  1854. data/activerecord/test/cases/explain_test.rb +89 -0
  1855. data/activerecord/test/cases/finder_respond_to_test.rb +61 -0
  1856. data/activerecord/test/cases/finder_test.rb +1282 -0
  1857. data/activerecord/test/cases/fixture_set/file_test.rb +158 -0
  1858. data/activerecord/test/cases/fixtures_test.rb +1096 -0
  1859. data/activerecord/test/cases/forbidden_attributes_protection_test.rb +166 -0
  1860. data/activerecord/test/cases/habtm_destroy_order_test.rb +63 -0
  1861. data/activerecord/test/cases/helper.rb +187 -0
  1862. data/activerecord/test/cases/hot_compatibility_test.rb +144 -0
  1863. data/activerecord/test/cases/i18n_test.rb +46 -0
  1864. data/activerecord/test/cases/inheritance_test.rb +613 -0
  1865. data/activerecord/test/cases/integration_test.rb +234 -0
  1866. data/activerecord/test/cases/invalid_connection_test.rb +26 -0
  1867. data/activerecord/test/cases/invertible_migration_test.rb +380 -0
  1868. data/activerecord/test/cases/json_attribute_test.rb +35 -0
  1869. data/activerecord/test/cases/json_serialization_test.rb +311 -0
  1870. data/activerecord/test/cases/json_shared_test_cases.rb +256 -0
  1871. data/activerecord/test/cases/locking_test.rb +651 -0
  1872. data/activerecord/test/cases/log_subscriber_test.rb +219 -0
  1873. data/activerecord/test/cases/migration/change_schema_test.rb +468 -0
  1874. data/activerecord/test/cases/migration/change_table_test.rb +258 -0
  1875. data/activerecord/test/cases/migration/column_attributes_test.rb +188 -0
  1876. data/activerecord/test/cases/migration/column_positioning_test.rb +58 -0
  1877. data/activerecord/test/cases/migration/columns_test.rb +319 -0
  1878. data/activerecord/test/cases/migration/command_recorder_test.rb +347 -0
  1879. data/activerecord/test/cases/migration/compatibility_test.rb +238 -0
  1880. data/activerecord/test/cases/migration/create_join_table_test.rb +168 -0
  1881. data/activerecord/test/cases/migration/foreign_key_test.rb +339 -0
  1882. data/activerecord/test/cases/migration/helper.rb +41 -0
  1883. data/activerecord/test/cases/migration/index_test.rb +218 -0
  1884. data/activerecord/test/cases/migration/logger_test.rb +38 -0
  1885. data/activerecord/test/cases/migration/pending_migrations_test.rb +42 -0
  1886. data/activerecord/test/cases/migration/references_foreign_key_test.rb +257 -0
  1887. data/activerecord/test/cases/migration/references_index_test.rb +103 -0
  1888. data/activerecord/test/cases/migration/references_statements_test.rb +138 -0
  1889. data/activerecord/test/cases/migration/rename_table_test.rb +118 -0
  1890. data/activerecord/test/cases/migration_test.rb +1122 -0
  1891. data/activerecord/test/cases/migrator_test.rb +473 -0
  1892. data/activerecord/test/cases/mixin_test.rb +64 -0
  1893. data/activerecord/test/cases/modules_test.rb +174 -0
  1894. data/activerecord/test/cases/multiparameter_attributes_test.rb +399 -0
  1895. data/activerecord/test/cases/multiple_db_test.rb +119 -0
  1896. data/activerecord/test/cases/nested_attributes_test.rb +1097 -0
  1897. data/activerecord/test/cases/nested_attributes_with_callbacks_test.rb +146 -0
  1898. data/activerecord/test/cases/null_relation_test.rb +84 -0
  1899. data/activerecord/test/cases/numeric_data_test.rb +73 -0
  1900. data/activerecord/test/cases/persistence_test.rb +1063 -0
  1901. data/activerecord/test/cases/pooled_connections_test.rb +83 -0
  1902. data/activerecord/test/cases/primary_keys_test.rb +466 -0
  1903. data/activerecord/test/cases/query_cache_test.rb +577 -0
  1904. data/activerecord/test/cases/quoting_test.rb +275 -0
  1905. data/activerecord/test/cases/readonly_test.rb +120 -0
  1906. data/activerecord/test/cases/reaper_test.rb +87 -0
  1907. data/activerecord/test/cases/reflection_test.rb +533 -0
  1908. data/activerecord/test/cases/relation/delegation_test.rb +57 -0
  1909. data/activerecord/test/cases/relation/merging_test.rb +157 -0
  1910. data/activerecord/test/cases/relation/mutation_test.rb +145 -0
  1911. data/activerecord/test/cases/relation/or_test.rb +130 -0
  1912. data/activerecord/test/cases/relation/predicate_builder_test.rb +18 -0
  1913. data/activerecord/test/cases/relation/record_fetch_warning_test.rb +42 -0
  1914. data/activerecord/test/cases/relation/where_chain_test.rb +107 -0
  1915. data/activerecord/test/cases/relation/where_clause_test.rb +241 -0
  1916. data/activerecord/test/cases/relation/where_test.rb +366 -0
  1917. data/activerecord/test/cases/relation_test.rb +331 -0
  1918. data/activerecord/test/cases/relations_test.rb +1923 -0
  1919. data/activerecord/test/cases/reload_models_test.rb +26 -0
  1920. data/activerecord/test/cases/reserved_word_test.rb +134 -0
  1921. data/activerecord/test/cases/result_test.rb +90 -0
  1922. data/activerecord/test/cases/sanitize_test.rb +182 -0
  1923. data/activerecord/test/cases/schema_dumper_test.rb +507 -0
  1924. data/activerecord/test/cases/schema_loading_test.rb +54 -0
  1925. data/activerecord/test/cases/scoping/default_scoping_test.rb +547 -0
  1926. data/activerecord/test/cases/scoping/named_scoping_test.rb +577 -0
  1927. data/activerecord/test/cases/scoping/relation_scoping_test.rb +402 -0
  1928. data/activerecord/test/cases/secure_token_test.rb +34 -0
  1929. data/activerecord/test/cases/serialization_test.rb +106 -0
  1930. data/activerecord/test/cases/serialized_attribute_test.rb +382 -0
  1931. data/activerecord/test/cases/statement_cache_test.rb +137 -0
  1932. data/activerecord/test/cases/store_test.rb +197 -0
  1933. data/activerecord/test/cases/suppressor_test.rb +77 -0
  1934. data/activerecord/test/cases/tasks/database_tasks_test.rb +491 -0
  1935. data/activerecord/test/cases/tasks/mysql_rake_test.rb +388 -0
  1936. data/activerecord/test/cases/tasks/postgresql_rake_test.rb +374 -0
  1937. data/activerecord/test/cases/tasks/sqlite_rake_test.rb +267 -0
  1938. data/activerecord/test/cases/test_case.rb +138 -0
  1939. data/activerecord/test/cases/test_fixtures_test.rb +20 -0
  1940. data/activerecord/test/cases/time_precision_test.rb +85 -0
  1941. data/activerecord/test/cases/timestamp_test.rb +478 -0
  1942. data/activerecord/test/cases/touch_later_test.rb +123 -0
  1943. data/activerecord/test/cases/transaction_callbacks_test.rb +595 -0
  1944. data/activerecord/test/cases/transaction_isolation_test.rb +108 -0
  1945. data/activerecord/test/cases/transactions_test.rb +1030 -0
  1946. data/activerecord/test/cases/type/adapter_specific_registry_test.rb +135 -0
  1947. data/activerecord/test/cases/type/date_time_test.rb +16 -0
  1948. data/activerecord/test/cases/type/integer_test.rb +29 -0
  1949. data/activerecord/test/cases/type/string_test.rb +24 -0
  1950. data/activerecord/test/cases/type/type_map_test.rb +178 -0
  1951. data/activerecord/test/cases/type/unsigned_integer_test.rb +19 -0
  1952. data/activerecord/test/cases/type_test.rb +41 -0
  1953. data/activerecord/test/cases/types_test.rb +26 -0
  1954. data/activerecord/test/cases/unconnected_test.rb +35 -0
  1955. data/activerecord/test/cases/validations/absence_validation_test.rb +75 -0
  1956. data/activerecord/test/cases/validations/association_validation_test.rb +99 -0
  1957. data/activerecord/test/cases/validations/i18n_generate_message_validation_test.rb +86 -0
  1958. data/activerecord/test/cases/validations/i18n_validation_test.rb +85 -0
  1959. data/activerecord/test/cases/validations/length_validation_test.rb +80 -0
  1960. data/activerecord/test/cases/validations/presence_validation_test.rb +105 -0
  1961. data/activerecord/test/cases/validations/uniqueness_validation_test.rb +557 -0
  1962. data/activerecord/test/cases/validations_repair_helper.rb +21 -0
  1963. data/activerecord/test/cases/validations_test.rb +196 -0
  1964. data/activerecord/test/cases/view_test.rb +224 -0
  1965. data/activerecord/test/cases/yaml_serialization_test.rb +141 -0
  1966. data/activerecord/test/config.example.yml +100 -0
  1967. data/activerecord/test/config.rb +7 -0
  1968. data/activerecord/test/fixtures/.gitignore +1 -0
  1969. data/activerecord/test/fixtures/accounts.yml +29 -0
  1970. data/activerecord/test/fixtures/admin/accounts.yml +2 -0
  1971. data/activerecord/test/fixtures/admin/randomly_named_a9.yml +7 -0
  1972. data/activerecord/test/fixtures/admin/randomly_named_b0.yml +7 -0
  1973. data/activerecord/test/fixtures/admin/users.yml +10 -0
  1974. data/activerecord/test/fixtures/all/admin +1 -0
  1975. data/activerecord/test/fixtures/all/developers.yml +0 -0
  1976. data/activerecord/test/fixtures/all/namespaced/accounts.yml +2 -0
  1977. data/activerecord/test/fixtures/all/people.yml +0 -0
  1978. data/activerecord/test/fixtures/all/tasks.yml +0 -0
  1979. data/activerecord/test/fixtures/author_addresses.yml +11 -0
  1980. data/activerecord/test/fixtures/author_favorites.yml +4 -0
  1981. data/activerecord/test/fixtures/authors.yml +17 -0
  1982. data/activerecord/test/fixtures/bad_posts.yml +9 -0
  1983. data/activerecord/test/fixtures/binaries.yml +137 -0
  1984. data/activerecord/test/fixtures/books.yml +33 -0
  1985. data/activerecord/test/fixtures/bulbs.yml +5 -0
  1986. data/activerecord/test/fixtures/cars.yml +9 -0
  1987. data/activerecord/test/fixtures/categories.yml +19 -0
  1988. data/activerecord/test/fixtures/categories/special_categories.yml +9 -0
  1989. data/activerecord/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -0
  1990. data/activerecord/test/fixtures/categories_ordered.yml +7 -0
  1991. data/activerecord/test/fixtures/categories_posts.yml +31 -0
  1992. data/activerecord/test/fixtures/categorizations.yml +23 -0
  1993. data/activerecord/test/fixtures/clubs.yml +8 -0
  1994. data/activerecord/test/fixtures/collections.yml +3 -0
  1995. data/activerecord/test/fixtures/colleges.yml +3 -0
  1996. data/activerecord/test/fixtures/comments.yml +65 -0
  1997. data/activerecord/test/fixtures/companies.yml +67 -0
  1998. data/activerecord/test/fixtures/computers.yml +10 -0
  1999. data/activerecord/test/fixtures/content.yml +3 -0
  2000. data/activerecord/test/fixtures/content_positions.yml +3 -0
  2001. data/activerecord/test/fixtures/courses.yml +8 -0
  2002. data/activerecord/test/fixtures/customers.yml +26 -0
  2003. data/activerecord/test/fixtures/dashboards.yml +6 -0
  2004. data/activerecord/test/fixtures/dead_parrots.yml +5 -0
  2005. data/activerecord/test/fixtures/developers.yml +22 -0
  2006. data/activerecord/test/fixtures/developers_projects.yml +17 -0
  2007. data/activerecord/test/fixtures/dog_lovers.yml +7 -0
  2008. data/activerecord/test/fixtures/dogs.yml +4 -0
  2009. data/activerecord/test/fixtures/doubloons.yml +3 -0
  2010. data/activerecord/test/fixtures/edges.yml +5 -0
  2011. data/activerecord/test/fixtures/entrants.yml +14 -0
  2012. data/activerecord/test/fixtures/essays.yml +6 -0
  2013. data/activerecord/test/fixtures/faces.yml +11 -0
  2014. data/activerecord/test/fixtures/fk_test_has_fk.yml +3 -0
  2015. data/activerecord/test/fixtures/fk_test_has_pk.yml +2 -0
  2016. data/activerecord/test/fixtures/friendships.yml +4 -0
  2017. data/activerecord/test/fixtures/funny_jokes.yml +10 -0
  2018. data/activerecord/test/fixtures/interests.yml +33 -0
  2019. data/activerecord/test/fixtures/items.yml +3 -0
  2020. data/activerecord/test/fixtures/jobs.yml +7 -0
  2021. data/activerecord/test/fixtures/legacy_things.yml +3 -0
  2022. data/activerecord/test/fixtures/live_parrots.yml +4 -0
  2023. data/activerecord/test/fixtures/mateys.yml +4 -0
  2024. data/activerecord/test/fixtures/member_details.yml +8 -0
  2025. data/activerecord/test/fixtures/member_types.yml +6 -0
  2026. data/activerecord/test/fixtures/members.yml +11 -0
  2027. data/activerecord/test/fixtures/memberships.yml +34 -0
  2028. data/activerecord/test/fixtures/men.yml +5 -0
  2029. data/activerecord/test/fixtures/minimalistics.yml +2 -0
  2030. data/activerecord/test/fixtures/minivans.yml +5 -0
  2031. data/activerecord/test/fixtures/mixed_case_monkeys.yml +6 -0
  2032. data/activerecord/test/fixtures/mixins.yml +29 -0
  2033. data/activerecord/test/fixtures/movies.yml +7 -0
  2034. data/activerecord/test/fixtures/naked/yml/accounts.yml +1 -0
  2035. data/activerecord/test/fixtures/naked/yml/companies.yml +1 -0
  2036. data/activerecord/test/fixtures/naked/yml/courses.yml +1 -0
  2037. data/activerecord/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
  2038. data/activerecord/test/fixtures/naked/yml/parrots.yml +3 -0
  2039. data/activerecord/test/fixtures/naked/yml/trees.yml +3 -0
  2040. data/activerecord/test/fixtures/nodes.yml +29 -0
  2041. data/activerecord/test/fixtures/organizations.yml +5 -0
  2042. data/activerecord/test/fixtures/other_comments.yml +6 -0
  2043. data/activerecord/test/fixtures/other_dogs.yml +2 -0
  2044. data/activerecord/test/fixtures/other_posts.yml +7 -0
  2045. data/activerecord/test/fixtures/other_topics.yml +42 -0
  2046. data/activerecord/test/fixtures/owners.yml +9 -0
  2047. data/activerecord/test/fixtures/parrots.yml +27 -0
  2048. data/activerecord/test/fixtures/parrots_pirates.yml +7 -0
  2049. data/activerecord/test/fixtures/people.yml +24 -0
  2050. data/activerecord/test/fixtures/peoples_treasures.yml +3 -0
  2051. data/activerecord/test/fixtures/pets.yml +19 -0
  2052. data/activerecord/test/fixtures/pirates.yml +15 -0
  2053. data/activerecord/test/fixtures/posts.yml +80 -0
  2054. data/activerecord/test/fixtures/price_estimates.yml +16 -0
  2055. data/activerecord/test/fixtures/products.yml +4 -0
  2056. data/activerecord/test/fixtures/projects.yml +7 -0
  2057. data/activerecord/test/fixtures/randomly_named_a9.yml +7 -0
  2058. data/activerecord/test/fixtures/ratings.yml +14 -0
  2059. data/activerecord/test/fixtures/readers.yml +11 -0
  2060. data/activerecord/test/fixtures/references.yml +17 -0
  2061. data/activerecord/test/fixtures/reserved_words/distinct.yml +5 -0
  2062. data/activerecord/test/fixtures/reserved_words/distinct_select.yml +11 -0
  2063. data/activerecord/test/fixtures/reserved_words/group.yml +14 -0
  2064. data/activerecord/test/fixtures/reserved_words/select.yml +8 -0
  2065. data/activerecord/test/fixtures/reserved_words/values.yml +7 -0
  2066. data/activerecord/test/fixtures/ships.yml +6 -0
  2067. data/activerecord/test/fixtures/speedometers.yml +8 -0
  2068. data/activerecord/test/fixtures/sponsors.yml +12 -0
  2069. data/activerecord/test/fixtures/string_key_objects.yml +7 -0
  2070. data/activerecord/test/fixtures/subscribers.yml +11 -0
  2071. data/activerecord/test/fixtures/subscriptions.yml +12 -0
  2072. data/activerecord/test/fixtures/taggings.yml +78 -0
  2073. data/activerecord/test/fixtures/tags.yml +11 -0
  2074. data/activerecord/test/fixtures/tasks.yml +7 -0
  2075. data/activerecord/test/fixtures/teapots.yml +3 -0
  2076. data/activerecord/test/fixtures/to_be_linked/accounts.yml +2 -0
  2077. data/activerecord/test/fixtures/to_be_linked/users.yml +10 -0
  2078. data/activerecord/test/fixtures/topics.yml +49 -0
  2079. data/activerecord/test/fixtures/toys.yml +14 -0
  2080. data/activerecord/test/fixtures/traffic_lights.yml +10 -0
  2081. data/activerecord/test/fixtures/treasures.yml +10 -0
  2082. data/activerecord/test/fixtures/trees.yml +3 -0
  2083. data/activerecord/test/fixtures/uuid_children.yml +3 -0
  2084. data/activerecord/test/fixtures/uuid_parents.yml +2 -0
  2085. data/activerecord/test/fixtures/variants.yml +4 -0
  2086. data/activerecord/test/fixtures/vegetables.yml +20 -0
  2087. data/activerecord/test/fixtures/vertices.yml +4 -0
  2088. data/activerecord/test/fixtures/warehouse-things.yml +3 -0
  2089. data/activerecord/test/fixtures/zines.yml +5 -0
  2090. data/activerecord/test/migrations/10_urban/9_add_expressions.rb +13 -0
  2091. data/activerecord/test/migrations/decimal/1_give_me_big_numbers.rb +17 -0
  2092. data/activerecord/test/migrations/empty/.gitkeep +0 -0
  2093. data/activerecord/test/migrations/magic/1_currencies_have_symbols.rb +13 -0
  2094. data/activerecord/test/migrations/missing/1000_people_have_middle_names.rb +11 -0
  2095. data/activerecord/test/migrations/missing/1_people_have_last_names.rb +11 -0
  2096. data/activerecord/test/migrations/missing/3_we_need_reminders.rb +14 -0
  2097. data/activerecord/test/migrations/missing/4_innocent_jointable.rb +14 -0
  2098. data/activerecord/test/migrations/rename/1_we_need_things.rb +13 -0
  2099. data/activerecord/test/migrations/rename/2_rename_things.rb +11 -0
  2100. data/activerecord/test/migrations/to_copy/1_people_have_hobbies.rb +11 -0
  2101. data/activerecord/test/migrations/to_copy/2_people_have_descriptions.rb +11 -0
  2102. data/activerecord/test/migrations/to_copy2/1_create_articles.rb +9 -0
  2103. data/activerecord/test/migrations/to_copy2/2_create_comments.rb +9 -0
  2104. data/activerecord/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +11 -0
  2105. data/activerecord/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +11 -0
  2106. data/activerecord/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +11 -0
  2107. data/activerecord/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +9 -0
  2108. data/activerecord/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +9 -0
  2109. data/activerecord/test/migrations/valid/1_valid_people_have_last_names.rb +11 -0
  2110. data/activerecord/test/migrations/valid/2_we_need_reminders.rb +14 -0
  2111. data/activerecord/test/migrations/valid/3_innocent_jointable.rb +14 -0
  2112. data/activerecord/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +11 -0
  2113. data/activerecord/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +14 -0
  2114. data/activerecord/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +14 -0
  2115. data/activerecord/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +11 -0
  2116. data/activerecord/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +14 -0
  2117. data/activerecord/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +14 -0
  2118. data/activerecord/test/migrations/version_check/20131219224947_migration_version_check.rb +10 -0
  2119. data/activerecord/test/models/account.rb +34 -0
  2120. data/activerecord/test/models/admin.rb +7 -0
  2121. data/activerecord/test/models/admin/account.rb +5 -0
  2122. data/activerecord/test/models/admin/randomly_named_c1.rb +9 -0
  2123. data/activerecord/test/models/admin/user.rb +42 -0
  2124. data/activerecord/test/models/aircraft.rb +7 -0
  2125. data/activerecord/test/models/arunit2_model.rb +5 -0
  2126. data/activerecord/test/models/author.rb +211 -0
  2127. data/activerecord/test/models/auto_id.rb +6 -0
  2128. data/activerecord/test/models/autoloadable/extra_firm.rb +4 -0
  2129. data/activerecord/test/models/binary.rb +4 -0
  2130. data/activerecord/test/models/bird.rb +14 -0
  2131. data/activerecord/test/models/book.rb +26 -0
  2132. data/activerecord/test/models/boolean.rb +7 -0
  2133. data/activerecord/test/models/bulb.rb +54 -0
  2134. data/activerecord/test/models/cake_designer.rb +5 -0
  2135. data/activerecord/test/models/car.rb +31 -0
  2136. data/activerecord/test/models/carrier.rb +4 -0
  2137. data/activerecord/test/models/cat.rb +12 -0
  2138. data/activerecord/test/models/categorization.rb +21 -0
  2139. data/activerecord/test/models/category.rb +46 -0
  2140. data/activerecord/test/models/chef.rb +10 -0
  2141. data/activerecord/test/models/citation.rb +5 -0
  2142. data/activerecord/test/models/club.rb +27 -0
  2143. data/activerecord/test/models/college.rb +12 -0
  2144. data/activerecord/test/models/column.rb +5 -0
  2145. data/activerecord/test/models/column_name.rb +5 -0
  2146. data/activerecord/test/models/comment.rb +88 -0
  2147. data/activerecord/test/models/company.rb +190 -0
  2148. data/activerecord/test/models/company_in_module.rb +100 -0
  2149. data/activerecord/test/models/computer.rb +5 -0
  2150. data/activerecord/test/models/contact.rb +43 -0
  2151. data/activerecord/test/models/content.rb +42 -0
  2152. data/activerecord/test/models/contract.rb +22 -0
  2153. data/activerecord/test/models/country.rb +7 -0
  2154. data/activerecord/test/models/course.rb +8 -0
  2155. data/activerecord/test/models/customer.rb +85 -0
  2156. data/activerecord/test/models/customer_carrier.rb +16 -0
  2157. data/activerecord/test/models/dashboard.rb +5 -0
  2158. data/activerecord/test/models/default.rb +4 -0
  2159. data/activerecord/test/models/department.rb +6 -0
  2160. data/activerecord/test/models/developer.rb +270 -0
  2161. data/activerecord/test/models/dog.rb +7 -0
  2162. data/activerecord/test/models/dog_lover.rb +7 -0
  2163. data/activerecord/test/models/doubloon.rb +14 -0
  2164. data/activerecord/test/models/drink_designer.rb +5 -0
  2165. data/activerecord/test/models/edge.rb +7 -0
  2166. data/activerecord/test/models/electron.rb +7 -0
  2167. data/activerecord/test/models/engine.rb +5 -0
  2168. data/activerecord/test/models/entrant.rb +5 -0
  2169. data/activerecord/test/models/essay.rb +8 -0
  2170. data/activerecord/test/models/event.rb +5 -0
  2171. data/activerecord/test/models/eye.rb +39 -0
  2172. data/activerecord/test/models/face.rb +11 -0
  2173. data/activerecord/test/models/family.rb +6 -0
  2174. data/activerecord/test/models/family_tree.rb +6 -0
  2175. data/activerecord/test/models/friendship.rb +8 -0
  2176. data/activerecord/test/models/guid.rb +4 -0
  2177. data/activerecord/test/models/guitar.rb +6 -0
  2178. data/activerecord/test/models/hotel.rb +13 -0
  2179. data/activerecord/test/models/image.rb +5 -0
  2180. data/activerecord/test/models/interest.rb +7 -0
  2181. data/activerecord/test/models/invoice.rb +6 -0
  2182. data/activerecord/test/models/item.rb +9 -0
  2183. data/activerecord/test/models/job.rb +9 -0
  2184. data/activerecord/test/models/joke.rb +9 -0
  2185. data/activerecord/test/models/keyboard.rb +5 -0
  2186. data/activerecord/test/models/legacy_thing.rb +5 -0
  2187. data/activerecord/test/models/lesson.rb +13 -0
  2188. data/activerecord/test/models/line_item.rb +5 -0
  2189. data/activerecord/test/models/liquid.rb +6 -0
  2190. data/activerecord/test/models/man.rb +13 -0
  2191. data/activerecord/test/models/matey.rb +6 -0
  2192. data/activerecord/test/models/member.rb +44 -0
  2193. data/activerecord/test/models/member_detail.rb +10 -0
  2194. data/activerecord/test/models/member_type.rb +5 -0
  2195. data/activerecord/test/models/membership.rb +38 -0
  2196. data/activerecord/test/models/mentor.rb +5 -0
  2197. data/activerecord/test/models/minimalistic.rb +4 -0
  2198. data/activerecord/test/models/minivan.rb +10 -0
  2199. data/activerecord/test/models/mixed_case_monkey.rb +5 -0
  2200. data/activerecord/test/models/mocktail_designer.rb +4 -0
  2201. data/activerecord/test/models/molecule.rb +8 -0
  2202. data/activerecord/test/models/movie.rb +7 -0
  2203. data/activerecord/test/models/node.rb +7 -0
  2204. data/activerecord/test/models/non_primary_key.rb +4 -0
  2205. data/activerecord/test/models/notification.rb +5 -0
  2206. data/activerecord/test/models/numeric_data.rb +10 -0
  2207. data/activerecord/test/models/order.rb +6 -0
  2208. data/activerecord/test/models/organization.rb +16 -0
  2209. data/activerecord/test/models/other_dog.rb +7 -0
  2210. data/activerecord/test/models/owner.rb +39 -0
  2211. data/activerecord/test/models/parrot.rb +30 -0
  2212. data/activerecord/test/models/person.rb +143 -0
  2213. data/activerecord/test/models/personal_legacy_thing.rb +6 -0
  2214. data/activerecord/test/models/pet.rb +20 -0
  2215. data/activerecord/test/models/pet_treasure.rb +8 -0
  2216. data/activerecord/test/models/pirate.rb +94 -0
  2217. data/activerecord/test/models/possession.rb +5 -0
  2218. data/activerecord/test/models/post.rb +322 -0
  2219. data/activerecord/test/models/price_estimate.rb +6 -0
  2220. data/activerecord/test/models/professor.rb +7 -0
  2221. data/activerecord/test/models/project.rb +42 -0
  2222. data/activerecord/test/models/publisher.rb +4 -0
  2223. data/activerecord/test/models/publisher/article.rb +6 -0
  2224. data/activerecord/test/models/publisher/magazine.rb +5 -0
  2225. data/activerecord/test/models/randomly_named_c1.rb +5 -0
  2226. data/activerecord/test/models/rating.rb +6 -0
  2227. data/activerecord/test/models/reader.rb +25 -0
  2228. data/activerecord/test/models/recipe.rb +5 -0
  2229. data/activerecord/test/models/record.rb +4 -0
  2230. data/activerecord/test/models/reference.rb +24 -0
  2231. data/activerecord/test/models/reply.rb +63 -0
  2232. data/activerecord/test/models/ship.rb +41 -0
  2233. data/activerecord/test/models/ship_part.rb +10 -0
  2234. data/activerecord/test/models/shop.rb +19 -0
  2235. data/activerecord/test/models/shop_account.rb +8 -0
  2236. data/activerecord/test/models/speedometer.rb +8 -0
  2237. data/activerecord/test/models/sponsor.rb +9 -0
  2238. data/activerecord/test/models/string_key_object.rb +5 -0
  2239. data/activerecord/test/models/student.rb +6 -0
  2240. data/activerecord/test/models/subscriber.rb +10 -0
  2241. data/activerecord/test/models/subscription.rb +6 -0
  2242. data/activerecord/test/models/tag.rb +15 -0
  2243. data/activerecord/test/models/tagging.rb +15 -0
  2244. data/activerecord/test/models/task.rb +7 -0
  2245. data/activerecord/test/models/topic.rb +120 -0
  2246. data/activerecord/test/models/toy.rb +8 -0
  2247. data/activerecord/test/models/traffic_light.rb +6 -0
  2248. data/activerecord/test/models/treasure.rb +16 -0
  2249. data/activerecord/test/models/treaty.rb +7 -0
  2250. data/activerecord/test/models/tree.rb +5 -0
  2251. data/activerecord/test/models/tuning_peg.rb +6 -0
  2252. data/activerecord/test/models/tyre.rb +13 -0
  2253. data/activerecord/test/models/user.rb +20 -0
  2254. data/activerecord/test/models/uuid_child.rb +5 -0
  2255. data/activerecord/test/models/uuid_item.rb +8 -0
  2256. data/activerecord/test/models/uuid_parent.rb +5 -0
  2257. data/activerecord/test/models/vegetables.rb +25 -0
  2258. data/activerecord/test/models/vehicle.rb +9 -0
  2259. data/activerecord/test/models/vertex.rb +11 -0
  2260. data/activerecord/test/models/warehouse_thing.rb +7 -0
  2261. data/activerecord/test/models/wheel.rb +5 -0
  2262. data/activerecord/test/models/without_table.rb +5 -0
  2263. data/activerecord/test/models/zine.rb +5 -0
  2264. data/activerecord/test/schema/mysql2_specific_schema.rb +75 -0
  2265. data/activerecord/test/schema/oracle_specific_schema.rb +42 -0
  2266. data/activerecord/test/schema/postgresql_specific_schema.rb +112 -0
  2267. data/activerecord/test/schema/schema.rb +1081 -0
  2268. data/activerecord/test/support/config.rb +46 -0
  2269. data/activerecord/test/support/connection.rb +28 -0
  2270. data/activerecord/test/support/connection_helper.rb +16 -0
  2271. data/activerecord/test/support/ddl_helper.rb +10 -0
  2272. data/activerecord/test/support/schema_dumping_helper.rb +22 -0
  2273. data/activerecord/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
  2274. data/activerecord/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
  2275. data/activestorage/.babelrc +5 -0
  2276. data/activestorage/.eslintrc +19 -0
  2277. data/activestorage/.gitignore +6 -0
  2278. data/activestorage/CHANGELOG.md +3 -0
  2279. data/activestorage/MIT-LICENSE +20 -0
  2280. data/activestorage/README.md +141 -0
  2281. data/activestorage/Rakefile +14 -0
  2282. data/activestorage/activestorage.gemspec +30 -0
  2283. data/activestorage/app/assets/javascripts/activestorage.js +1 -0
  2284. data/activestorage/app/controllers/active_storage/blobs_controller.rb +25 -0
  2285. data/activestorage/app/controllers/active_storage/direct_uploads_controller.rb +23 -0
  2286. data/activestorage/app/controllers/active_storage/disk_controller.rb +53 -0
  2287. data/activestorage/app/controllers/active_storage/variants_controller.rb +29 -0
  2288. data/activestorage/app/javascript/activestorage/blob_record.js +54 -0
  2289. data/activestorage/app/javascript/activestorage/blob_upload.js +34 -0
  2290. data/activestorage/app/javascript/activestorage/direct_upload.js +42 -0
  2291. data/activestorage/app/javascript/activestorage/direct_upload_controller.js +67 -0
  2292. data/activestorage/app/javascript/activestorage/direct_uploads_controller.js +50 -0
  2293. data/activestorage/app/javascript/activestorage/file_checksum.js +53 -0
  2294. data/activestorage/app/javascript/activestorage/helpers.js +42 -0
  2295. data/activestorage/app/javascript/activestorage/index.js +11 -0
  2296. data/activestorage/app/javascript/activestorage/ujs.js +74 -0
  2297. data/activestorage/app/jobs/active_storage/purge_job.rb +11 -0
  2298. data/activestorage/app/models/active_storage/attachment.rb +28 -0
  2299. data/activestorage/app/models/active_storage/blob.rb +199 -0
  2300. data/activestorage/app/models/active_storage/filename.rb +65 -0
  2301. data/activestorage/app/models/active_storage/filename/parameters.rb +36 -0
  2302. data/activestorage/app/models/active_storage/variant.rb +82 -0
  2303. data/activestorage/app/models/active_storage/variation.rb +55 -0
  2304. data/activestorage/bin/test +5 -0
  2305. data/activestorage/config/routes.rb +30 -0
  2306. data/activestorage/db/migrate/20170806125915_create_active_storage_tables.rb +25 -0
  2307. data/activestorage/lib/active_storage.rb +38 -0
  2308. data/activestorage/lib/active_storage/attached.rb +40 -0
  2309. data/activestorage/lib/active_storage/attached/macros.rb +82 -0
  2310. data/activestorage/lib/active_storage/attached/many.rb +55 -0
  2311. data/activestorage/lib/active_storage/attached/one.rb +76 -0
  2312. data/activestorage/lib/active_storage/engine.rb +65 -0
  2313. data/activestorage/lib/active_storage/gem_version.rb +17 -0
  2314. data/activestorage/lib/active_storage/log_subscriber.rb +52 -0
  2315. data/activestorage/lib/active_storage/service.rb +117 -0
  2316. data/activestorage/lib/active_storage/service/azure_storage_service.rb +124 -0
  2317. data/activestorage/lib/active_storage/service/configurator.rb +32 -0
  2318. data/activestorage/lib/active_storage/service/disk_service.rb +128 -0
  2319. data/activestorage/lib/active_storage/service/gcs_service.rb +83 -0
  2320. data/activestorage/lib/active_storage/service/mirror_service.rb +50 -0
  2321. data/activestorage/lib/active_storage/service/s3_service.rb +100 -0
  2322. data/activestorage/lib/active_storage/version.rb +10 -0
  2323. data/activestorage/lib/tasks/activestorage.rake +8 -0
  2324. data/activestorage/package.json +33 -0
  2325. data/activestorage/test/controllers/blobs_controller_test.rb +17 -0
  2326. data/activestorage/test/controllers/direct_uploads_controller_test.rb +124 -0
  2327. data/activestorage/test/controllers/disk_controller_test.rb +59 -0
  2328. data/activestorage/test/controllers/variants_controller_test.rb +23 -0
  2329. data/activestorage/test/database/create_users_migration.rb +9 -0
  2330. data/activestorage/test/database/setup.rb +7 -0
  2331. data/activestorage/test/dummy/Rakefile +5 -0
  2332. data/activestorage/test/dummy/app/assets/config/manifest.js +5 -0
  2333. data/activestorage/test/dummy/app/assets/images/.keep +0 -0
  2334. data/activestorage/test/dummy/app/assets/javascripts/application.js +13 -0
  2335. data/activestorage/test/dummy/app/assets/stylesheets/application.css +15 -0
  2336. data/activestorage/test/dummy/app/controllers/application_controller.rb +5 -0
  2337. data/activestorage/test/dummy/app/controllers/concerns/.keep +0 -0
  2338. data/activestorage/test/dummy/app/helpers/application_helper.rb +4 -0
  2339. data/activestorage/test/dummy/app/jobs/application_job.rb +4 -0
  2340. data/activestorage/test/dummy/app/models/application_record.rb +5 -0
  2341. data/activestorage/test/dummy/app/models/concerns/.keep +0 -0
  2342. data/activestorage/test/dummy/app/views/layouts/application.html.erb +14 -0
  2343. data/activestorage/test/dummy/bin/bundle +5 -0
  2344. data/activestorage/test/dummy/bin/rails +6 -0
  2345. data/activestorage/test/dummy/bin/rake +6 -0
  2346. data/activestorage/test/dummy/bin/yarn +13 -0
  2347. data/activestorage/test/dummy/config.ru +7 -0
  2348. data/activestorage/test/dummy/config/application.rb +26 -0
  2349. data/activestorage/test/dummy/config/boot.rb +7 -0
  2350. data/activestorage/test/dummy/config/database.yml +25 -0
  2351. data/activestorage/test/dummy/config/environment.rb +7 -0
  2352. data/activestorage/test/dummy/config/environments/development.rb +51 -0
  2353. data/activestorage/test/dummy/config/environments/production.rb +84 -0
  2354. data/activestorage/test/dummy/config/environments/test.rb +35 -0
  2355. data/activestorage/test/dummy/config/initializers/application_controller_renderer.rb +7 -0
  2356. data/activestorage/test/dummy/config/initializers/assets.rb +16 -0
  2357. data/activestorage/test/dummy/config/initializers/backtrace_silencers.rb +8 -0
  2358. data/activestorage/test/dummy/config/initializers/cookies_serializer.rb +7 -0
  2359. data/activestorage/test/dummy/config/initializers/filter_parameter_logging.rb +6 -0
  2360. data/activestorage/test/dummy/config/initializers/inflections.rb +17 -0
  2361. data/activestorage/test/dummy/config/initializers/mime_types.rb +5 -0
  2362. data/activestorage/test/dummy/config/initializers/wrap_parameters.rb +16 -0
  2363. data/activestorage/test/dummy/config/routes.rb +4 -0
  2364. data/activestorage/test/dummy/config/secrets.yml +32 -0
  2365. data/activestorage/test/dummy/config/spring.rb +8 -0
  2366. data/activestorage/test/dummy/config/storage.yml +3 -0
  2367. data/activestorage/test/dummy/lib/assets/.keep +0 -0
  2368. data/activestorage/test/dummy/log/.keep +0 -0
  2369. data/activestorage/test/dummy/package.json +5 -0
  2370. data/activestorage/test/dummy/public/404.html +67 -0
  2371. data/activestorage/test/dummy/public/422.html +67 -0
  2372. data/activestorage/test/dummy/public/500.html +66 -0
  2373. data/activestorage/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
  2374. data/activestorage/test/dummy/public/apple-touch-icon.png +0 -0
  2375. data/activestorage/test/dummy/public/favicon.ico +0 -0
  2376. data/activestorage/test/fixtures/files/racecar.jpg +0 -0
  2377. data/activestorage/test/models/attachments_test.rb +150 -0
  2378. data/activestorage/test/models/blob_test.rb +56 -0
  2379. data/activestorage/test/models/filename/parameters_test.rb +32 -0
  2380. data/activestorage/test/models/filename_test.rb +56 -0
  2381. data/activestorage/test/models/variant_test.rb +29 -0
  2382. data/activestorage/test/service/azure_storage_service_test.rb +22 -0
  2383. data/activestorage/test/service/configurations.yml +30 -0
  2384. data/activestorage/test/service/configurations.yml.enc +0 -0
  2385. data/activestorage/test/service/configurator_test.rb +16 -0
  2386. data/activestorage/test/service/disk_service_test.rb +14 -0
  2387. data/activestorage/test/service/gcs_service_test.rb +46 -0
  2388. data/activestorage/test/service/mirror_service_test.rb +64 -0
  2389. data/activestorage/test/service/s3_service_test.rb +59 -0
  2390. data/activestorage/test/service/shared_service_tests.rb +69 -0
  2391. data/activestorage/test/template/image_tag_test.rb +38 -0
  2392. data/activestorage/test/test_helper.rb +69 -0
  2393. data/activestorage/webpack.config.js +27 -0
  2394. data/activestorage/yarn.lock +3164 -0
  2395. data/activesupport/CHANGELOG.md +190 -0
  2396. data/activesupport/MIT-LICENSE +20 -0
  2397. data/activesupport/README.rdoc +39 -0
  2398. data/activesupport/Rakefile +23 -0
  2399. data/activesupport/activesupport.gemspec +34 -0
  2400. data/activesupport/bin/generate_tables +141 -0
  2401. data/activesupport/bin/test +5 -0
  2402. data/activesupport/lib/active_support.rb +106 -0
  2403. data/activesupport/lib/active_support/all.rb +5 -0
  2404. data/activesupport/lib/active_support/array_inquirer.rb +48 -0
  2405. data/activesupport/lib/active_support/backtrace_cleaner.rb +105 -0
  2406. data/activesupport/lib/active_support/benchmarkable.rb +51 -0
  2407. data/activesupport/lib/active_support/builder.rb +8 -0
  2408. data/activesupport/lib/active_support/cache.rb +759 -0
  2409. data/activesupport/lib/active_support/cache/file_store.rb +197 -0
  2410. data/activesupport/lib/active_support/cache/mem_cache_store.rb +205 -0
  2411. data/activesupport/lib/active_support/cache/memory_store.rb +169 -0
  2412. data/activesupport/lib/active_support/cache/null_store.rb +43 -0
  2413. data/activesupport/lib/active_support/cache/strategy/local_cache.rb +170 -0
  2414. data/activesupport/lib/active_support/cache/strategy/local_cache_middleware.rb +45 -0
  2415. data/activesupport/lib/active_support/callbacks.rb +856 -0
  2416. data/activesupport/lib/active_support/concern.rb +144 -0
  2417. data/activesupport/lib/active_support/concurrency/share_lock.rb +227 -0
  2418. data/activesupport/lib/active_support/configurable.rb +150 -0
  2419. data/activesupport/lib/active_support/core_ext.rb +5 -0
  2420. data/activesupport/lib/active_support/core_ext/array.rb +9 -0
  2421. data/activesupport/lib/active_support/core_ext/array/access.rb +92 -0
  2422. data/activesupport/lib/active_support/core_ext/array/conversions.rb +213 -0
  2423. data/activesupport/lib/active_support/core_ext/array/extract_options.rb +31 -0
  2424. data/activesupport/lib/active_support/core_ext/array/grouping.rb +109 -0
  2425. data/activesupport/lib/active_support/core_ext/array/inquiry.rb +19 -0
  2426. data/activesupport/lib/active_support/core_ext/array/prepend_and_append.rb +9 -0
  2427. data/activesupport/lib/active_support/core_ext/array/wrap.rb +48 -0
  2428. data/activesupport/lib/active_support/core_ext/benchmark.rb +16 -0
  2429. data/activesupport/lib/active_support/core_ext/big_decimal.rb +3 -0
  2430. data/activesupport/lib/active_support/core_ext/big_decimal/conversions.rb +14 -0
  2431. data/activesupport/lib/active_support/core_ext/class.rb +4 -0
  2432. data/activesupport/lib/active_support/core_ext/class/attribute.rb +149 -0
  2433. data/activesupport/lib/active_support/core_ext/class/attribute_accessors.rb +6 -0
  2434. data/activesupport/lib/active_support/core_ext/class/subclasses.rb +57 -0
  2435. data/activesupport/lib/active_support/core_ext/date.rb +7 -0
  2436. data/activesupport/lib/active_support/core_ext/date/acts_like.rb +10 -0
  2437. data/activesupport/lib/active_support/core_ext/date/blank.rb +14 -0
  2438. data/activesupport/lib/active_support/core_ext/date/calculations.rb +145 -0
  2439. data/activesupport/lib/active_support/core_ext/date/conversions.rb +100 -0
  2440. data/activesupport/lib/active_support/core_ext/date/zones.rb +8 -0
  2441. data/activesupport/lib/active_support/core_ext/date_and_time/calculations.rb +358 -0
  2442. data/activesupport/lib/active_support/core_ext/date_and_time/compatibility.rb +16 -0
  2443. data/activesupport/lib/active_support/core_ext/date_and_time/zones.rb +41 -0
  2444. data/activesupport/lib/active_support/core_ext/date_time.rb +7 -0
  2445. data/activesupport/lib/active_support/core_ext/date_time/acts_like.rb +16 -0
  2446. data/activesupport/lib/active_support/core_ext/date_time/blank.rb +14 -0
  2447. data/activesupport/lib/active_support/core_ext/date_time/calculations.rb +211 -0
  2448. data/activesupport/lib/active_support/core_ext/date_time/compatibility.rb +18 -0
  2449. data/activesupport/lib/active_support/core_ext/date_time/conversions.rb +107 -0
  2450. data/activesupport/lib/active_support/core_ext/digest/uuid.rb +53 -0
  2451. data/activesupport/lib/active_support/core_ext/enumerable.rb +159 -0
  2452. data/activesupport/lib/active_support/core_ext/file.rb +3 -0
  2453. data/activesupport/lib/active_support/core_ext/file/atomic.rb +70 -0
  2454. data/activesupport/lib/active_support/core_ext/hash.rb +11 -0
  2455. data/activesupport/lib/active_support/core_ext/hash/compact.rb +29 -0
  2456. data/activesupport/lib/active_support/core_ext/hash/conversions.rb +263 -0
  2457. data/activesupport/lib/active_support/core_ext/hash/deep_merge.rb +34 -0
  2458. data/activesupport/lib/active_support/core_ext/hash/except.rb +24 -0
  2459. data/activesupport/lib/active_support/core_ext/hash/indifferent_access.rb +24 -0
  2460. data/activesupport/lib/active_support/core_ext/hash/keys.rb +172 -0
  2461. data/activesupport/lib/active_support/core_ext/hash/reverse_merge.rb +25 -0
  2462. data/activesupport/lib/active_support/core_ext/hash/slice.rb +50 -0
  2463. data/activesupport/lib/active_support/core_ext/hash/transform_values.rb +32 -0
  2464. data/activesupport/lib/active_support/core_ext/integer.rb +5 -0
  2465. data/activesupport/lib/active_support/core_ext/integer/inflections.rb +31 -0
  2466. data/activesupport/lib/active_support/core_ext/integer/multiple.rb +12 -0
  2467. data/activesupport/lib/active_support/core_ext/integer/time.rb +31 -0
  2468. data/activesupport/lib/active_support/core_ext/kernel.rb +6 -0
  2469. data/activesupport/lib/active_support/core_ext/kernel/agnostics.rb +13 -0
  2470. data/activesupport/lib/active_support/core_ext/kernel/concern.rb +14 -0
  2471. data/activesupport/lib/active_support/core_ext/kernel/reporting.rb +45 -0
  2472. data/activesupport/lib/active_support/core_ext/kernel/singleton_class.rb +8 -0
  2473. data/activesupport/lib/active_support/core_ext/load_error.rb +9 -0
  2474. data/activesupport/lib/active_support/core_ext/marshal.rb +24 -0
  2475. data/activesupport/lib/active_support/core_ext/module.rb +13 -0
  2476. data/activesupport/lib/active_support/core_ext/module/aliasing.rb +31 -0
  2477. data/activesupport/lib/active_support/core_ext/module/anonymous.rb +30 -0
  2478. data/activesupport/lib/active_support/core_ext/module/attr_internal.rb +38 -0
  2479. data/activesupport/lib/active_support/core_ext/module/attribute_accessors.rb +215 -0
  2480. data/activesupport/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb +150 -0
  2481. data/activesupport/lib/active_support/core_ext/module/concerning.rb +137 -0
  2482. data/activesupport/lib/active_support/core_ext/module/delegation.rb +290 -0
  2483. data/activesupport/lib/active_support/core_ext/module/deprecation.rb +25 -0
  2484. data/activesupport/lib/active_support/core_ext/module/introspection.rb +62 -0
  2485. data/activesupport/lib/active_support/core_ext/module/reachable.rb +10 -0
  2486. data/activesupport/lib/active_support/core_ext/module/remove_method.rb +37 -0
  2487. data/activesupport/lib/active_support/core_ext/name_error.rb +33 -0
  2488. data/activesupport/lib/active_support/core_ext/numeric.rb +6 -0
  2489. data/activesupport/lib/active_support/core_ext/numeric/bytes.rb +66 -0
  2490. data/activesupport/lib/active_support/core_ext/numeric/conversions.rb +140 -0
  2491. data/activesupport/lib/active_support/core_ext/numeric/inquiry.rb +28 -0
  2492. data/activesupport/lib/active_support/core_ext/numeric/time.rb +76 -0
  2493. data/activesupport/lib/active_support/core_ext/object.rb +16 -0
  2494. data/activesupport/lib/active_support/core_ext/object/acts_like.rb +12 -0
  2495. data/activesupport/lib/active_support/core_ext/object/blank.rb +147 -0
  2496. data/activesupport/lib/active_support/core_ext/object/conversions.rb +6 -0
  2497. data/activesupport/lib/active_support/core_ext/object/deep_dup.rb +55 -0
  2498. data/activesupport/lib/active_support/core_ext/object/duplicable.rb +156 -0
  2499. data/activesupport/lib/active_support/core_ext/object/inclusion.rb +29 -0
  2500. data/activesupport/lib/active_support/core_ext/object/instance_variables.rb +30 -0
  2501. data/activesupport/lib/active_support/core_ext/object/json.rb +221 -0
  2502. data/activesupport/lib/active_support/core_ext/object/to_param.rb +3 -0
  2503. data/activesupport/lib/active_support/core_ext/object/to_query.rb +86 -0
  2504. data/activesupport/lib/active_support/core_ext/object/try.rb +148 -0
  2505. data/activesupport/lib/active_support/core_ext/object/with_options.rb +82 -0
  2506. data/activesupport/lib/active_support/core_ext/range.rb +6 -0
  2507. data/activesupport/lib/active_support/core_ext/range/conversions.rb +33 -0
  2508. data/activesupport/lib/active_support/core_ext/range/each.rb +23 -0
  2509. data/activesupport/lib/active_support/core_ext/range/include_range.rb +25 -0
  2510. data/activesupport/lib/active_support/core_ext/range/overlaps.rb +10 -0
  2511. data/activesupport/lib/active_support/core_ext/regexp.rb +11 -0
  2512. data/activesupport/lib/active_support/core_ext/securerandom.rb +25 -0
  2513. data/activesupport/lib/active_support/core_ext/string.rb +15 -0
  2514. data/activesupport/lib/active_support/core_ext/string/access.rb +106 -0
  2515. data/activesupport/lib/active_support/core_ext/string/behavior.rb +8 -0
  2516. data/activesupport/lib/active_support/core_ext/string/conversions.rb +59 -0
  2517. data/activesupport/lib/active_support/core_ext/string/exclude.rb +13 -0
  2518. data/activesupport/lib/active_support/core_ext/string/filters.rb +104 -0
  2519. data/activesupport/lib/active_support/core_ext/string/indent.rb +45 -0
  2520. data/activesupport/lib/active_support/core_ext/string/inflections.rb +254 -0
  2521. data/activesupport/lib/active_support/core_ext/string/inquiry.rb +15 -0
  2522. data/activesupport/lib/active_support/core_ext/string/multibyte.rb +55 -0
  2523. data/activesupport/lib/active_support/core_ext/string/output_safety.rb +261 -0
  2524. data/activesupport/lib/active_support/core_ext/string/starts_ends_with.rb +6 -0
  2525. data/activesupport/lib/active_support/core_ext/string/strip.rb +25 -0
  2526. data/activesupport/lib/active_support/core_ext/string/zones.rb +16 -0
  2527. data/activesupport/lib/active_support/core_ext/time.rb +7 -0
  2528. data/activesupport/lib/active_support/core_ext/time/acts_like.rb +10 -0
  2529. data/activesupport/lib/active_support/core_ext/time/calculations.rb +315 -0
  2530. data/activesupport/lib/active_support/core_ext/time/compatibility.rb +16 -0
  2531. data/activesupport/lib/active_support/core_ext/time/conversions.rb +72 -0
  2532. data/activesupport/lib/active_support/core_ext/time/zones.rb +113 -0
  2533. data/activesupport/lib/active_support/core_ext/uri.rb +26 -0
  2534. data/activesupport/lib/active_support/current_attributes.rb +195 -0
  2535. data/activesupport/lib/active_support/dependencies.rb +744 -0
  2536. data/activesupport/lib/active_support/dependencies/autoload.rb +79 -0
  2537. data/activesupport/lib/active_support/dependencies/interlock.rb +57 -0
  2538. data/activesupport/lib/active_support/deprecation.rb +46 -0
  2539. data/activesupport/lib/active_support/deprecation/behaviors.rb +105 -0
  2540. data/activesupport/lib/active_support/deprecation/constant_accessor.rb +52 -0
  2541. data/activesupport/lib/active_support/deprecation/instance_delegator.rb +39 -0
  2542. data/activesupport/lib/active_support/deprecation/method_wrappers.rb +72 -0
  2543. data/activesupport/lib/active_support/deprecation/proxy_wrappers.rb +153 -0
  2544. data/activesupport/lib/active_support/deprecation/reporting.rb +114 -0
  2545. data/activesupport/lib/active_support/descendants_tracker.rb +62 -0
  2546. data/activesupport/lib/active_support/duration.rb +422 -0
  2547. data/activesupport/lib/active_support/duration/iso8601_parser.rb +125 -0
  2548. data/activesupport/lib/active_support/duration/iso8601_serializer.rb +55 -0
  2549. data/activesupport/lib/active_support/evented_file_update_checker.rb +205 -0
  2550. data/activesupport/lib/active_support/execution_wrapper.rb +128 -0
  2551. data/activesupport/lib/active_support/executor.rb +8 -0
  2552. data/activesupport/lib/active_support/file_update_checker.rb +163 -0
  2553. data/activesupport/lib/active_support/gem_version.rb +17 -0
  2554. data/activesupport/lib/active_support/gzip.rb +38 -0
  2555. data/activesupport/lib/active_support/hash_with_indifferent_access.rb +358 -0
  2556. data/activesupport/lib/active_support/i18n.rb +15 -0
  2557. data/activesupport/lib/active_support/i18n_railtie.rb +114 -0
  2558. data/activesupport/lib/active_support/inflections.rb +72 -0
  2559. data/activesupport/lib/active_support/inflector.rb +9 -0
  2560. data/activesupport/lib/active_support/inflector/inflections.rb +246 -0
  2561. data/activesupport/lib/active_support/inflector/methods.rb +408 -0
  2562. data/activesupport/lib/active_support/inflector/transliterate.rb +112 -0
  2563. data/activesupport/lib/active_support/json.rb +4 -0
  2564. data/activesupport/lib/active_support/json/decoding.rb +76 -0
  2565. data/activesupport/lib/active_support/json/encoding.rb +130 -0
  2566. data/activesupport/lib/active_support/key_generator.rb +73 -0
  2567. data/activesupport/lib/active_support/lazy_load_hooks.rb +78 -0
  2568. data/activesupport/lib/active_support/locale/en.yml +135 -0
  2569. data/activesupport/lib/active_support/log_subscriber.rb +112 -0
  2570. data/activesupport/lib/active_support/log_subscriber/test_helper.rb +106 -0
  2571. data/activesupport/lib/active_support/logger.rb +108 -0
  2572. data/activesupport/lib/active_support/logger_silence.rb +29 -0
  2573. data/activesupport/lib/active_support/logger_thread_safe_level.rb +33 -0
  2574. data/activesupport/lib/active_support/message_encryptor.rb +202 -0
  2575. data/activesupport/lib/active_support/message_verifier.rb +178 -0
  2576. data/activesupport/lib/active_support/messages/metadata.rb +71 -0
  2577. data/activesupport/lib/active_support/multibyte.rb +23 -0
  2578. data/activesupport/lib/active_support/multibyte/chars.rb +235 -0
  2579. data/activesupport/lib/active_support/multibyte/unicode.rb +394 -0
  2580. data/activesupport/lib/active_support/notifications.rb +216 -0
  2581. data/activesupport/lib/active_support/notifications/fanout.rb +159 -0
  2582. data/activesupport/lib/active_support/notifications/instrumenter.rb +93 -0
  2583. data/activesupport/lib/active_support/number_helper.rb +371 -0
  2584. data/activesupport/lib/active_support/number_helper/number_converter.rb +184 -0
  2585. data/activesupport/lib/active_support/number_helper/number_to_currency_converter.rb +46 -0
  2586. data/activesupport/lib/active_support/number_helper/number_to_delimited_converter.rb +29 -0
  2587. data/activesupport/lib/active_support/number_helper/number_to_human_converter.rb +68 -0
  2588. data/activesupport/lib/active_support/number_helper/number_to_human_size_converter.rb +59 -0
  2589. data/activesupport/lib/active_support/number_helper/number_to_percentage_converter.rb +14 -0
  2590. data/activesupport/lib/active_support/number_helper/number_to_phone_converter.rb +58 -0
  2591. data/activesupport/lib/active_support/number_helper/number_to_rounded_converter.rb +74 -0
  2592. data/activesupport/lib/active_support/number_helper/rounding_helper.rb +66 -0
  2593. data/activesupport/lib/active_support/option_merger.rb +27 -0
  2594. data/activesupport/lib/active_support/ordered_hash.rb +50 -0
  2595. data/activesupport/lib/active_support/ordered_options.rb +85 -0
  2596. data/activesupport/lib/active_support/per_thread_registry.rb +60 -0
  2597. data/activesupport/lib/active_support/proxy_object.rb +15 -0
  2598. data/activesupport/lib/active_support/rails.rb +35 -0
  2599. data/activesupport/lib/active_support/railtie.rb +59 -0
  2600. data/activesupport/lib/active_support/reloader.rb +128 -0
  2601. data/activesupport/lib/active_support/rescuable.rb +174 -0
  2602. data/activesupport/lib/active_support/security_utils.rb +29 -0
  2603. data/activesupport/lib/active_support/string_inquirer.rb +34 -0
  2604. data/activesupport/lib/active_support/subscriber.rb +126 -0
  2605. data/activesupport/lib/active_support/tagged_logging.rb +79 -0
  2606. data/activesupport/lib/active_support/test_case.rb +73 -0
  2607. data/activesupport/lib/active_support/testing/assertions.rb +199 -0
  2608. data/activesupport/lib/active_support/testing/autorun.rb +7 -0
  2609. data/activesupport/lib/active_support/testing/constant_lookup.rb +51 -0
  2610. data/activesupport/lib/active_support/testing/declarative.rb +28 -0
  2611. data/activesupport/lib/active_support/testing/deprecation.rb +39 -0
  2612. data/activesupport/lib/active_support/testing/file_fixtures.rb +36 -0
  2613. data/activesupport/lib/active_support/testing/isolation.rb +108 -0
  2614. data/activesupport/lib/active_support/testing/method_call_assertions.rb +43 -0
  2615. data/activesupport/lib/active_support/testing/setup_and_teardown.rb +52 -0
  2616. data/activesupport/lib/active_support/testing/stream.rb +44 -0
  2617. data/activesupport/lib/active_support/testing/tagged_logging.rb +27 -0
  2618. data/activesupport/lib/active_support/testing/time_helpers.rb +199 -0
  2619. data/activesupport/lib/active_support/time.rb +20 -0
  2620. data/activesupport/lib/active_support/time_with_zone.rb +551 -0
  2621. data/activesupport/lib/active_support/values/time_zone.rb +555 -0
  2622. data/activesupport/lib/active_support/values/unicode_tables.dat +0 -0
  2623. data/activesupport/lib/active_support/version.rb +10 -0
  2624. data/activesupport/lib/active_support/xml_mini.rb +209 -0
  2625. data/activesupport/lib/active_support/xml_mini/jdom.rb +183 -0
  2626. data/activesupport/lib/active_support/xml_mini/libxml.rb +80 -0
  2627. data/activesupport/lib/active_support/xml_mini/libxmlsax.rb +83 -0
  2628. data/activesupport/lib/active_support/xml_mini/nokogiri.rb +83 -0
  2629. data/activesupport/lib/active_support/xml_mini/nokogirisax.rb +86 -0
  2630. data/activesupport/lib/active_support/xml_mini/rexml.rb +130 -0
  2631. data/activesupport/test/abstract_unit.rb +41 -0
  2632. data/activesupport/test/array_inquirer_test.rb +63 -0
  2633. data/activesupport/test/autoload_test.rb +83 -0
  2634. data/activesupport/test/autoloading_fixtures/a/b.rb +4 -0
  2635. data/activesupport/test/autoloading_fixtures/a/c/d.rb +4 -0
  2636. data/activesupport/test/autoloading_fixtures/a/c/em/f.rb +4 -0
  2637. data/activesupport/test/autoloading_fixtures/application.rb +3 -0
  2638. data/activesupport/test/autoloading_fixtures/circular1.rb +8 -0
  2639. data/activesupport/test/autoloading_fixtures/circular2.rb +6 -0
  2640. data/activesupport/test/autoloading_fixtures/class_folder.rb +5 -0
  2641. data/activesupport/test/autoloading_fixtures/class_folder/class_folder_subclass.rb +5 -0
  2642. data/activesupport/test/autoloading_fixtures/class_folder/inline_class.rb +4 -0
  2643. data/activesupport/test/autoloading_fixtures/class_folder/nested_class.rb +9 -0
  2644. data/activesupport/test/autoloading_fixtures/conflict.rb +3 -0
  2645. data/activesupport/test/autoloading_fixtures/counting_loader.rb +7 -0
  2646. data/activesupport/test/autoloading_fixtures/cross_site_dependency.rb +4 -0
  2647. data/activesupport/test/autoloading_fixtures/d.rb +4 -0
  2648. data/activesupport/test/autoloading_fixtures/em.rb +4 -0
  2649. data/activesupport/test/autoloading_fixtures/html/some_class.rb +6 -0
  2650. data/activesupport/test/autoloading_fixtures/load_path/loaded_constant.rb +4 -0
  2651. data/activesupport/test/autoloading_fixtures/loads_constant.rb +7 -0
  2652. data/activesupport/test/autoloading_fixtures/module_folder/inline_class.rb +4 -0
  2653. data/activesupport/test/autoloading_fixtures/module_folder/nested_class.rb +6 -0
  2654. data/activesupport/test/autoloading_fixtures/module_folder/nested_sibling.rb +4 -0
  2655. data/activesupport/test/autoloading_fixtures/module_with_custom_const_missing/a/b.rb +3 -0
  2656. data/activesupport/test/autoloading_fixtures/multiple_constant_file.rb +4 -0
  2657. data/activesupport/test/autoloading_fixtures/prepend.rb +10 -0
  2658. data/activesupport/test/autoloading_fixtures/prepend/sub_class_conflict.rb +4 -0
  2659. data/activesupport/test/autoloading_fixtures/raises_arbitrary_exception.rb +6 -0
  2660. data/activesupport/test/autoloading_fixtures/raises_name_error.rb +5 -0
  2661. data/activesupport/test/autoloading_fixtures/raises_no_method_error.rb +5 -0
  2662. data/activesupport/test/autoloading_fixtures/requires_constant.rb +6 -0
  2663. data/activesupport/test/autoloading_fixtures/should_not_be_required.rb +3 -0
  2664. data/activesupport/test/autoloading_fixtures/throws.rb +6 -0
  2665. data/activesupport/test/autoloading_fixtures/typo.rb +3 -0
  2666. data/activesupport/test/benchmarkable_test.rb +78 -0
  2667. data/activesupport/test/broadcast_logger_test.rb +172 -0
  2668. data/activesupport/test/cache/behaviors.rb +9 -0
  2669. data/activesupport/test/cache/behaviors/autoloading_cache_behavior.rb +43 -0
  2670. data/activesupport/test/cache/behaviors/cache_delete_matched_behavior.rb +15 -0
  2671. data/activesupport/test/cache/behaviors/cache_increment_decrement_behavior.rb +23 -0
  2672. data/activesupport/test/cache/behaviors/cache_store_behavior.rb +331 -0
  2673. data/activesupport/test/cache/behaviors/cache_store_version_behavior.rb +88 -0
  2674. data/activesupport/test/cache/behaviors/encoded_key_cache_behavior.rb +36 -0
  2675. data/activesupport/test/cache/behaviors/local_cache_behavior.rb +128 -0
  2676. data/activesupport/test/cache/cache_entry_test.rb +30 -0
  2677. data/activesupport/test/cache/cache_key_test.rb +90 -0
  2678. data/activesupport/test/cache/cache_store_logger_test.rb +36 -0
  2679. data/activesupport/test/cache/cache_store_namespace_test.rb +40 -0
  2680. data/activesupport/test/cache/cache_store_setting_test.rb +68 -0
  2681. data/activesupport/test/cache/cache_store_write_multi_test.rb +62 -0
  2682. data/activesupport/test/cache/local_cache_middleware_test.rb +63 -0
  2683. data/activesupport/test/cache/stores/file_store_test.rb +130 -0
  2684. data/activesupport/test/cache/stores/mem_cache_store_test.rb +76 -0
  2685. data/activesupport/test/cache/stores/memory_store_test.rb +109 -0
  2686. data/activesupport/test/cache/stores/null_store_test.rb +59 -0
  2687. data/activesupport/test/callback_inheritance_test.rb +178 -0
  2688. data/activesupport/test/callbacks_test.rb +1205 -0
  2689. data/activesupport/test/class_cache_test.rb +80 -0
  2690. data/activesupport/test/clean_backtrace_test.rb +76 -0
  2691. data/activesupport/test/clean_logger_test.rb +31 -0
  2692. data/activesupport/test/concern_test.rb +131 -0
  2693. data/activesupport/test/configurable_test.rb +133 -0
  2694. data/activesupport/test/constantize_test_cases.rb +127 -0
  2695. data/activesupport/test/core_ext/array/access_test.rb +38 -0
  2696. data/activesupport/test/core_ext/array/conversions_test.rb +205 -0
  2697. data/activesupport/test/core_ext/array/extract_options_test.rb +47 -0
  2698. data/activesupport/test/core_ext/array/grouping_test.rb +137 -0
  2699. data/activesupport/test/core_ext/array/prepend_append_test.rb +14 -0
  2700. data/activesupport/test/core_ext/array/wrap_test.rb +79 -0
  2701. data/activesupport/test/core_ext/bigdecimal_test.rb +13 -0
  2702. data/activesupport/test/core_ext/class/attribute_test.rb +101 -0
  2703. data/activesupport/test/core_ext/class_test.rb +40 -0
  2704. data/activesupport/test/core_ext/date_and_time_behavior.rb +325 -0
  2705. data/activesupport/test/core_ext/date_and_time_compatibility_test.rb +275 -0
  2706. data/activesupport/test/core_ext/date_ext_test.rb +415 -0
  2707. data/activesupport/test/core_ext/date_time_ext_test.rb +463 -0
  2708. data/activesupport/test/core_ext/digest/uuid_test.rb +26 -0
  2709. data/activesupport/test/core_ext/duration_test.rb +651 -0
  2710. data/activesupport/test/core_ext/enumerable_test.rb +223 -0
  2711. data/activesupport/test/core_ext/file_test.rb +80 -0
  2712. data/activesupport/test/core_ext/hash/transform_keys_test.rb +64 -0
  2713. data/activesupport/test/core_ext/hash/transform_values_test.rb +77 -0
  2714. data/activesupport/test/core_ext/hash_ext_test.rb +1131 -0
  2715. data/activesupport/test/core_ext/integer_ext_test.rb +32 -0
  2716. data/activesupport/test/core_ext/kernel/concern_test.rb +15 -0
  2717. data/activesupport/test/core_ext/kernel_test.rb +53 -0
  2718. data/activesupport/test/core_ext/load_error_test.rb +19 -0
  2719. data/activesupport/test/core_ext/marshal_test.rb +165 -0
  2720. data/activesupport/test/core_ext/module/anonymous_test.rb +16 -0
  2721. data/activesupport/test/core_ext/module/attr_internal_test.rb +55 -0
  2722. data/activesupport/test/core_ext/module/attribute_accessor_per_thread_test.rb +133 -0
  2723. data/activesupport/test/core_ext/module/attribute_accessor_test.rb +137 -0
  2724. data/activesupport/test/core_ext/module/attribute_aliasing_test.rb +61 -0
  2725. data/activesupport/test/core_ext/module/concerning_test.rb +67 -0
  2726. data/activesupport/test/core_ext/module/introspection_test.rb +39 -0
  2727. data/activesupport/test/core_ext/module/reachable_test.rb +43 -0
  2728. data/activesupport/test/core_ext/module/remove_method_test.rb +59 -0
  2729. data/activesupport/test/core_ext/module_test.rb +443 -0
  2730. data/activesupport/test/core_ext/name_error_test.rb +23 -0
  2731. data/activesupport/test/core_ext/numeric_ext_test.rb +491 -0
  2732. data/activesupport/test/core_ext/object/acts_like_test.rb +35 -0
  2733. data/activesupport/test/core_ext/object/blank_test.rb +36 -0
  2734. data/activesupport/test/core_ext/object/deep_dup_test.rb +59 -0
  2735. data/activesupport/test/core_ext/object/duplicable_test.rb +37 -0
  2736. data/activesupport/test/core_ext/object/inclusion_test.rb +61 -0
  2737. data/activesupport/test/core_ext/object/instance_variables_test.rb +33 -0
  2738. data/activesupport/test/core_ext/object/json_cherry_pick_test.rb +44 -0
  2739. data/activesupport/test/core_ext/object/json_gem_encoding_test.rb +68 -0
  2740. data/activesupport/test/core_ext/object/to_param_test.rb +39 -0
  2741. data/activesupport/test/core_ext/object/to_query_test.rb +84 -0
  2742. data/activesupport/test/core_ext/object/try_test.rb +165 -0
  2743. data/activesupport/test/core_ext/range_ext_test.rb +133 -0
  2744. data/activesupport/test/core_ext/regexp_ext_test.rb +36 -0
  2745. data/activesupport/test/core_ext/secure_random_test.rb +22 -0
  2746. data/activesupport/test/core_ext/string_ext_test.rb +932 -0
  2747. data/activesupport/test/core_ext/time_ext_test.rb +999 -0
  2748. data/activesupport/test/core_ext/time_with_zone_test.rb +1304 -0
  2749. data/activesupport/test/core_ext/uri_ext_test.rb +14 -0
  2750. data/activesupport/test/current_attributes_test.rb +105 -0
  2751. data/activesupport/test/dependencies/check_warnings.rb +4 -0
  2752. data/activesupport/test/dependencies/conflict.rb +3 -0
  2753. data/activesupport/test/dependencies/cross_site_depender.rb +5 -0
  2754. data/activesupport/test/dependencies/mutual_one.rb +6 -0
  2755. data/activesupport/test/dependencies/mutual_two.rb +6 -0
  2756. data/activesupport/test/dependencies/raises_exception.rb +5 -0
  2757. data/activesupport/test/dependencies/raises_exception_without_blame_file.rb +7 -0
  2758. data/activesupport/test/dependencies/requires_nonexistent0.rb +3 -0
  2759. data/activesupport/test/dependencies/requires_nonexistent1.rb +3 -0
  2760. data/activesupport/test/dependencies/service_one.rb +7 -0
  2761. data/activesupport/test/dependencies/service_two.rb +4 -0
  2762. data/activesupport/test/dependencies_test.rb +1077 -0
  2763. data/activesupport/test/dependencies_test_helpers.rb +30 -0
  2764. data/activesupport/test/deprecation/method_wrappers_test.rb +36 -0
  2765. data/activesupport/test/deprecation/proxy_wrappers_test.rb +24 -0
  2766. data/activesupport/test/deprecation_test.rb +430 -0
  2767. data/activesupport/test/descendants_tracker_test_cases.rb +67 -0
  2768. data/activesupport/test/descendants_tracker_with_autoloading_test.rb +36 -0
  2769. data/activesupport/test/descendants_tracker_without_autoloading_test.rb +19 -0
  2770. data/activesupport/test/evented_file_update_checker_test.rb +197 -0
  2771. data/activesupport/test/executor_test.rb +242 -0
  2772. data/activesupport/test/file_fixtures/sample.txt +1 -0
  2773. data/activesupport/test/file_update_checker_shared_tests.rb +284 -0
  2774. data/activesupport/test/file_update_checker_test.rb +21 -0
  2775. data/activesupport/test/fixtures/autoload/another_class.rb +4 -0
  2776. data/activesupport/test/fixtures/autoload/some_class.rb +4 -0
  2777. data/activesupport/test/fixtures/xml/jdom_doctype.dtd +1 -0
  2778. data/activesupport/test/fixtures/xml/jdom_entities.txt +1 -0
  2779. data/activesupport/test/fixtures/xml/jdom_include.txt +1 -0
  2780. data/activesupport/test/gzip_test.rb +45 -0
  2781. data/activesupport/test/hash_with_indifferent_access_test.rb +773 -0
  2782. data/activesupport/test/i18n_test.rb +106 -0
  2783. data/activesupport/test/inflector_test.rb +548 -0
  2784. data/activesupport/test/inflector_test_cases.rb +375 -0
  2785. data/activesupport/test/json/decoding_test.rb +124 -0
  2786. data/activesupport/test/json/encoding_test.rb +477 -0
  2787. data/activesupport/test/json/encoding_test_cases.rb +98 -0
  2788. data/activesupport/test/key_generator_test.rb +79 -0
  2789. data/activesupport/test/lazy_load_hooks_test.rb +140 -0
  2790. data/activesupport/test/log_subscriber_test.rb +126 -0
  2791. data/activesupport/test/logger_test.rb +270 -0
  2792. data/activesupport/test/message_encryptor_test.rb +176 -0
  2793. data/activesupport/test/message_verifier_test.rb +158 -0
  2794. data/activesupport/test/metadata/shared_metadata_tests.rb +93 -0
  2795. data/activesupport/test/multibyte_chars_test.rb +752 -0
  2796. data/activesupport/test/multibyte_conformance_test.rb +110 -0
  2797. data/activesupport/test/multibyte_grapheme_break_conformance_test.rb +62 -0
  2798. data/activesupport/test/multibyte_normalization_conformance_test.rb +112 -0
  2799. data/activesupport/test/multibyte_proxy_test.rb +34 -0
  2800. data/activesupport/test/multibyte_test_helpers.rb +41 -0
  2801. data/activesupport/test/multibyte_unicode_database_test.rb +26 -0
  2802. data/activesupport/test/notifications/evented_notification_test.rb +89 -0
  2803. data/activesupport/test/notifications/instrumenter_test.rb +60 -0
  2804. data/activesupport/test/notifications_test.rb +283 -0
  2805. data/activesupport/test/number_helper_i18n_test.rb +151 -0
  2806. data/activesupport/test/number_helper_test.rb +411 -0
  2807. data/activesupport/test/option_merger_test.rb +97 -0
  2808. data/activesupport/test/ordered_hash_test.rb +324 -0
  2809. data/activesupport/test/ordered_options_test.rb +105 -0
  2810. data/activesupport/test/reloader_test.rb +99 -0
  2811. data/activesupport/test/rescuable_test.rb +176 -0
  2812. data/activesupport/test/safe_buffer_test.rb +182 -0
  2813. data/activesupport/test/security_utils_test.rb +16 -0
  2814. data/activesupport/test/share_lock_test.rb +580 -0
  2815. data/activesupport/test/string_inquirer_test.rb +46 -0
  2816. data/activesupport/test/subscriber_test.rb +56 -0
  2817. data/activesupport/test/tagged_logging_test.rb +117 -0
  2818. data/activesupport/test/test_case_test.rb +339 -0
  2819. data/activesupport/test/testing/constant_lookup_test.rb +78 -0
  2820. data/activesupport/test/testing/file_fixtures_test.rb +32 -0
  2821. data/activesupport/test/testing/method_call_assertions_test.rb +125 -0
  2822. data/activesupport/test/time_travel_test.rb +189 -0
  2823. data/activesupport/test/time_zone_test.rb +738 -0
  2824. data/activesupport/test/time_zone_test_helpers.rb +26 -0
  2825. data/activesupport/test/transliterate_test.rb +54 -0
  2826. data/activesupport/test/xml_mini/jdom_engine_test.rb +53 -0
  2827. data/activesupport/test/xml_mini/libxml_engine_test.rb +21 -0
  2828. data/activesupport/test/xml_mini/libxmlsax_engine_test.rb +16 -0
  2829. data/activesupport/test/xml_mini/nokogiri_engine_test.rb +16 -0
  2830. data/activesupport/test/xml_mini/nokogirisax_engine_test.rb +16 -0
  2831. data/activesupport/test/xml_mini/rexml_engine_test.rb +27 -0
  2832. data/activesupport/test/xml_mini/xml_mini_engine_test.rb +264 -0
  2833. data/activesupport/test/xml_mini_test.rb +355 -0
  2834. data/ci/phantomjs.js +149 -0
  2835. data/ci/travis.rb +187 -0
  2836. data/guides/.document +0 -0
  2837. data/guides/CHANGELOG.md +1 -0
  2838. data/guides/Rakefile +91 -0
  2839. data/guides/assets/images/akshaysurve.jpg +0 -0
  2840. data/guides/assets/images/belongs_to.png +0 -0
  2841. data/guides/assets/images/book_icon.gif +0 -0
  2842. data/guides/assets/images/bullet.gif +0 -0
  2843. data/guides/assets/images/chapters_icon.gif +0 -0
  2844. data/guides/assets/images/check_bullet.gif +0 -0
  2845. data/guides/assets/images/credits_pic_blank.gif +0 -0
  2846. data/guides/assets/images/csrf.png +0 -0
  2847. data/guides/assets/images/edge_badge.png +0 -0
  2848. data/guides/assets/images/favicon.ico +0 -0
  2849. data/guides/assets/images/feature_tile.gif +0 -0
  2850. data/guides/assets/images/footer_tile.gif +0 -0
  2851. data/guides/assets/images/fxn.png +0 -0
  2852. data/guides/assets/images/getting_started/article_with_comments.png +0 -0
  2853. data/guides/assets/images/getting_started/challenge.png +0 -0
  2854. data/guides/assets/images/getting_started/confirm_dialog.png +0 -0
  2855. data/guides/assets/images/getting_started/forbidden_attributes_for_new_article.png +0 -0
  2856. data/guides/assets/images/getting_started/form_with_errors.png +0 -0
  2857. data/guides/assets/images/getting_started/index_action_with_edit_link.png +0 -0
  2858. data/guides/assets/images/getting_started/new_article.png +0 -0
  2859. data/guides/assets/images/getting_started/rails_welcome.png +0 -0
  2860. data/guides/assets/images/getting_started/routing_error_no_controller.png +0 -0
  2861. data/guides/assets/images/getting_started/routing_error_no_route_matches.png +0 -0
  2862. data/guides/assets/images/getting_started/show_action_for_articles.png +0 -0
  2863. data/guides/assets/images/getting_started/template_is_missing_articles_new.png +0 -0
  2864. data/guides/assets/images/getting_started/unknown_action_create_for_articles.png +0 -0
  2865. data/guides/assets/images/getting_started/unknown_action_new_for_articles.png +0 -0
  2866. data/guides/assets/images/grey_bullet.gif +0 -0
  2867. data/guides/assets/images/habtm.png +0 -0
  2868. data/guides/assets/images/has_many.png +0 -0
  2869. data/guides/assets/images/has_many_through.png +0 -0
  2870. data/guides/assets/images/has_one.png +0 -0
  2871. data/guides/assets/images/has_one_through.png +0 -0
  2872. data/guides/assets/images/header_backdrop.png +0 -0
  2873. data/guides/assets/images/header_tile.gif +0 -0
  2874. data/guides/assets/images/i18n/demo_html_safe.png +0 -0
  2875. data/guides/assets/images/i18n/demo_localized_pirate.png +0 -0
  2876. data/guides/assets/images/i18n/demo_translated_en.png +0 -0
  2877. data/guides/assets/images/i18n/demo_translated_pirate.png +0 -0
  2878. data/guides/assets/images/i18n/demo_translation_missing.png +0 -0
  2879. data/guides/assets/images/i18n/demo_untranslated.png +0 -0
  2880. data/guides/assets/images/icons/README +5 -0
  2881. data/guides/assets/images/icons/callouts/1.png +0 -0
  2882. data/guides/assets/images/icons/callouts/10.png +0 -0
  2883. data/guides/assets/images/icons/callouts/11.png +0 -0
  2884. data/guides/assets/images/icons/callouts/12.png +0 -0
  2885. data/guides/assets/images/icons/callouts/13.png +0 -0
  2886. data/guides/assets/images/icons/callouts/14.png +0 -0
  2887. data/guides/assets/images/icons/callouts/15.png +0 -0
  2888. data/guides/assets/images/icons/callouts/2.png +0 -0
  2889. data/guides/assets/images/icons/callouts/3.png +0 -0
  2890. data/guides/assets/images/icons/callouts/4.png +0 -0
  2891. data/guides/assets/images/icons/callouts/5.png +0 -0
  2892. data/guides/assets/images/icons/callouts/6.png +0 -0
  2893. data/guides/assets/images/icons/callouts/7.png +0 -0
  2894. data/guides/assets/images/icons/callouts/8.png +0 -0
  2895. data/guides/assets/images/icons/callouts/9.png +0 -0
  2896. data/guides/assets/images/icons/caution.png +0 -0
  2897. data/guides/assets/images/icons/example.png +0 -0
  2898. data/guides/assets/images/icons/home.png +0 -0
  2899. data/guides/assets/images/icons/important.png +0 -0
  2900. data/guides/assets/images/icons/next.png +0 -0
  2901. data/guides/assets/images/icons/note.png +0 -0
  2902. data/guides/assets/images/icons/prev.png +0 -0
  2903. data/guides/assets/images/icons/tip.png +0 -0
  2904. data/guides/assets/images/icons/up.png +0 -0
  2905. data/guides/assets/images/icons/warning.png +0 -0
  2906. data/guides/assets/images/nav_arrow.gif +0 -0
  2907. data/guides/assets/images/oscardelben.jpg +0 -0
  2908. data/guides/assets/images/polymorphic.png +0 -0
  2909. data/guides/assets/images/radar.png +0 -0
  2910. data/guides/assets/images/rails4_features.png +0 -0
  2911. data/guides/assets/images/rails_guides_kindle_cover.jpg +0 -0
  2912. data/guides/assets/images/rails_guides_logo.gif +0 -0
  2913. data/guides/assets/images/rails_logo_remix.gif +0 -0
  2914. data/guides/assets/images/session_fixation.png +0 -0
  2915. data/guides/assets/images/tab_grey.gif +0 -0
  2916. data/guides/assets/images/tab_info.gif +0 -0
  2917. data/guides/assets/images/tab_note.gif +0 -0
  2918. data/guides/assets/images/tab_red.gif +0 -0
  2919. data/guides/assets/images/tab_yellow.gif +0 -0
  2920. data/guides/assets/images/tab_yellow.png +0 -0
  2921. data/guides/assets/images/vijaydev.jpg +0 -0
  2922. data/guides/assets/javascripts/guides.js +53 -0
  2923. data/guides/assets/javascripts/jquery.min.js +4 -0
  2924. data/guides/assets/javascripts/responsive-tables.js +43 -0
  2925. data/guides/assets/javascripts/syntaxhighlighter.js +20 -0
  2926. data/guides/assets/stylesheets/fixes.css +16 -0
  2927. data/guides/assets/stylesheets/kindle.css +11 -0
  2928. data/guides/assets/stylesheets/main.css +718 -0
  2929. data/guides/assets/stylesheets/print.css +52 -0
  2930. data/guides/assets/stylesheets/reset.css +43 -0
  2931. data/guides/assets/stylesheets/responsive-tables.css +50 -0
  2932. data/guides/assets/stylesheets/style.css +13 -0
  2933. data/guides/assets/stylesheets/syntaxhighlighter/shCore.css +226 -0
  2934. data/guides/assets/stylesheets/syntaxhighlighter/shThemeRailsGuides.css +116 -0
  2935. data/guides/bug_report_templates/action_controller_gem.rb +58 -0
  2936. data/guides/bug_report_templates/action_controller_master.rb +54 -0
  2937. data/guides/bug_report_templates/active_job_gem.rb +34 -0
  2938. data/guides/bug_report_templates/active_job_master.rb +34 -0
  2939. data/guides/bug_report_templates/active_record_gem.rb +54 -0
  2940. data/guides/bug_report_templates/active_record_master.rb +51 -0
  2941. data/guides/bug_report_templates/active_record_migrations_gem.rb +65 -0
  2942. data/guides/bug_report_templates/active_record_migrations_master.rb +65 -0
  2943. data/guides/bug_report_templates/benchmark.rb +52 -0
  2944. data/guides/bug_report_templates/generic_gem.rb +27 -0
  2945. data/guides/bug_report_templates/generic_master.rb +25 -0
  2946. data/guides/rails_guides.rb +29 -0
  2947. data/guides/rails_guides/generator.rb +208 -0
  2948. data/guides/rails_guides/helpers.rb +55 -0
  2949. data/guides/rails_guides/indexer.rb +70 -0
  2950. data/guides/rails_guides/kindle.rb +116 -0
  2951. data/guides/rails_guides/levenshtein.rb +44 -0
  2952. data/guides/rails_guides/markdown.rb +173 -0
  2953. data/guides/rails_guides/markdown/renderer.rb +123 -0
  2954. data/guides/source/2_2_release_notes.md +436 -0
  2955. data/guides/source/2_3_release_notes.md +623 -0
  2956. data/guides/source/3_0_release_notes.md +612 -0
  2957. data/guides/source/3_1_release_notes.md +561 -0
  2958. data/guides/source/3_2_release_notes.md +570 -0
  2959. data/guides/source/4_0_release_notes.md +284 -0
  2960. data/guides/source/4_1_release_notes.md +732 -0
  2961. data/guides/source/4_2_release_notes.md +890 -0
  2962. data/guides/source/5_0_release_notes.md +1096 -0
  2963. data/guides/source/5_1_release_notes.md +652 -0
  2964. data/guides/source/_license.html.erb +2 -0
  2965. data/guides/source/_welcome.html.erb +25 -0
  2966. data/guides/source/action_cable_overview.md +691 -0
  2967. data/guides/source/action_controller_overview.md +1218 -0
  2968. data/guides/source/action_mailer_basics.md +826 -0
  2969. data/guides/source/action_view_overview.md +1511 -0
  2970. data/guides/source/active_job_basics.md +403 -0
  2971. data/guides/source/active_model_basics.md +505 -0
  2972. data/guides/source/active_record_basics.md +377 -0
  2973. data/guides/source/active_record_callbacks.md +459 -0
  2974. data/guides/source/active_record_migrations.md +1055 -0
  2975. data/guides/source/active_record_postgresql.md +517 -0
  2976. data/guides/source/active_record_querying.md +2048 -0
  2977. data/guides/source/active_record_validations.md +1296 -0
  2978. data/guides/source/active_support_core_extensions.md +3748 -0
  2979. data/guides/source/active_support_instrumentation.md +552 -0
  2980. data/guides/source/api_app.md +426 -0
  2981. data/guides/source/api_documentation_guidelines.md +366 -0
  2982. data/guides/source/asset_pipeline.md +1299 -0
  2983. data/guides/source/association_basics.md +2467 -0
  2984. data/guides/source/autoloading_and_reloading_constants.md +1323 -0
  2985. data/guides/source/caching_with_rails.md +615 -0
  2986. data/guides/source/command_line.md +664 -0
  2987. data/guides/source/configuring.md +1341 -0
  2988. data/guides/source/contributing_to_ruby_on_rails.md +667 -0
  2989. data/guides/source/credits.html.erb +80 -0
  2990. data/guides/source/debugging_rails_applications.md +954 -0
  2991. data/guides/source/development_dependencies_install.md +378 -0
  2992. data/guides/source/documents.yaml +230 -0
  2993. data/guides/source/engines.md +1527 -0
  2994. data/guides/source/form_helpers.md +1023 -0
  2995. data/guides/source/generators.md +716 -0
  2996. data/guides/source/getting_started.md +2100 -0
  2997. data/guides/source/i18n.md +1208 -0
  2998. data/guides/source/index.html.erb +28 -0
  2999. data/guides/source/initialization.md +712 -0
  3000. data/guides/source/kindle/copyright.html.erb +1 -0
  3001. data/guides/source/kindle/layout.html.erb +27 -0
  3002. data/guides/source/kindle/rails_guides.opf.erb +52 -0
  3003. data/guides/source/kindle/toc.html.erb +24 -0
  3004. data/guides/source/kindle/toc.ncx.erb +64 -0
  3005. data/guides/source/kindle/welcome.html.erb +7 -0
  3006. data/guides/source/layout.html.erb +138 -0
  3007. data/guides/source/layouts_and_rendering.md +1330 -0
  3008. data/guides/source/maintenance_policy.md +80 -0
  3009. data/guides/source/plugins.md +484 -0
  3010. data/guides/source/rails_application_templates.md +282 -0
  3011. data/guides/source/rails_on_rack.md +310 -0
  3012. data/guides/source/routing.md +1182 -0
  3013. data/guides/source/ruby_on_rails_guides_guidelines.md +173 -0
  3014. data/guides/source/security.md +1066 -0
  3015. data/guides/source/testing.md +1566 -0
  3016. data/guides/source/upgrading_ruby_on_rails.md +1552 -0
  3017. data/guides/source/working_with_javascript_in_rails.md +550 -0
  3018. data/guides/w3c_validator.rb +98 -0
  3019. data/rails.gemspec +36 -0
  3020. data/railties/.gitignore +1 -0
  3021. data/railties/CHANGELOG.md +129 -0
  3022. data/railties/MIT-LICENSE +20 -0
  3023. data/railties/RDOC_MAIN.rdoc +73 -0
  3024. data/railties/README.rdoc +40 -0
  3025. data/railties/Rakefile +37 -0
  3026. data/railties/bin/test +5 -0
  3027. data/railties/exe/rails +10 -0
  3028. data/railties/lib/minitest/rails_plugin.rb +54 -0
  3029. data/railties/lib/rails.rb +114 -0
  3030. data/railties/lib/rails/all.rb +20 -0
  3031. data/railties/lib/rails/api/generator.rb +37 -0
  3032. data/railties/lib/rails/api/task.rb +185 -0
  3033. data/railties/lib/rails/app_loader.rb +77 -0
  3034. data/railties/lib/rails/app_updater.rb +33 -0
  3035. data/railties/lib/rails/application.rb +531 -0
  3036. data/railties/lib/rails/application/bootstrap.rb +89 -0
  3037. data/railties/lib/rails/application/configuration.rb +252 -0
  3038. data/railties/lib/rails/application/default_middleware_stack.rb +101 -0
  3039. data/railties/lib/rails/application/finisher.rb +196 -0
  3040. data/railties/lib/rails/application/routes_reloader.rb +71 -0
  3041. data/railties/lib/rails/application_controller.rb +18 -0
  3042. data/railties/lib/rails/backtrace_cleaner.rb +34 -0
  3043. data/railties/lib/rails/cli.rb +19 -0
  3044. data/railties/lib/rails/code_statistics.rb +115 -0
  3045. data/railties/lib/rails/code_statistics_calculator.rb +88 -0
  3046. data/railties/lib/rails/command.rb +113 -0
  3047. data/railties/lib/rails/command/actions.rb +44 -0
  3048. data/railties/lib/rails/command/base.rb +157 -0
  3049. data/railties/lib/rails/command/behavior.rb +125 -0
  3050. data/railties/lib/rails/command/environment_argument.rb +47 -0
  3051. data/railties/lib/rails/commands.rb +18 -0
  3052. data/railties/lib/rails/commands/application/application_command.rb +31 -0
  3053. data/railties/lib/rails/commands/console/console_command.rb +100 -0
  3054. data/railties/lib/rails/commands/dbconsole/dbconsole_command.rb +170 -0
  3055. data/railties/lib/rails/commands/destroy/destroy_command.rb +28 -0
  3056. data/railties/lib/rails/commands/generate/generate_command.rb +30 -0
  3057. data/railties/lib/rails/commands/help/USAGE +16 -0
  3058. data/railties/lib/rails/commands/help/help_command.rb +15 -0
  3059. data/railties/lib/rails/commands/new/new_command.rb +19 -0
  3060. data/railties/lib/rails/commands/plugin/plugin_command.rb +45 -0
  3061. data/railties/lib/rails/commands/rake/rake_command.rb +51 -0
  3062. data/railties/lib/rails/commands/runner/USAGE +20 -0
  3063. data/railties/lib/rails/commands/runner/runner_command.rb +53 -0
  3064. data/railties/lib/rails/commands/secrets/USAGE +60 -0
  3065. data/railties/lib/rails/commands/secrets/secrets_command.rb +66 -0
  3066. data/railties/lib/rails/commands/server/server_command.rb +243 -0
  3067. data/railties/lib/rails/commands/test/test_command.rb +37 -0
  3068. data/railties/lib/rails/commands/version/version_command.rb +11 -0
  3069. data/railties/lib/rails/configuration.rb +137 -0
  3070. data/railties/lib/rails/console/app.rb +38 -0
  3071. data/railties/lib/rails/console/helpers.rb +19 -0
  3072. data/railties/lib/rails/dev_caching.rb +44 -0
  3073. data/railties/lib/rails/engine.rb +705 -0
  3074. data/railties/lib/rails/engine/commands.rb +9 -0
  3075. data/railties/lib/rails/engine/configuration.rb +88 -0
  3076. data/railties/lib/rails/engine/railties.rb +23 -0
  3077. data/railties/lib/rails/engine/updater.rb +21 -0
  3078. data/railties/lib/rails/gem_version.rb +17 -0
  3079. data/railties/lib/rails/generators.rb +319 -0
  3080. data/railties/lib/rails/generators/actions.rb +326 -0
  3081. data/railties/lib/rails/generators/actions/create_migration.rb +71 -0
  3082. data/railties/lib/rails/generators/active_model.rb +80 -0
  3083. data/railties/lib/rails/generators/app_base.rb +447 -0
  3084. data/railties/lib/rails/generators/base.rb +417 -0
  3085. data/railties/lib/rails/generators/css/assets/assets_generator.rb +15 -0
  3086. data/railties/lib/rails/generators/css/assets/templates/stylesheet.css +4 -0
  3087. data/railties/lib/rails/generators/css/scaffold/scaffold_generator.rb +18 -0
  3088. data/railties/lib/rails/generators/erb.rb +27 -0
  3089. data/railties/lib/rails/generators/erb/controller/controller_generator.rb +24 -0
  3090. data/railties/lib/rails/generators/erb/controller/templates/view.html.erb +2 -0
  3091. data/railties/lib/rails/generators/erb/mailer/mailer_generator.rb +42 -0
  3092. data/railties/lib/rails/generators/erb/mailer/templates/layout.html.erb.tt +13 -0
  3093. data/railties/lib/rails/generators/erb/mailer/templates/layout.text.erb.tt +1 -0
  3094. data/railties/lib/rails/generators/erb/mailer/templates/view.html.erb +5 -0
  3095. data/railties/lib/rails/generators/erb/mailer/templates/view.text.erb +3 -0
  3096. data/railties/lib/rails/generators/erb/scaffold/scaffold_generator.rb +33 -0
  3097. data/railties/lib/rails/generators/erb/scaffold/templates/_form.html.erb +34 -0
  3098. data/railties/lib/rails/generators/erb/scaffold/templates/edit.html.erb +6 -0
  3099. data/railties/lib/rails/generators/erb/scaffold/templates/index.html.erb +31 -0
  3100. data/railties/lib/rails/generators/erb/scaffold/templates/new.html.erb +5 -0
  3101. data/railties/lib/rails/generators/erb/scaffold/templates/show.html.erb +11 -0
  3102. data/railties/lib/rails/generators/generated_attribute.rb +177 -0
  3103. data/railties/lib/rails/generators/js/assets/assets_generator.rb +15 -0
  3104. data/railties/lib/rails/generators/js/assets/templates/javascript.js +2 -0
  3105. data/railties/lib/rails/generators/migration.rb +71 -0
  3106. data/railties/lib/rails/generators/model_helpers.rb +30 -0
  3107. data/railties/lib/rails/generators/named_base.rb +207 -0
  3108. data/railties/lib/rails/generators/rails/app/USAGE +14 -0
  3109. data/railties/lib/rails/generators/rails/app/app_generator.rb +579 -0
  3110. data/railties/lib/rails/generators/rails/app/templates/Gemfile +69 -0
  3111. data/railties/lib/rails/generators/rails/app/templates/README.md +24 -0
  3112. data/railties/lib/rails/generators/rails/app/templates/Rakefile +6 -0
  3113. data/railties/lib/rails/generators/rails/app/templates/app/assets/config/manifest.js.tt +5 -0
  3114. data/railties/lib/rails/generators/rails/app/templates/app/assets/javascripts/application.js.tt +20 -0
  3115. data/railties/lib/rails/generators/rails/app/templates/app/assets/javascripts/cable.js +13 -0
  3116. data/railties/lib/rails/generators/rails/app/templates/app/assets/stylesheets/application.css +15 -0
  3117. data/railties/lib/rails/generators/rails/app/templates/app/channels/application_cable/channel.rb +4 -0
  3118. data/railties/lib/rails/generators/rails/app/templates/app/channels/application_cable/connection.rb +4 -0
  3119. data/railties/lib/rails/generators/rails/app/templates/app/controllers/application_controller.rb.tt +2 -0
  3120. data/railties/lib/rails/generators/rails/app/templates/app/helpers/application_helper.rb +2 -0
  3121. data/railties/lib/rails/generators/rails/app/templates/app/jobs/application_job.rb +2 -0
  3122. data/railties/lib/rails/generators/rails/app/templates/app/mailers/application_mailer.rb +4 -0
  3123. data/railties/lib/rails/generators/rails/app/templates/app/models/application_record.rb +3 -0
  3124. data/railties/lib/rails/generators/rails/app/templates/app/views/layouts/application.html.erb.tt +23 -0
  3125. data/railties/lib/rails/generators/rails/app/templates/app/views/layouts/mailer.html.erb.tt +13 -0
  3126. data/railties/lib/rails/generators/rails/app/templates/app/views/layouts/mailer.text.erb.tt +1 -0
  3127. data/railties/lib/rails/generators/rails/app/templates/bin/bundle +2 -0
  3128. data/railties/lib/rails/generators/rails/app/templates/bin/rails +3 -0
  3129. data/railties/lib/rails/generators/rails/app/templates/bin/rake +3 -0
  3130. data/railties/lib/rails/generators/rails/app/templates/bin/setup.tt +39 -0
  3131. data/railties/lib/rails/generators/rails/app/templates/bin/update.tt +29 -0
  3132. data/railties/lib/rails/generators/rails/app/templates/bin/yarn +10 -0
  3133. data/railties/lib/rails/generators/rails/app/templates/config.ru +5 -0
  3134. data/railties/lib/rails/generators/rails/app/templates/config/application.rb +44 -0
  3135. data/railties/lib/rails/generators/rails/app/templates/config/boot.rb +4 -0
  3136. data/railties/lib/rails/generators/rails/app/templates/config/cable.yml +10 -0
  3137. data/railties/lib/rails/generators/rails/app/templates/config/databases/frontbase.yml +50 -0
  3138. data/railties/lib/rails/generators/rails/app/templates/config/databases/ibm_db.yml +86 -0
  3139. data/railties/lib/rails/generators/rails/app/templates/config/databases/jdbc.yml +69 -0
  3140. data/railties/lib/rails/generators/rails/app/templates/config/databases/jdbcmysql.yml +53 -0
  3141. data/railties/lib/rails/generators/rails/app/templates/config/databases/jdbcpostgresql.yml +69 -0
  3142. data/railties/lib/rails/generators/rails/app/templates/config/databases/jdbcsqlite3.yml +24 -0
  3143. data/railties/lib/rails/generators/rails/app/templates/config/databases/mysql.yml +58 -0
  3144. data/railties/lib/rails/generators/rails/app/templates/config/databases/oracle.yml +61 -0
  3145. data/railties/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml +85 -0
  3146. data/railties/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml +25 -0
  3147. data/railties/lib/rails/generators/rails/app/templates/config/databases/sqlserver.yml +52 -0
  3148. data/railties/lib/rails/generators/rails/app/templates/config/environment.rb +5 -0
  3149. data/railties/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +64 -0
  3150. data/railties/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt +107 -0
  3151. data/railties/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt +47 -0
  3152. data/railties/lib/rails/generators/rails/app/templates/config/initializers/application_controller_renderer.rb +8 -0
  3153. data/railties/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt +16 -0
  3154. data/railties/lib/rails/generators/rails/app/templates/config/initializers/backtrace_silencers.rb +7 -0
  3155. data/railties/lib/rails/generators/rails/app/templates/config/initializers/cookies_serializer.rb +5 -0
  3156. data/railties/lib/rails/generators/rails/app/templates/config/initializers/cors.rb +16 -0
  3157. data/railties/lib/rails/generators/rails/app/templates/config/initializers/filter_parameter_logging.rb +4 -0
  3158. data/railties/lib/rails/generators/rails/app/templates/config/initializers/inflections.rb +16 -0
  3159. data/railties/lib/rails/generators/rails/app/templates/config/initializers/mime_types.rb +4 -0
  3160. data/railties/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_5_2.rb.tt +27 -0
  3161. data/railties/lib/rails/generators/rails/app/templates/config/initializers/wrap_parameters.rb.tt +16 -0
  3162. data/railties/lib/rails/generators/rails/app/templates/config/locales/en.yml +33 -0
  3163. data/railties/lib/rails/generators/rails/app/templates/config/puma.rb +56 -0
  3164. data/railties/lib/rails/generators/rails/app/templates/config/routes.rb +3 -0
  3165. data/railties/lib/rails/generators/rails/app/templates/config/secrets.yml +32 -0
  3166. data/railties/lib/rails/generators/rails/app/templates/config/spring.rb +6 -0
  3167. data/railties/lib/rails/generators/rails/app/templates/config/storage.yml +35 -0
  3168. data/railties/lib/rails/generators/rails/app/templates/db/seeds.rb.tt +7 -0
  3169. data/railties/lib/rails/generators/rails/app/templates/gitignore +35 -0
  3170. data/railties/lib/rails/generators/rails/app/templates/package.json +5 -0
  3171. data/railties/lib/rails/generators/rails/app/templates/public/404.html +67 -0
  3172. data/railties/lib/rails/generators/rails/app/templates/public/422.html +67 -0
  3173. data/railties/lib/rails/generators/rails/app/templates/public/500.html +66 -0
  3174. data/railties/lib/rails/generators/rails/app/templates/public/apple-touch-icon-precomposed.png +0 -0
  3175. data/railties/lib/rails/generators/rails/app/templates/public/apple-touch-icon.png +0 -0
  3176. data/railties/lib/rails/generators/rails/app/templates/public/favicon.ico +0 -0
  3177. data/railties/lib/rails/generators/rails/app/templates/public/robots.txt +1 -0
  3178. data/railties/lib/rails/generators/rails/app/templates/ruby-version +1 -0
  3179. data/railties/lib/rails/generators/rails/app/templates/test/application_system_test_case.rb +5 -0
  3180. data/railties/lib/rails/generators/rails/app/templates/test/test_helper.rb +11 -0
  3181. data/railties/lib/rails/generators/rails/application_record/application_record_generator.rb +9 -0
  3182. data/railties/lib/rails/generators/rails/assets/USAGE +20 -0
  3183. data/railties/lib/rails/generators/rails/assets/assets_generator.rb +27 -0
  3184. data/railties/lib/rails/generators/rails/assets/templates/javascript.js +2 -0
  3185. data/railties/lib/rails/generators/rails/assets/templates/stylesheet.css +4 -0
  3186. data/railties/lib/rails/generators/rails/controller/USAGE +18 -0
  3187. data/railties/lib/rails/generators/rails/controller/controller_generator.rb +66 -0
  3188. data/railties/lib/rails/generators/rails/controller/templates/controller.rb +13 -0
  3189. data/railties/lib/rails/generators/rails/encrypted_secrets/encrypted_secrets_generator.rb +72 -0
  3190. data/railties/lib/rails/generators/rails/generator/USAGE +13 -0
  3191. data/railties/lib/rails/generators/rails/generator/generator_generator.rb +28 -0
  3192. data/railties/lib/rails/generators/rails/generator/templates/%file_name%_generator.rb.tt +3 -0
  3193. data/railties/lib/rails/generators/rails/generator/templates/USAGE.tt +8 -0
  3194. data/railties/lib/rails/generators/rails/generator/templates/templates/.empty_directory +0 -0
  3195. data/railties/lib/rails/generators/rails/helper/USAGE +13 -0
  3196. data/railties/lib/rails/generators/rails/helper/helper_generator.rb +15 -0
  3197. data/railties/lib/rails/generators/rails/helper/templates/helper.rb +4 -0
  3198. data/railties/lib/rails/generators/rails/integration_test/USAGE +10 -0
  3199. data/railties/lib/rails/generators/rails/integration_test/integration_test_generator.rb +9 -0
  3200. data/railties/lib/rails/generators/rails/migration/USAGE +35 -0
  3201. data/railties/lib/rails/generators/rails/migration/migration_generator.rb +10 -0
  3202. data/railties/lib/rails/generators/rails/model/USAGE +114 -0
  3203. data/railties/lib/rails/generators/rails/model/model_generator.rb +14 -0
  3204. data/railties/lib/rails/generators/rails/plugin/USAGE +10 -0
  3205. data/railties/lib/rails/generators/rails/plugin/plugin_generator.rb +450 -0
  3206. data/railties/lib/rails/generators/rails/plugin/templates/%name%.gemspec +24 -0
  3207. data/railties/lib/rails/generators/rails/plugin/templates/Gemfile +48 -0
  3208. data/railties/lib/rails/generators/rails/plugin/templates/MIT-LICENSE +20 -0
  3209. data/railties/lib/rails/generators/rails/plugin/templates/README.md +28 -0
  3210. data/railties/lib/rails/generators/rails/plugin/templates/Rakefile +28 -0
  3211. data/railties/lib/rails/generators/rails/plugin/templates/app/controllers/%namespaced_name%/application_controller.rb.tt +6 -0
  3212. data/railties/lib/rails/generators/rails/plugin/templates/app/helpers/%namespaced_name%/application_helper.rb.tt +5 -0
  3213. data/railties/lib/rails/generators/rails/plugin/templates/app/jobs/%namespaced_name%/application_job.rb.tt +5 -0
  3214. data/railties/lib/rails/generators/rails/plugin/templates/app/mailers/%namespaced_name%/application_mailer.rb.tt +7 -0
  3215. data/railties/lib/rails/generators/rails/plugin/templates/app/models/%namespaced_name%/application_record.rb.tt +6 -0
  3216. data/railties/lib/rails/generators/rails/plugin/templates/app/views/layouts/%namespaced_name%/application.html.erb.tt +14 -0
  3217. data/railties/lib/rails/generators/rails/plugin/templates/bin/rails.tt +30 -0
  3218. data/railties/lib/rails/generators/rails/plugin/templates/bin/test.tt +4 -0
  3219. data/railties/lib/rails/generators/rails/plugin/templates/config/routes.rb +6 -0
  3220. data/railties/lib/rails/generators/rails/plugin/templates/gitignore +15 -0
  3221. data/railties/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%.rb +7 -0
  3222. data/railties/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/engine.rb +7 -0
  3223. data/railties/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/railtie.rb +5 -0
  3224. data/railties/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/version.rb +1 -0
  3225. data/railties/lib/rails/generators/rails/plugin/templates/lib/tasks/%namespaced_name%_tasks.rake +4 -0
  3226. data/railties/lib/rails/generators/rails/plugin/templates/rails/application.rb +23 -0
  3227. data/railties/lib/rails/generators/rails/plugin/templates/rails/boot.rb +5 -0
  3228. data/railties/lib/rails/generators/rails/plugin/templates/rails/dummy_manifest.js +10 -0
  3229. data/railties/lib/rails/generators/rails/plugin/templates/rails/engine_manifest.js +6 -0
  3230. data/railties/lib/rails/generators/rails/plugin/templates/rails/javascripts.js +13 -0
  3231. data/railties/lib/rails/generators/rails/plugin/templates/rails/routes.rb +3 -0
  3232. data/railties/lib/rails/generators/rails/plugin/templates/rails/stylesheets.css +15 -0
  3233. data/railties/lib/rails/generators/rails/plugin/templates/test/%namespaced_name%_test.rb +7 -0
  3234. data/railties/lib/rails/generators/rails/plugin/templates/test/application_system_test_case.rb +5 -0
  3235. data/railties/lib/rails/generators/rails/plugin/templates/test/integration/navigation_test.rb +7 -0
  3236. data/railties/lib/rails/generators/rails/plugin/templates/test/test_helper.rb +26 -0
  3237. data/railties/lib/rails/generators/rails/resource/USAGE +23 -0
  3238. data/railties/lib/rails/generators/rails/resource/resource_generator.rb +21 -0
  3239. data/railties/lib/rails/generators/rails/resource_route/resource_route_generator.rb +48 -0
  3240. data/railties/lib/rails/generators/rails/scaffold/USAGE +41 -0
  3241. data/railties/lib/rails/generators/rails/scaffold/scaffold_generator.rb +36 -0
  3242. data/railties/lib/rails/generators/rails/scaffold/templates/scaffold.css +80 -0
  3243. data/railties/lib/rails/generators/rails/scaffold_controller/USAGE +19 -0
  3244. data/railties/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb +37 -0
  3245. data/railties/lib/rails/generators/rails/scaffold_controller/templates/api_controller.rb +61 -0
  3246. data/railties/lib/rails/generators/rails/scaffold_controller/templates/controller.rb +68 -0
  3247. data/railties/lib/rails/generators/rails/system_test/USAGE +10 -0
  3248. data/railties/lib/rails/generators/rails/system_test/system_test_generator.rb +9 -0
  3249. data/railties/lib/rails/generators/rails/task/USAGE +9 -0
  3250. data/railties/lib/rails/generators/rails/task/task_generator.rb +13 -0
  3251. data/railties/lib/rails/generators/rails/task/templates/task.rb +8 -0
  3252. data/railties/lib/rails/generators/resource_helpers.rb +87 -0
  3253. data/railties/lib/rails/generators/test_case.rb +37 -0
  3254. data/railties/lib/rails/generators/test_unit.rb +10 -0
  3255. data/railties/lib/rails/generators/test_unit/controller/controller_generator.rb +17 -0
  3256. data/railties/lib/rails/generators/test_unit/controller/templates/functional_test.rb +25 -0
  3257. data/railties/lib/rails/generators/test_unit/generator/generator_generator.rb +28 -0
  3258. data/railties/lib/rails/generators/test_unit/generator/templates/generator_test.rb +18 -0
  3259. data/railties/lib/rails/generators/test_unit/helper/helper_generator.rb +11 -0
  3260. data/railties/lib/rails/generators/test_unit/integration/integration_generator.rb +15 -0
  3261. data/railties/lib/rails/generators/test_unit/integration/templates/integration_test.rb +11 -0
  3262. data/railties/lib/rails/generators/test_unit/job/job_generator.rb +15 -0
  3263. data/railties/lib/rails/generators/test_unit/job/templates/unit_test.rb.erb +9 -0
  3264. data/railties/lib/rails/generators/test_unit/mailer/mailer_generator.rb +28 -0
  3265. data/railties/lib/rails/generators/test_unit/mailer/templates/functional_test.rb +23 -0
  3266. data/railties/lib/rails/generators/test_unit/mailer/templates/preview.rb +15 -0
  3267. data/railties/lib/rails/generators/test_unit/model/model_generator.rb +37 -0
  3268. data/railties/lib/rails/generators/test_unit/model/templates/fixtures.yml +29 -0
  3269. data/railties/lib/rails/generators/test_unit/model/templates/unit_test.rb +11 -0
  3270. data/railties/lib/rails/generators/test_unit/plugin/plugin_generator.rb +15 -0
  3271. data/railties/lib/rails/generators/test_unit/plugin/templates/%file_name%_test.rb.tt +7 -0
  3272. data/railties/lib/rails/generators/test_unit/plugin/templates/test_helper.rb +4 -0
  3273. data/railties/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb +59 -0
  3274. data/railties/lib/rails/generators/test_unit/scaffold/templates/api_functional_test.rb +46 -0
  3275. data/railties/lib/rails/generators/test_unit/scaffold/templates/functional_test.rb +56 -0
  3276. data/railties/lib/rails/generators/test_unit/scaffold/templates/system_test.rb +51 -0
  3277. data/railties/lib/rails/generators/test_unit/system/system_generator.rb +19 -0
  3278. data/railties/lib/rails/generators/test_unit/system/templates/application_system_test_case.rb +7 -0
  3279. data/railties/lib/rails/generators/test_unit/system/templates/system_test.rb +11 -0
  3280. data/railties/lib/rails/generators/testing/assertions.rb +127 -0
  3281. data/railties/lib/rails/generators/testing/behaviour.rb +111 -0
  3282. data/railties/lib/rails/generators/testing/setup_and_teardown.rb +20 -0
  3283. data/railties/lib/rails/info.rb +105 -0
  3284. data/railties/lib/rails/info_controller.rb +46 -0
  3285. data/railties/lib/rails/initializable.rb +95 -0
  3286. data/railties/lib/rails/mailers_controller.rb +87 -0
  3287. data/railties/lib/rails/paths.rb +227 -0
  3288. data/railties/lib/rails/plugin/test.rb +9 -0
  3289. data/railties/lib/rails/rack.rb +7 -0
  3290. data/railties/lib/rails/rack/logger.rb +80 -0
  3291. data/railties/lib/rails/railtie.rb +260 -0
  3292. data/railties/lib/rails/railtie/configurable.rb +37 -0
  3293. data/railties/lib/rails/railtie/configuration.rb +102 -0
  3294. data/railties/lib/rails/ruby_version_check.rb +15 -0
  3295. data/railties/lib/rails/secrets.rb +123 -0
  3296. data/railties/lib/rails/source_annotation_extractor.rb +141 -0
  3297. data/railties/lib/rails/tasks.rb +22 -0
  3298. data/railties/lib/rails/tasks/annotations.rake +22 -0
  3299. data/railties/lib/rails/tasks/dev.rake +10 -0
  3300. data/railties/lib/rails/tasks/engine.rake +85 -0
  3301. data/railties/lib/rails/tasks/framework.rake +58 -0
  3302. data/railties/lib/rails/tasks/initializers.rake +8 -0
  3303. data/railties/lib/rails/tasks/log.rake +42 -0
  3304. data/railties/lib/rails/tasks/middleware.rake +9 -0
  3305. data/railties/lib/rails/tasks/misc.rake +79 -0
  3306. data/railties/lib/rails/tasks/restart.rake +9 -0
  3307. data/railties/lib/rails/tasks/routes.rake +31 -0
  3308. data/railties/lib/rails/tasks/statistics.rake +31 -0
  3309. data/railties/lib/rails/tasks/tmp.rake +44 -0
  3310. data/railties/lib/rails/tasks/yarn.rake +13 -0
  3311. data/railties/lib/rails/templates/layouts/application.html.erb +36 -0
  3312. data/railties/lib/rails/templates/rails/info/properties.html.erb +1 -0
  3313. data/railties/lib/rails/templates/rails/info/routes.html.erb +9 -0
  3314. data/railties/lib/rails/templates/rails/mailers/email.html.erb +133 -0
  3315. data/railties/lib/rails/templates/rails/mailers/index.html.erb +8 -0
  3316. data/railties/lib/rails/templates/rails/mailers/mailer.html.erb +6 -0
  3317. data/railties/lib/rails/templates/rails/welcome/index.html.erb +74 -0
  3318. data/railties/lib/rails/test_help.rb +52 -0
  3319. data/railties/lib/rails/test_unit/line_filtering.rb +13 -0
  3320. data/railties/lib/rails/test_unit/railtie.rb +29 -0
  3321. data/railties/lib/rails/test_unit/reporter.rb +104 -0
  3322. data/railties/lib/rails/test_unit/runner.rb +143 -0
  3323. data/railties/lib/rails/test_unit/testing.rake +58 -0
  3324. data/railties/lib/rails/version.rb +10 -0
  3325. data/railties/lib/rails/welcome_controller.rb +10 -0
  3326. data/railties/railties.gemspec +41 -0
  3327. data/railties/test/abstract_unit.rb +33 -0
  3328. data/railties/test/app_loader_test.rb +91 -0
  3329. data/railties/test/application/asset_debugging_test.rb +171 -0
  3330. data/railties/test/application/assets_test.rb +524 -0
  3331. data/railties/test/application/bin_setup_test.rb +62 -0
  3332. data/railties/test/application/configuration/custom_test.rb +47 -0
  3333. data/railties/test/application/configuration_test.rb +1816 -0
  3334. data/railties/test/application/console_test.rb +158 -0
  3335. data/railties/test/application/current_attributes_integration_test.rb +86 -0
  3336. data/railties/test/application/dbconsole_test.rb +78 -0
  3337. data/railties/test/application/generators_test.rb +200 -0
  3338. data/railties/test/application/help_test.rb +25 -0
  3339. data/railties/test/application/initializers/frameworks_test.rb +276 -0
  3340. data/railties/test/application/initializers/hooks_test.rb +91 -0
  3341. data/railties/test/application/initializers/i18n_test.rb +296 -0
  3342. data/railties/test/application/initializers/load_path_test.rb +111 -0
  3343. data/railties/test/application/initializers/notifications_test.rb +57 -0
  3344. data/railties/test/application/integration_test_case_test.rb +75 -0
  3345. data/railties/test/application/loading_test.rb +373 -0
  3346. data/railties/test/application/mailer_previews_test.rb +787 -0
  3347. data/railties/test/application/middleware/cache_test.rb +181 -0
  3348. data/railties/test/application/middleware/cookies_test.rb +48 -0
  3349. data/railties/test/application/middleware/exceptions_test.rb +140 -0
  3350. data/railties/test/application/middleware/remote_ip_test.rb +80 -0
  3351. data/railties/test/application/middleware/sendfile_test.rb +75 -0
  3352. data/railties/test/application/middleware/session_test.rb +459 -0
  3353. data/railties/test/application/middleware/static_test.rb +70 -0
  3354. data/railties/test/application/middleware_test.rb +312 -0
  3355. data/railties/test/application/multiple_applications_test.rb +177 -0
  3356. data/railties/test/application/paths_test.rb +84 -0
  3357. data/railties/test/application/per_request_digest_cache_test.rb +72 -0
  3358. data/railties/test/application/rack/logger_test.rb +58 -0
  3359. data/railties/test/application/rackup_test.rb +44 -0
  3360. data/railties/test/application/rake/dbs_test.rb +320 -0
  3361. data/railties/test/application/rake/dev_test.rb +49 -0
  3362. data/railties/test/application/rake/framework_test.rb +48 -0
  3363. data/railties/test/application/rake/log_test.rb +35 -0
  3364. data/railties/test/application/rake/migrations_test.rb +306 -0
  3365. data/railties/test/application/rake/notes_test.rb +171 -0
  3366. data/railties/test/application/rake/restart_test.rb +40 -0
  3367. data/railties/test/application/rake/tmp_test.rb +45 -0
  3368. data/railties/test/application/rake_test.rb +425 -0
  3369. data/railties/test/application/rendering_test.rb +46 -0
  3370. data/railties/test/application/routing_test.rb +682 -0
  3371. data/railties/test/application/runner_test.rb +135 -0
  3372. data/railties/test/application/server_test.rb +61 -0
  3373. data/railties/test/application/test_runner_test.rb +771 -0
  3374. data/railties/test/application/test_test.rb +340 -0
  3375. data/railties/test/application/url_generation_test.rb +59 -0
  3376. data/railties/test/application/version_test.rb +26 -0
  3377. data/railties/test/backtrace_cleaner_test.rb +34 -0
  3378. data/railties/test/code_statistics_calculator_test.rb +332 -0
  3379. data/railties/test/code_statistics_test.rb +34 -0
  3380. data/railties/test/command/base_test.rb +13 -0
  3381. data/railties/test/commands/console_test.rb +192 -0
  3382. data/railties/test/commands/dbconsole_test.rb +355 -0
  3383. data/railties/test/commands/secrets_test.rb +49 -0
  3384. data/railties/test/commands/server_test.rb +204 -0
  3385. data/railties/test/configuration/middleware_stack_proxy_test.rb +63 -0
  3386. data/railties/test/console_helpers.rb +25 -0
  3387. data/railties/test/engine/commands_test.rb +80 -0
  3388. data/railties/test/engine_test.rb +27 -0
  3389. data/railties/test/env_helpers.rb +32 -0
  3390. data/railties/test/fixtures/about_yml_plugins/bad_about_yml/about.yml +1 -0
  3391. data/railties/test/fixtures/about_yml_plugins/bad_about_yml/init.rb +3 -0
  3392. data/railties/test/fixtures/about_yml_plugins/plugin_without_about_yml/init.rb +3 -0
  3393. data/railties/test/fixtures/lib/create_test_dummy_template.rb +3 -0
  3394. data/railties/test/fixtures/lib/generators/active_record/fixjour_generator.rb +10 -0
  3395. data/railties/test/fixtures/lib/generators/fixjour_generator.rb +4 -0
  3396. data/railties/test/fixtures/lib/generators/model_generator.rb +3 -0
  3397. data/railties/test/fixtures/lib/generators/usage_template/USAGE +1 -0
  3398. data/railties/test/fixtures/lib/generators/usage_template/usage_template_generator.rb +7 -0
  3399. data/railties/test/fixtures/lib/rails/generators/foobar/foobar_generator.rb +6 -0
  3400. data/railties/test/fixtures/lib/template.rb +3 -0
  3401. data/railties/test/generators/actions_test.rb +442 -0
  3402. data/railties/test/generators/api_app_generator_test.rb +164 -0
  3403. data/railties/test/generators/app_generator_test.rb +823 -0
  3404. data/railties/test/generators/application_record_generator_test.rb +16 -0
  3405. data/railties/test/generators/argv_scrubber_test.rb +138 -0
  3406. data/railties/test/generators/assets_generator_test.rb +21 -0
  3407. data/railties/test/generators/channel_generator_test.rb +79 -0
  3408. data/railties/test/generators/controller_generator_test.rb +112 -0
  3409. data/railties/test/generators/create_migration_test.rb +136 -0
  3410. data/railties/test/generators/encrypted_secrets_generator_test.rb +44 -0
  3411. data/railties/test/generators/generated_attribute_test.rb +154 -0
  3412. data/railties/test/generators/generator_generator_test.rb +73 -0
  3413. data/railties/test/generators/generator_test.rb +102 -0
  3414. data/railties/test/generators/generators_test_helper.rb +51 -0
  3415. data/railties/test/generators/helper_generator_test.rb +41 -0
  3416. data/railties/test/generators/integration_test_generator_test.rb +18 -0
  3417. data/railties/test/generators/job_generator_test.rb +38 -0
  3418. data/railties/test/generators/mailer_generator_test.rb +179 -0
  3419. data/railties/test/generators/migration_generator_test.rb +356 -0
  3420. data/railties/test/generators/model_generator_test.rb +469 -0
  3421. data/railties/test/generators/named_base_test.rb +141 -0
  3422. data/railties/test/generators/namespaced_generators_test.rb +436 -0
  3423. data/railties/test/generators/orm_test.rb +40 -0
  3424. data/railties/test/generators/plugin_generator_test.rb +756 -0
  3425. data/railties/test/generators/plugin_test_helper.rb +26 -0
  3426. data/railties/test/generators/plugin_test_runner_test.rb +116 -0
  3427. data/railties/test/generators/resource_generator_test.rb +90 -0
  3428. data/railties/test/generators/scaffold_controller_generator_test.rb +254 -0
  3429. data/railties/test/generators/scaffold_generator_test.rb +652 -0
  3430. data/railties/test/generators/shared_generator_tests.rb +270 -0
  3431. data/railties/test/generators/system_test_generator_test.rb +19 -0
  3432. data/railties/test/generators/task_generator_test.rb +26 -0
  3433. data/railties/test/generators/test_runner_in_engine_test.rb +34 -0
  3434. data/railties/test/generators_test.rb +248 -0
  3435. data/railties/test/initializable_test.rb +236 -0
  3436. data/railties/test/isolation/abstract_unit.rb +332 -0
  3437. data/railties/test/json_params_parsing_test.rb +51 -0
  3438. data/railties/test/path_generation_test.rb +85 -0
  3439. data/railties/test/paths_test.rb +298 -0
  3440. data/railties/test/rack_logger_test.rb +77 -0
  3441. data/railties/test/rails_info_controller_test.rb +89 -0
  3442. data/railties/test/rails_info_test.rb +73 -0
  3443. data/railties/test/railties/engine_test.rb +1476 -0
  3444. data/railties/test/railties/generators_test.rb +132 -0
  3445. data/railties/test/railties/mounted_engine_test.rb +281 -0
  3446. data/railties/test/railties/railtie_test.rb +216 -0
  3447. data/railties/test/secrets_test.rb +178 -0
  3448. data/railties/test/test_unit/reporter_test.rb +198 -0
  3449. data/railties/test/version_test.rb +14 -0
  3450. data/tasks/release.rb +253 -0
  3451. data/tasks/release_announcement_draft.erb +38 -0
  3452. data/tools/README.md +10 -0
  3453. data/tools/console +11 -0
  3454. data/tools/line_statistics +42 -0
  3455. data/tools/profile +138 -0
  3456. data/tools/test.rb +26 -0
  3457. data/version.rb +17 -0
  3458. metadata +3544 -0
@@ -0,0 +1,3522 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "abstract_unit"
4
+ require "controller/fake_models"
5
+
6
+ class FormHelperTest < ActionView::TestCase
7
+ include RenderERBUtils
8
+
9
+ tests ActionView::Helpers::FormHelper
10
+
11
+ class WithActiveStorageRoutesControllers < ActionController::Base
12
+ test_routes do
13
+ post "/quails/active_storage/direct_uploads" => "active_storage/direct_uploads#create", as: :quails_direct_uploads
14
+ end
15
+
16
+ def url_options
17
+ { host: "testtwo.host" }
18
+ end
19
+ end
20
+
21
+ def form_for(*)
22
+ @output_buffer = super
23
+ end
24
+
25
+ teardown do
26
+ I18n.backend.reload!
27
+ end
28
+
29
+ setup do
30
+ # Create "label" locale for testing I18n label helpers
31
+ I18n.backend.store_translations "label",
32
+ activemodel: {
33
+ attributes: {
34
+ post: {
35
+ cost: "Total cost"
36
+ },
37
+ "post/language": {
38
+ spanish: "Espanol"
39
+ }
40
+ }
41
+ },
42
+ helpers: {
43
+ label: {
44
+ post: {
45
+ body: "Write entire text here",
46
+ color: {
47
+ red: "Rojo"
48
+ },
49
+ comments: {
50
+ body: "Write body here"
51
+ }
52
+ },
53
+ tag: {
54
+ value: "Tag"
55
+ },
56
+ post_delegate: {
57
+ title: "Delegate model_name title"
58
+ }
59
+ }
60
+ }
61
+
62
+ # Create "submit" locale for testing I18n submit helpers
63
+ I18n.backend.store_translations "submit",
64
+ helpers: {
65
+ submit: {
66
+ create: "Create %{model}",
67
+ update: "Confirm %{model} changes",
68
+ submit: "Save changes",
69
+ another_post: {
70
+ update: "Update your %{model}"
71
+ }
72
+ }
73
+ }
74
+
75
+ I18n.backend.store_translations "placeholder",
76
+ activemodel: {
77
+ attributes: {
78
+ post: {
79
+ cost: "Total cost"
80
+ },
81
+ "post/cost": {
82
+ uk: "Pounds"
83
+ }
84
+ }
85
+ },
86
+ helpers: {
87
+ placeholder: {
88
+ post: {
89
+ title: "What is this about?",
90
+ written_on: {
91
+ spanish: "Escrito en"
92
+ },
93
+ comments: {
94
+ body: "Write body here"
95
+ }
96
+ },
97
+ post_delegate: {
98
+ title: "Delegate model_name title"
99
+ },
100
+ tag: {
101
+ value: "Tag"
102
+ }
103
+ }
104
+ }
105
+
106
+ @post = Post.new
107
+ @comment = Comment.new
108
+ def @post.errors()
109
+ Class.new {
110
+ def [](field); field == "author_name" ? ["can't be empty"] : [] end
111
+ def empty?() false end
112
+ def count() 1 end
113
+ def full_messages() ["Author name can't be empty"] end
114
+ }.new
115
+ end
116
+ def @post.to_key; [123]; end
117
+ def @post.id; 0; end
118
+ def @post.id_before_type_cast; "omg"; end
119
+ def @post.id_came_from_user?; true; end
120
+ def @post.to_param; "123"; end
121
+
122
+ @post.persisted = true
123
+ @post.title = "Hello World"
124
+ @post.author_name = ""
125
+ @post.body = "Back to the hill and over it again!"
126
+ @post.secret = 1
127
+ @post.written_on = Date.new(2004, 6, 15)
128
+
129
+ @post.comments = []
130
+ @post.comments << @comment
131
+
132
+ @post.tags = []
133
+ @post.tags << Tag.new
134
+
135
+ @post_delegator = PostDelegator.new
136
+
137
+ @post_delegator.title = "Hello World"
138
+
139
+ @car = Car.new("#000FFF")
140
+ end
141
+
142
+ Routes = ActionDispatch::Routing::RouteSet.new
143
+ Routes.draw do
144
+ resources :posts do
145
+ resources :comments
146
+ end
147
+
148
+ namespace :admin do
149
+ resources :posts do
150
+ resources :comments
151
+ end
152
+ end
153
+
154
+ get "/foo", to: "controller#action"
155
+ root to: "main#index"
156
+ end
157
+
158
+ def _routes
159
+ Routes
160
+ end
161
+
162
+ include Routes.url_helpers
163
+
164
+ def url_for(object)
165
+ @url_for_options = object
166
+
167
+ if object.is_a?(Hash) && object[:use_route].blank? && object[:controller].blank?
168
+ object.merge!(controller: "main", action: "index")
169
+ end
170
+
171
+ super
172
+ end
173
+
174
+ class FooTag < ActionView::Helpers::Tags::Base
175
+ def initialize; end
176
+ end
177
+
178
+ def test_tags_base_child_without_render_method
179
+ assert_raise(NotImplementedError) { FooTag.new.render }
180
+ end
181
+
182
+ def test_label
183
+ assert_dom_equal('<label for="post_title">Title</label>', label("post", "title"))
184
+ assert_dom_equal(
185
+ '<label for="post_title">The title goes here</label>',
186
+ label("post", "title", "The title goes here")
187
+ )
188
+ assert_dom_equal(
189
+ '<label class="title_label" for="post_title">Title</label>',
190
+ label("post", "title", nil, class: "title_label")
191
+ )
192
+ assert_dom_equal('<label for="post_secret">Secret?</label>', label("post", "secret?"))
193
+ end
194
+
195
+ def test_label_with_symbols
196
+ assert_dom_equal('<label for="post_title">Title</label>', label(:post, :title))
197
+ assert_dom_equal('<label for="post_secret">Secret?</label>', label(:post, :secret?))
198
+ end
199
+
200
+ def test_label_with_locales_strings
201
+ with_locale :label do
202
+ assert_dom_equal('<label for="post_body">Write entire text here</label>', label("post", "body"))
203
+ end
204
+ end
205
+
206
+ def test_label_with_human_attribute_name
207
+ with_locale :label do
208
+ assert_dom_equal('<label for="post_cost">Total cost</label>', label(:post, :cost))
209
+ end
210
+ end
211
+
212
+ def test_label_with_human_attribute_name_and_options
213
+ with_locale :label do
214
+ assert_dom_equal('<label for="post_language_spanish">Espanol</label>', label(:post, :language, value: "spanish"))
215
+ end
216
+ end
217
+
218
+ def test_label_with_locales_symbols
219
+ with_locale :label do
220
+ assert_dom_equal('<label for="post_body">Write entire text here</label>', label(:post, :body))
221
+ end
222
+ end
223
+
224
+ def test_label_with_locales_and_options
225
+ with_locale :label do
226
+ assert_dom_equal(
227
+ '<label for="post_body" class="post_body">Write entire text here</label>',
228
+ label(:post, :body, class: "post_body")
229
+ )
230
+ end
231
+ end
232
+
233
+ def test_label_with_locales_and_value
234
+ with_locale :label do
235
+ assert_dom_equal('<label for="post_color_red">Rojo</label>', label(:post, :color, value: "red"))
236
+ end
237
+ end
238
+
239
+ def test_label_with_locales_and_nested_attributes
240
+ with_locale :label do
241
+ form_for(@post, html: { id: "create-post" }) do |f|
242
+ f.fields_for(:comments) do |cf|
243
+ concat cf.label(:body)
244
+ end
245
+ end
246
+
247
+ expected = whole_form("/posts/123", "create-post", "edit_post", method: "patch") do
248
+ '<label for="post_comments_attributes_0_body">Write body here</label>'
249
+ end
250
+
251
+ assert_dom_equal expected, output_buffer
252
+ end
253
+ end
254
+
255
+ def test_label_with_locales_fallback_and_nested_attributes
256
+ with_locale :label do
257
+ form_for(@post, html: { id: "create-post" }) do |f|
258
+ f.fields_for(:tags) do |cf|
259
+ concat cf.label(:value)
260
+ end
261
+ end
262
+
263
+ expected = whole_form("/posts/123", "create-post", "edit_post", method: "patch") do
264
+ '<label for="post_tags_attributes_0_value">Tag</label>'
265
+ end
266
+
267
+ assert_dom_equal expected, output_buffer
268
+ end
269
+ end
270
+
271
+ def test_label_with_non_active_record_object
272
+ form_for(OpenStruct.new(name: "ok"), as: "person", url: "/an", html: { id: "create-person" }) do |f|
273
+ f.label(:name)
274
+ end
275
+
276
+ expected = whole_form("/an", "create-person", "new_person", method: "post") do
277
+ '<label for="person_name">Name</label>'
278
+ end
279
+
280
+ assert_dom_equal expected, output_buffer
281
+ end
282
+
283
+ def test_label_with_for_attribute_as_symbol
284
+ assert_dom_equal('<label for="my_for">Title</label>', label(:post, :title, nil, for: "my_for"))
285
+ end
286
+
287
+ def test_label_with_for_attribute_as_string
288
+ assert_dom_equal('<label for="my_for">Title</label>', label(:post, :title, nil, "for" => "my_for"))
289
+ end
290
+
291
+ def test_label_does_not_generate_for_attribute_when_given_nil
292
+ assert_dom_equal("<label>Title</label>", label(:post, :title, for: nil))
293
+ end
294
+
295
+ def test_label_with_id_attribute_as_symbol
296
+ assert_dom_equal(
297
+ '<label for="post_title" id="my_id">Title</label>',
298
+ label(:post, :title, nil, id: "my_id")
299
+ )
300
+ end
301
+
302
+ def test_label_with_id_attribute_as_string
303
+ assert_dom_equal(
304
+ '<label for="post_title" id="my_id">Title</label>',
305
+ label(:post, :title, nil, "id" => "my_id")
306
+ )
307
+ end
308
+
309
+ def test_label_with_for_and_id_attributes_as_symbol
310
+ assert_dom_equal(
311
+ '<label for="my_for" id="my_id">Title</label>',
312
+ label(:post, :title, nil, for: "my_for", id: "my_id")
313
+ )
314
+ end
315
+
316
+ def test_label_with_for_and_id_attributes_as_string
317
+ assert_dom_equal(
318
+ '<label for="my_for" id="my_id">Title</label>',
319
+ label(:post, :title, nil, "for" => "my_for", "id" => "my_id")
320
+ )
321
+ end
322
+
323
+ def test_label_for_radio_buttons_with_value
324
+ assert_dom_equal(
325
+ '<label for="post_title_great_title">The title goes here</label>',
326
+ label("post", "title", "The title goes here", value: "great_title")
327
+ )
328
+ assert_dom_equal(
329
+ '<label for="post_title_great_title">The title goes here</label>',
330
+ label("post", "title", "The title goes here", value: "great title")
331
+ )
332
+ end
333
+
334
+ def test_label_with_block
335
+ assert_dom_equal(
336
+ '<label for="post_title">The title, please:</label>',
337
+ label(:post, :title) { "The title, please:" }
338
+ )
339
+ end
340
+
341
+ def test_label_with_block_and_html
342
+ assert_dom_equal(
343
+ '<label for="post_terms">Accept <a href="/terms">Terms</a>.</label>',
344
+ label(:post, :terms) { raw('Accept <a href="/terms">Terms</a>.') }
345
+ )
346
+ end
347
+
348
+ def test_label_with_block_and_options
349
+ assert_dom_equal(
350
+ '<label for="my_for">The title, please:</label>',
351
+ label(:post, :title, "for" => "my_for") { "The title, please:" }
352
+ )
353
+ end
354
+
355
+ def test_label_with_block_and_builder
356
+ with_locale :label do
357
+ assert_dom_equal(
358
+ '<label for="post_body"><b>Write entire text here</b></label>',
359
+ label(:post, :body) { |b| raw("<b>#{b.translation}</b>") }
360
+ )
361
+ end
362
+ end
363
+
364
+ def test_label_with_block_in_erb
365
+ assert_dom_equal(
366
+ %{<label for="post_message">\n Message\n <input id="post_message" name="post[message]" type="text" />\n</label>},
367
+ view.render("test/label_with_block")
368
+ )
369
+ end
370
+
371
+ def test_label_with_to_model
372
+ assert_dom_equal(
373
+ %{<label for="post_delegator_title">Delegate Title</label>},
374
+ label(:post_delegator, :title)
375
+ )
376
+ end
377
+
378
+ def test_label_with_to_model_and_overridden_model_name
379
+ with_locale :label do
380
+ assert_dom_equal(
381
+ %{<label for="post_delegator_title">Delegate model_name title</label>},
382
+ label(:post_delegator, :title)
383
+ )
384
+ end
385
+ end
386
+
387
+ def test_text_field_placeholder_without_locales
388
+ with_locale :placeholder do
389
+ assert_dom_equal('<input id="post_body" name="post[body]" placeholder="Body" type="text" value="Back to the hill and over it again!" />', text_field(:post, :body, placeholder: true))
390
+ end
391
+ end
392
+
393
+ def test_text_field_placeholder_with_locales
394
+ with_locale :placeholder do
395
+ assert_dom_equal('<input id="post_title" name="post[title]" placeholder="What is this about?" type="text" value="Hello World" />', text_field(:post, :title, placeholder: true))
396
+ end
397
+ end
398
+
399
+ def test_text_field_placeholder_with_locales_and_to_model
400
+ with_locale :placeholder do
401
+ assert_dom_equal(
402
+ '<input id="post_delegator_title" name="post_delegator[title]" placeholder="Delegate model_name title" type="text" value="Hello World" />',
403
+ text_field(:post_delegator, :title, placeholder: true)
404
+ )
405
+ end
406
+ end
407
+
408
+ def test_text_field_placeholder_with_human_attribute_name
409
+ with_locale :placeholder do
410
+ assert_dom_equal('<input id="post_cost" name="post[cost]" placeholder="Total cost" type="text" />', text_field(:post, :cost, placeholder: true))
411
+ end
412
+ end
413
+
414
+ def test_text_field_placeholder_with_human_attribute_name_and_to_model
415
+ assert_dom_equal(
416
+ '<input id="post_delegator_title" name="post_delegator[title]" placeholder="Delegate Title" type="text" value="Hello World" />',
417
+ text_field(:post_delegator, :title, placeholder: true)
418
+ )
419
+ end
420
+
421
+ def test_text_field_placeholder_with_string_value
422
+ with_locale :placeholder do
423
+ assert_dom_equal('<input id="post_cost" name="post[cost]" placeholder="HOW MUCH?" type="text" />', text_field(:post, :cost, placeholder: "HOW MUCH?"))
424
+ end
425
+ end
426
+
427
+ def test_text_field_placeholder_with_human_attribute_name_and_value
428
+ with_locale :placeholder do
429
+ assert_dom_equal('<input id="post_cost" name="post[cost]" placeholder="Pounds" type="text" />', text_field(:post, :cost, placeholder: :uk))
430
+ end
431
+ end
432
+
433
+ def test_text_field_placeholder_with_locales_and_value
434
+ with_locale :placeholder do
435
+ assert_dom_equal('<input id="post_written_on" name="post[written_on]" placeholder="Escrito en" type="text" value="2004-06-15" />', text_field(:post, :written_on, placeholder: :spanish))
436
+ end
437
+ end
438
+
439
+ def test_text_field_placeholder_with_locales_and_nested_attributes
440
+ with_locale :placeholder do
441
+ form_for(@post, html: { id: "create-post" }) do |f|
442
+ f.fields_for(:comments) do |cf|
443
+ concat cf.text_field(:body, placeholder: true)
444
+ end
445
+ end
446
+
447
+ expected = whole_form("/posts/123", "create-post", "edit_post", method: "patch") do
448
+ '<input id="post_comments_attributes_0_body" name="post[comments_attributes][0][body]" placeholder="Write body here" type="text" />'
449
+ end
450
+
451
+ assert_dom_equal expected, output_buffer
452
+ end
453
+ end
454
+
455
+ def test_text_field_placeholder_with_locales_fallback_and_nested_attributes
456
+ with_locale :placeholder do
457
+ form_for(@post, html: { id: "create-post" }) do |f|
458
+ f.fields_for(:tags) do |cf|
459
+ concat cf.text_field(:value, placeholder: true)
460
+ end
461
+ end
462
+
463
+ expected = whole_form("/posts/123", "create-post", "edit_post", method: "patch") do
464
+ '<input id="post_tags_attributes_0_value" name="post[tags_attributes][0][value]" placeholder="Tag" type="text" value="new tag" />'
465
+ end
466
+
467
+ assert_dom_equal expected, output_buffer
468
+ end
469
+ end
470
+
471
+ def test_text_field
472
+ assert_dom_equal(
473
+ '<input id="post_title" name="post[title]" type="text" value="Hello World" />',
474
+ text_field("post", "title")
475
+ )
476
+ assert_dom_equal(
477
+ '<input id="post_title" name="post[title]" type="password" />',
478
+ password_field("post", "title")
479
+ )
480
+ assert_dom_equal(
481
+ '<input id="post_title" name="post[title]" type="password" value="Hello World" />',
482
+ password_field("post", "title", value: @post.title)
483
+ )
484
+ assert_dom_equal(
485
+ '<input id="person_name" name="person[name]" type="password" />',
486
+ password_field("person", "name")
487
+ )
488
+ end
489
+
490
+ def test_text_field_with_escapes
491
+ @post.title = "<b>Hello World</b>"
492
+ assert_dom_equal(
493
+ '<input id="post_title" name="post[title]" type="text" value="&lt;b&gt;Hello World&lt;/b&gt;" />',
494
+ text_field("post", "title")
495
+ )
496
+ end
497
+
498
+ def test_text_field_with_html_entities
499
+ @post.title = "The HTML Entity for & is &amp;"
500
+ assert_dom_equal(
501
+ '<input id="post_title" name="post[title]" type="text" value="The HTML Entity for &amp; is &amp;amp;" />',
502
+ text_field("post", "title")
503
+ )
504
+ end
505
+
506
+ def test_text_field_with_options
507
+ expected = '<input id="post_title" name="post[title]" size="35" type="text" value="Hello World" />'
508
+ assert_dom_equal expected, text_field("post", "title", "size" => 35)
509
+ assert_dom_equal expected, text_field("post", "title", size: 35)
510
+ end
511
+
512
+ def test_text_field_assuming_size
513
+ expected = '<input id="post_title" maxlength="35" name="post[title]" size="35" type="text" value="Hello World" />'
514
+ assert_dom_equal expected, text_field("post", "title", "maxlength" => 35)
515
+ assert_dom_equal expected, text_field("post", "title", maxlength: 35)
516
+ end
517
+
518
+ def test_text_field_removing_size
519
+ expected = '<input id="post_title" maxlength="35" name="post[title]" type="text" value="Hello World" />'
520
+ assert_dom_equal expected, text_field("post", "title", "maxlength" => 35, "size" => nil)
521
+ assert_dom_equal expected, text_field("post", "title", maxlength: 35, size: nil)
522
+ end
523
+
524
+ def test_text_field_with_nil_value
525
+ expected = '<input id="post_title" name="post[title]" type="text" />'
526
+ assert_dom_equal expected, text_field("post", "title", value: nil)
527
+ end
528
+
529
+ def test_text_field_with_nil_name
530
+ expected = '<input id="post_title" type="text" value="Hello World" />'
531
+ assert_dom_equal expected, text_field("post", "title", name: nil)
532
+ end
533
+
534
+ def test_text_field_doesnt_change_param_values
535
+ object_name = "post[]"
536
+ expected = '<input id="post_123_title" name="post[123][title]" type="text" value="Hello World" />'
537
+ assert_dom_equal expected, text_field(object_name, "title")
538
+ end
539
+
540
+ def test_file_field_has_no_size
541
+ expected = '<input id="user_avatar" name="user[avatar]" type="file" />'
542
+ assert_dom_equal expected, file_field("user", "avatar")
543
+ end
544
+
545
+ def test_file_field_with_multiple_behavior
546
+ expected = '<input id="import_file" multiple="multiple" name="import[file][]" type="file" />'
547
+ assert_dom_equal expected, file_field("import", "file", multiple: true)
548
+ end
549
+
550
+ def test_file_field_with_multiple_behavior_and_explicit_name
551
+ expected = '<input id="import_file" multiple="multiple" name="custom" type="file" />'
552
+ assert_dom_equal expected, file_field("import", "file", multiple: true, name: "custom")
553
+ end
554
+
555
+ def test_file_field_with_direct_upload_when_quails_direct_uploads_url_is_not_defined
556
+ expected = '<input type="file" name="import[file]" id="import_file" />'
557
+ assert_dom_equal expected, file_field("import", "file", direct_upload: true)
558
+ end
559
+
560
+ def test_file_field_with_direct_upload_when_quails_direct_uploads_url_is_defined
561
+ @controller = WithActiveStorageRoutesControllers.new
562
+
563
+ expected = '<input data-direct-upload-url="http://testtwo.host/quails/active_storage/direct_uploads" type="file" name="import[file]" id="import_file" />'
564
+ assert_dom_equal expected, file_field("import", "file", direct_upload: true)
565
+ end
566
+
567
+ def test_file_field_with_direct_upload_dont_mutate_arguments
568
+ original_options = { class: "pix", direct_upload: true }
569
+
570
+ expected = '<input class="pix" type="file" name="import[file]" id="import_file" />'
571
+ assert_dom_equal expected, file_field("import", "file", original_options)
572
+
573
+ assert_equal({ class: "pix", direct_upload: true }, original_options)
574
+ end
575
+
576
+ def test_hidden_field
577
+ assert_dom_equal(
578
+ '<input id="post_title" name="post[title]" type="hidden" value="Hello World" />',
579
+ hidden_field("post", "title")
580
+ )
581
+ assert_dom_equal(
582
+ '<input id="post_secret" name="post[secret]" type="hidden" value="1" />',
583
+ hidden_field("post", "secret?")
584
+ )
585
+ end
586
+
587
+ def test_hidden_field_with_escapes
588
+ @post.title = "<b>Hello World</b>"
589
+ assert_dom_equal(
590
+ '<input id="post_title" name="post[title]" type="hidden" value="&lt;b&gt;Hello World&lt;/b&gt;" />',
591
+ hidden_field("post", "title")
592
+ )
593
+ end
594
+
595
+ def test_hidden_field_with_nil_value
596
+ expected = '<input id="post_title" name="post[title]" type="hidden" />'
597
+ assert_dom_equal expected, hidden_field("post", "title", value: nil)
598
+ end
599
+
600
+ def test_hidden_field_with_options
601
+ assert_dom_equal(
602
+ '<input id="post_title" name="post[title]" type="hidden" value="Something Else" />',
603
+ hidden_field("post", "title", value: "Something Else")
604
+ )
605
+ end
606
+
607
+ def test_text_field_with_custom_type
608
+ assert_dom_equal(
609
+ '<input id="user_email" name="user[email]" type="email" />',
610
+ text_field("user", "email", type: "email")
611
+ )
612
+ end
613
+
614
+ def test_check_box_is_html_safe
615
+ assert check_box("post", "secret").html_safe?
616
+ end
617
+
618
+ def test_check_box_checked_if_object_value_is_same_that_check_value
619
+ assert_dom_equal(
620
+ '<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
621
+ check_box("post", "secret")
622
+ )
623
+ end
624
+
625
+ def test_check_box_not_checked_if_object_value_is_same_that_unchecked_value
626
+ @post.secret = 0
627
+ assert_dom_equal(
628
+ '<input name="post[secret]" type="hidden" value="0" /><input id="post_secret" name="post[secret]" type="checkbox" value="1" />',
629
+ check_box("post", "secret")
630
+ )
631
+ end
632
+
633
+ def test_check_box_checked_if_option_checked_is_present
634
+ assert_dom_equal(
635
+ '<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
636
+ check_box("post", "secret", "checked" => "checked")
637
+ )
638
+ end
639
+
640
+ def test_check_box_checked_if_object_value_is_true
641
+ @post.secret = true
642
+ assert_dom_equal(
643
+ '<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
644
+ check_box("post", "secret")
645
+ )
646
+
647
+ assert_dom_equal(
648
+ '<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
649
+ check_box("post", "secret?")
650
+ )
651
+ end
652
+
653
+ def test_check_box_checked_if_object_value_includes_checked_value
654
+ @post.secret = ["0"]
655
+ assert_dom_equal(
656
+ '<input name="post[secret]" type="hidden" value="0" /><input id="post_secret" name="post[secret]" type="checkbox" value="1" />',
657
+ check_box("post", "secret")
658
+ )
659
+
660
+ @post.secret = ["1"]
661
+ assert_dom_equal(
662
+ '<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
663
+ check_box("post", "secret")
664
+ )
665
+
666
+ @post.secret = Set.new(["1"])
667
+ assert_dom_equal(
668
+ '<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
669
+ check_box("post", "secret")
670
+ )
671
+ end
672
+
673
+ def test_check_box_with_include_hidden_false
674
+ @post.secret = false
675
+ assert_dom_equal(
676
+ '<input id="post_secret" name="post[secret]" type="checkbox" value="1" />',
677
+ check_box("post", "secret", include_hidden: false)
678
+ )
679
+ end
680
+
681
+ def test_check_box_with_explicit_checked_and_unchecked_values_when_object_value_is_string
682
+ @post.secret = "on"
683
+ assert_dom_equal(
684
+ '<input name="post[secret]" type="hidden" value="off" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="on" />',
685
+ check_box("post", "secret", {}, "on", "off")
686
+ )
687
+
688
+ @post.secret = "off"
689
+ assert_dom_equal(
690
+ '<input name="post[secret]" type="hidden" value="off" /><input id="post_secret" name="post[secret]" type="checkbox" value="on" />',
691
+ check_box("post", "secret", {}, "on", "off")
692
+ )
693
+ end
694
+
695
+ def test_check_box_with_explicit_checked_and_unchecked_values_when_object_value_is_boolean
696
+ @post.secret = false
697
+ assert_dom_equal(
698
+ '<input name="post[secret]" type="hidden" value="true" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="false" />',
699
+ check_box("post", "secret", {}, false, true)
700
+ )
701
+
702
+ @post.secret = true
703
+ assert_dom_equal(
704
+ '<input name="post[secret]" type="hidden" value="true" /><input id="post_secret" name="post[secret]" type="checkbox" value="false" />',
705
+ check_box("post", "secret", {}, false, true)
706
+ )
707
+ end
708
+
709
+ def test_check_box_with_explicit_checked_and_unchecked_values_when_object_value_is_integer
710
+ @post.secret = 0
711
+ assert_dom_equal(
712
+ '<input name="post[secret]" type="hidden" value="1" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="0" />',
713
+ check_box("post", "secret", {}, 0, 1)
714
+ )
715
+
716
+ @post.secret = 1
717
+ assert_dom_equal(
718
+ '<input name="post[secret]" type="hidden" value="1" /><input id="post_secret" name="post[secret]" type="checkbox" value="0" />',
719
+ check_box("post", "secret", {}, 0, 1)
720
+ )
721
+
722
+ @post.secret = 2
723
+ assert_dom_equal(
724
+ '<input name="post[secret]" type="hidden" value="1" /><input id="post_secret" name="post[secret]" type="checkbox" value="0" />',
725
+ check_box("post", "secret", {}, 0, 1)
726
+ )
727
+ end
728
+
729
+ def test_check_box_with_explicit_checked_and_unchecked_values_when_object_value_is_float
730
+ @post.secret = 0.0
731
+ assert_dom_equal(
732
+ '<input name="post[secret]" type="hidden" value="1" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="0" />',
733
+ check_box("post", "secret", {}, 0, 1)
734
+ )
735
+
736
+ @post.secret = 1.1
737
+ assert_dom_equal(
738
+ '<input name="post[secret]" type="hidden" value="1" /><input id="post_secret" name="post[secret]" type="checkbox" value="0" />',
739
+ check_box("post", "secret", {}, 0, 1)
740
+ )
741
+
742
+ @post.secret = 2.2
743
+ assert_dom_equal(
744
+ '<input name="post[secret]" type="hidden" value="1" /><input id="post_secret" name="post[secret]" type="checkbox" value="0" />',
745
+ check_box("post", "secret", {}, 0, 1)
746
+ )
747
+ end
748
+
749
+ def test_check_box_with_explicit_checked_and_unchecked_values_when_object_value_is_big_decimal
750
+ @post.secret = BigDecimal.new(0)
751
+ assert_dom_equal(
752
+ '<input name="post[secret]" type="hidden" value="1" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="0" />',
753
+ check_box("post", "secret", {}, 0, 1)
754
+ )
755
+
756
+ @post.secret = BigDecimal.new(1)
757
+ assert_dom_equal(
758
+ '<input name="post[secret]" type="hidden" value="1" /><input id="post_secret" name="post[secret]" type="checkbox" value="0" />',
759
+ check_box("post", "secret", {}, 0, 1)
760
+ )
761
+
762
+ @post.secret = BigDecimal.new(2.2, 1)
763
+ assert_dom_equal(
764
+ '<input name="post[secret]" type="hidden" value="1" /><input id="post_secret" name="post[secret]" type="checkbox" value="0" />',
765
+ check_box("post", "secret", {}, 0, 1)
766
+ )
767
+ end
768
+
769
+ def test_check_box_with_nil_unchecked_value
770
+ @post.secret = "on"
771
+ assert_dom_equal(
772
+ '<input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="on" />',
773
+ check_box("post", "secret", {}, "on", nil)
774
+ )
775
+ end
776
+
777
+ def test_check_box_with_nil_unchecked_value_is_html_safe
778
+ assert check_box("post", "secret", {}, "on", nil).html_safe?
779
+ end
780
+
781
+ def test_check_box_with_multiple_behavior
782
+ @post.comment_ids = [2, 3]
783
+ assert_dom_equal(
784
+ '<input name="post[comment_ids][]" type="hidden" value="0" /><input id="post_comment_ids_1" name="post[comment_ids][]" type="checkbox" value="1" />',
785
+ check_box("post", "comment_ids", { multiple: true }, 1)
786
+ )
787
+ assert_dom_equal(
788
+ '<input name="post[comment_ids][]" type="hidden" value="0" /><input checked="checked" id="post_comment_ids_3" name="post[comment_ids][]" type="checkbox" value="3" />',
789
+ check_box("post", "comment_ids", { multiple: true }, 3)
790
+ )
791
+ end
792
+
793
+ def test_check_box_with_multiple_behavior_and_index
794
+ @post.comment_ids = [2, 3]
795
+ assert_dom_equal(
796
+ '<input name="post[foo][comment_ids][]" type="hidden" value="0" /><input id="post_foo_comment_ids_1" name="post[foo][comment_ids][]" type="checkbox" value="1" />',
797
+ check_box("post", "comment_ids", { multiple: true, index: "foo" }, 1)
798
+ )
799
+ assert_dom_equal(
800
+ '<input name="post[bar][comment_ids][]" type="hidden" value="0" /><input checked="checked" id="post_bar_comment_ids_3" name="post[bar][comment_ids][]" type="checkbox" value="3" />',
801
+ check_box("post", "comment_ids", { multiple: true, index: "bar" }, 3)
802
+ )
803
+ end
804
+
805
+ def test_checkbox_disabled_disables_hidden_field
806
+ assert_dom_equal(
807
+ '<input name="post[secret]" type="hidden" value="0" disabled="disabled"/><input checked="checked" disabled="disabled" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
808
+ check_box("post", "secret", disabled: true)
809
+ )
810
+ end
811
+
812
+ def test_checkbox_form_html5_attribute
813
+ assert_dom_equal(
814
+ '<input form="new_form" name="post[secret]" type="hidden" value="0" /><input checked="checked" form="new_form" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
815
+ check_box("post", "secret", form: "new_form")
816
+ )
817
+ end
818
+
819
+ def test_radio_button
820
+ assert_dom_equal('<input checked="checked" id="post_title_hello_world" name="post[title]" type="radio" value="Hello World" />',
821
+ radio_button("post", "title", "Hello World")
822
+ )
823
+ assert_dom_equal('<input id="post_title_goodbye_world" name="post[title]" type="radio" value="Goodbye World" />',
824
+ radio_button("post", "title", "Goodbye World")
825
+ )
826
+ assert_dom_equal('<input id="item_subobject_title_inside_world" name="item[subobject][title]" type="radio" value="inside world"/>',
827
+ radio_button("item[subobject]", "title", "inside world")
828
+ )
829
+ end
830
+
831
+ def test_radio_button_is_checked_with_integers
832
+ assert_dom_equal('<input checked="checked" id="post_secret_1" name="post[secret]" type="radio" value="1" />',
833
+ radio_button("post", "secret", "1")
834
+ )
835
+ end
836
+
837
+ def test_radio_button_with_negative_integer_value
838
+ assert_dom_equal('<input id="post_secret_-1" name="post[secret]" type="radio" value="-1" />',
839
+ radio_button("post", "secret", "-1"))
840
+ end
841
+
842
+ def test_radio_button_respects_passed_in_id
843
+ assert_dom_equal('<input checked="checked" id="foo" name="post[secret]" type="radio" value="1" />',
844
+ radio_button("post", "secret", "1", id: "foo")
845
+ )
846
+ end
847
+
848
+ def test_radio_button_with_booleans
849
+ assert_dom_equal('<input id="post_secret_true" name="post[secret]" type="radio" value="true" />',
850
+ radio_button("post", "secret", true)
851
+ )
852
+
853
+ assert_dom_equal('<input id="post_secret_false" name="post[secret]" type="radio" value="false" />',
854
+ radio_button("post", "secret", false)
855
+ )
856
+ end
857
+
858
+ def test_text_area_placeholder_without_locales
859
+ with_locale :placeholder do
860
+ assert_dom_equal(
861
+ %{<textarea id="post_body" name="post[body]" placeholder="Body">\nBack to the hill and over it again!</textarea>},
862
+ text_area(:post, :body, placeholder: true)
863
+ )
864
+ end
865
+ end
866
+
867
+ def test_text_area_placeholder_with_locales
868
+ with_locale :placeholder do
869
+ assert_dom_equal(
870
+ %{<textarea id="post_title" name="post[title]" placeholder="What is this about?">\nHello World</textarea>},
871
+ text_area(:post, :title, placeholder: true)
872
+ )
873
+ end
874
+ end
875
+
876
+ def test_text_area_placeholder_with_human_attribute_name
877
+ with_locale :placeholder do
878
+ assert_dom_equal(
879
+ %{<textarea id="post_cost" name="post[cost]" placeholder="Total cost">\n</textarea>},
880
+ text_area(:post, :cost, placeholder: true)
881
+ )
882
+ end
883
+ end
884
+
885
+ def test_text_area_placeholder_with_string_value
886
+ with_locale :placeholder do
887
+ assert_dom_equal(
888
+ %{<textarea id="post_cost" name="post[cost]" placeholder="HOW MUCH?">\n</textarea>},
889
+ text_area(:post, :cost, placeholder: "HOW MUCH?")
890
+ )
891
+ end
892
+ end
893
+
894
+ def test_text_area_placeholder_with_human_attribute_name_and_value
895
+ with_locale :placeholder do
896
+ assert_dom_equal(
897
+ %{<textarea id="post_cost" name="post[cost]" placeholder="Pounds">\n</textarea>},
898
+ text_area(:post, :cost, placeholder: :uk)
899
+ )
900
+ end
901
+ end
902
+
903
+ def test_text_area_placeholder_with_locales_and_value
904
+ with_locale :placeholder do
905
+ assert_dom_equal(
906
+ %{<textarea id="post_written_on" name="post[written_on]" placeholder="Escrito en">\n2004-06-15</textarea>},
907
+ text_area(:post, :written_on, placeholder: :spanish)
908
+ )
909
+ end
910
+ end
911
+
912
+ def test_text_area_placeholder_with_locales_and_nested_attributes
913
+ with_locale :placeholder do
914
+ form_for(@post, html: { id: "create-post" }) do |f|
915
+ f.fields_for(:comments) do |cf|
916
+ concat cf.text_area(:body, placeholder: true)
917
+ end
918
+ end
919
+
920
+ expected = whole_form("/posts/123", "create-post", "edit_post", method: "patch") do
921
+ %{<textarea id="post_comments_attributes_0_body" name="post[comments_attributes][0][body]" placeholder="Write body here">\n</textarea>}
922
+ end
923
+
924
+ assert_dom_equal expected, output_buffer
925
+ end
926
+ end
927
+
928
+ def test_text_area_placeholder_with_locales_fallback_and_nested_attributes
929
+ with_locale :placeholder do
930
+ form_for(@post, html: { id: "create-post" }) do |f|
931
+ f.fields_for(:tags) do |cf|
932
+ concat cf.text_area(:value, placeholder: true)
933
+ end
934
+ end
935
+
936
+ expected = whole_form("/posts/123", "create-post", "edit_post", method: "patch") do
937
+ %{<textarea id="post_tags_attributes_0_value" name="post[tags_attributes][0][value]" placeholder="Tag">\nnew tag</textarea>}
938
+ end
939
+
940
+ assert_dom_equal expected, output_buffer
941
+ end
942
+ end
943
+
944
+ def test_text_area
945
+ assert_dom_equal(
946
+ %{<textarea id="post_body" name="post[body]">\nBack to the hill and over it again!</textarea>},
947
+ text_area("post", "body")
948
+ )
949
+ end
950
+
951
+ def test_text_area_with_escapes
952
+ @post.body = "Back to <i>the</i> hill and over it again!"
953
+ assert_dom_equal(
954
+ %{<textarea id="post_body" name="post[body]">\nBack to &lt;i&gt;the&lt;/i&gt; hill and over it again!</textarea>},
955
+ text_area("post", "body")
956
+ )
957
+ end
958
+
959
+ def test_text_area_with_alternate_value
960
+ assert_dom_equal(
961
+ %{<textarea id="post_body" name="post[body]">\nTesting alternate values.</textarea>},
962
+ text_area("post", "body", value: "Testing alternate values.")
963
+ )
964
+ end
965
+
966
+ def test_text_area_with_nil_alternate_value
967
+ assert_dom_equal(
968
+ %{<textarea id="post_body" name="post[body]">\n</textarea>},
969
+ text_area("post", "body", value: nil)
970
+ )
971
+ end
972
+
973
+ def test_inputs_use_before_type_cast_to_retain_information_from_validations_like_numericality
974
+ assert_dom_equal(
975
+ %{<textarea id="post_id" name="post[id]">\nomg</textarea>},
976
+ text_area("post", "id")
977
+ )
978
+ end
979
+
980
+ def test_inputs_dont_use_before_type_cast_when_value_did_not_come_from_user
981
+ class << @post
982
+ undef id_came_from_user?
983
+ def id_came_from_user?; false; end
984
+ end
985
+
986
+ assert_dom_equal(
987
+ %{<textarea id="post_id" name="post[id]">\n0</textarea>},
988
+ text_area("post", "id")
989
+ )
990
+ end
991
+
992
+ def test_inputs_use_before_typecast_when_object_doesnt_respond_to_came_from_user
993
+ class << @post; undef id_came_from_user?; end
994
+ assert_dom_equal(
995
+ %{<textarea id="post_id" name="post[id]">\nomg</textarea>},
996
+ text_area("post", "id")
997
+ )
998
+ end
999
+
1000
+ def test_text_area_with_html_entities
1001
+ @post.body = "The HTML Entity for & is &amp;"
1002
+ assert_dom_equal(
1003
+ %{<textarea id="post_body" name="post[body]">\nThe HTML Entity for &amp; is &amp;amp;</textarea>},
1004
+ text_area("post", "body")
1005
+ )
1006
+ end
1007
+
1008
+ def test_text_area_with_size_option
1009
+ assert_dom_equal(
1010
+ %{<textarea cols="183" id="post_body" name="post[body]" rows="820">\nBack to the hill and over it again!</textarea>},
1011
+ text_area("post", "body", size: "183x820")
1012
+ )
1013
+ end
1014
+
1015
+ def test_color_field_with_valid_hex_color_string
1016
+ expected = %{<input id="car_color" name="car[color]" type="color" value="#000fff" />}
1017
+ assert_dom_equal(expected, color_field("car", "color"))
1018
+ end
1019
+
1020
+ def test_color_field_with_invalid_hex_color_string
1021
+ expected = %{<input id="car_color" name="car[color]" type="color" value="#000000" />}
1022
+ @car.color = "#1234TR"
1023
+ assert_dom_equal(expected, color_field("car", "color"))
1024
+ end
1025
+
1026
+ def test_color_field_with_value_attr
1027
+ expected = %{<input id="car_color" name="car[color]" type="color" value="#00FF00" />}
1028
+ assert_dom_equal(expected, color_field("car", "color", value: "#00FF00"))
1029
+ end
1030
+
1031
+ def test_search_field
1032
+ expected = %{<input id="contact_notes_query" name="contact[notes_query]" type="search" />}
1033
+ assert_dom_equal(expected, search_field("contact", "notes_query"))
1034
+ end
1035
+
1036
+ def test_search_field_with_onsearch_value
1037
+ expected = %{<input onsearch="true" type="search" name="contact[notes_query]" id="contact_notes_query" incremental="true" />}
1038
+ assert_dom_equal(expected, search_field("contact", "notes_query", onsearch: true))
1039
+ end
1040
+
1041
+ def test_telephone_field
1042
+ expected = %{<input id="user_cell" name="user[cell]" type="tel" />}
1043
+ assert_dom_equal(expected, telephone_field("user", "cell"))
1044
+ end
1045
+
1046
+ def test_date_field
1047
+ expected = %{<input id="post_written_on" name="post[written_on]" type="date" value="2004-06-15" />}
1048
+ assert_dom_equal(expected, date_field("post", "written_on"))
1049
+ end
1050
+
1051
+ def test_date_field_with_datetime_value
1052
+ expected = %{<input id="post_written_on" name="post[written_on]" type="date" value="2004-06-15" />}
1053
+ @post.written_on = DateTime.new(2004, 6, 15, 1, 2, 3)
1054
+ assert_dom_equal(expected, date_field("post", "written_on"))
1055
+ end
1056
+
1057
+ def test_date_field_with_extra_attrs
1058
+ expected = %{<input id="post_written_on" step="2" max="2010-08-15" min="2000-06-15" name="post[written_on]" type="date" value="2004-06-15" />}
1059
+ @post.written_on = DateTime.new(2004, 6, 15)
1060
+ min_value = DateTime.new(2000, 6, 15)
1061
+ max_value = DateTime.new(2010, 8, 15)
1062
+ step = 2
1063
+ assert_dom_equal(expected, date_field("post", "written_on", min: min_value, max: max_value, step: step))
1064
+ end
1065
+
1066
+ def test_date_field_with_value_attr
1067
+ expected = %{<input id="post_written_on" name="post[written_on]" type="date" value="2013-06-29" />}
1068
+ value = Date.new(2013, 6, 29)
1069
+ assert_dom_equal(expected, date_field("post", "written_on", value: value))
1070
+ end
1071
+
1072
+ def test_date_field_with_timewithzone_value
1073
+ previous_time_zone, Time.zone = Time.zone, "UTC"
1074
+ expected = %{<input id="post_written_on" name="post[written_on]" type="date" value="2004-06-15" />}
1075
+ @post.written_on = Time.zone.parse("2004-06-15 15:30:45")
1076
+ assert_dom_equal(expected, date_field("post", "written_on"))
1077
+ ensure
1078
+ Time.zone = previous_time_zone
1079
+ end
1080
+
1081
+ def test_date_field_with_nil_value
1082
+ expected = %{<input id="post_written_on" name="post[written_on]" type="date" />}
1083
+ @post.written_on = nil
1084
+ assert_dom_equal(expected, date_field("post", "written_on"))
1085
+ end
1086
+
1087
+ def test_date_field_with_string_values_for_min_and_max
1088
+ expected = %{<input id="post_written_on" max="2010-08-15" min="2000-06-15" name="post[written_on]" type="date" value="2004-06-15" />}
1089
+ @post.written_on = DateTime.new(2004, 6, 15)
1090
+ min_value = "2000-06-15"
1091
+ max_value = "2010-08-15"
1092
+ assert_dom_equal(expected, date_field("post", "written_on", min: min_value, max: max_value))
1093
+ end
1094
+
1095
+ def test_date_field_with_invalid_string_values_for_min_and_max
1096
+ expected = %{<input id="post_written_on" name="post[written_on]" type="date" value="2004-06-15" />}
1097
+ @post.written_on = DateTime.new(2004, 6, 15, 1, 2, 3)
1098
+ min_value = "foo"
1099
+ max_value = "bar"
1100
+ assert_dom_equal(expected, date_field("post", "written_on", min: min_value, max: max_value))
1101
+ end
1102
+
1103
+ def test_time_field
1104
+ expected = %{<input id="post_written_on" name="post[written_on]" type="time" value="00:00:00.000" />}
1105
+ assert_dom_equal(expected, time_field("post", "written_on"))
1106
+ end
1107
+
1108
+ def test_time_field_with_datetime_value
1109
+ expected = %{<input id="post_written_on" name="post[written_on]" type="time" value="01:02:03.000" />}
1110
+ @post.written_on = DateTime.new(2004, 6, 15, 1, 2, 3)
1111
+ assert_dom_equal(expected, time_field("post", "written_on"))
1112
+ end
1113
+
1114
+ def test_time_field_with_extra_attrs
1115
+ expected = %{<input id="post_written_on" step="60" max="10:25:00.000" min="20:45:30.000" name="post[written_on]" type="time" value="01:02:03.000" />}
1116
+ @post.written_on = DateTime.new(2004, 6, 15, 1, 2, 3)
1117
+ min_value = DateTime.new(2000, 6, 15, 20, 45, 30)
1118
+ max_value = DateTime.new(2010, 8, 15, 10, 25, 00)
1119
+ step = 60
1120
+ assert_dom_equal(expected, time_field("post", "written_on", min: min_value, max: max_value, step: step))
1121
+ end
1122
+
1123
+ def test_time_field_with_timewithzone_value
1124
+ previous_time_zone, Time.zone = Time.zone, "UTC"
1125
+ expected = %{<input id="post_written_on" name="post[written_on]" type="time" value="01:02:03.000" />}
1126
+ @post.written_on = Time.zone.parse("2004-06-15 01:02:03")
1127
+ assert_dom_equal(expected, time_field("post", "written_on"))
1128
+ ensure
1129
+ Time.zone = previous_time_zone
1130
+ end
1131
+
1132
+ def test_time_field_with_nil_value
1133
+ expected = %{<input id="post_written_on" name="post[written_on]" type="time" />}
1134
+ @post.written_on = nil
1135
+ assert_dom_equal(expected, time_field("post", "written_on"))
1136
+ end
1137
+
1138
+ def test_time_field_with_string_values_for_min_and_max
1139
+ expected = %{<input id="post_written_on" max="10:25:00.000" min="20:45:30.000" name="post[written_on]" type="time" value="01:02:03.000" />}
1140
+ @post.written_on = DateTime.new(2004, 6, 15, 1, 2, 3)
1141
+ min_value = "20:45:30.000"
1142
+ max_value = "10:25:00.000"
1143
+ assert_dom_equal(expected, time_field("post", "written_on", min: min_value, max: max_value))
1144
+ end
1145
+
1146
+ def test_time_field_with_invalid_string_values_for_min_and_max
1147
+ expected = %{<input id="post_written_on" name="post[written_on]" type="time" value="01:02:03.000" />}
1148
+ @post.written_on = DateTime.new(2004, 6, 15, 1, 2, 3)
1149
+ min_value = "foo"
1150
+ max_value = "bar"
1151
+ assert_dom_equal(expected, time_field("post", "written_on", min: min_value, max: max_value))
1152
+ end
1153
+
1154
+ def test_datetime_field
1155
+ expected = %{<input id="post_written_on" name="post[written_on]" type="datetime-local" value="2004-06-15T00:00:00" />}
1156
+ assert_dom_equal(expected, datetime_field("post", "written_on"))
1157
+ end
1158
+
1159
+ def test_datetime_field_with_datetime_value
1160
+ expected = %{<input id="post_written_on" name="post[written_on]" type="datetime-local" value="2004-06-15T01:02:03" />}
1161
+ @post.written_on = DateTime.new(2004, 6, 15, 1, 2, 3)
1162
+ assert_dom_equal(expected, datetime_field("post", "written_on"))
1163
+ end
1164
+
1165
+ def test_datetime_field_with_extra_attrs
1166
+ expected = %{<input id="post_written_on" step="60" max="2010-08-15T10:25:00" min="2000-06-15T20:45:30" name="post[written_on]" type="datetime-local" value="2004-06-15T01:02:03" />}
1167
+ @post.written_on = DateTime.new(2004, 6, 15, 1, 2, 3)
1168
+ min_value = DateTime.new(2000, 6, 15, 20, 45, 30)
1169
+ max_value = DateTime.new(2010, 8, 15, 10, 25, 00)
1170
+ step = 60
1171
+ assert_dom_equal(expected, datetime_field("post", "written_on", min: min_value, max: max_value, step: step))
1172
+ end
1173
+
1174
+ def test_datetime_field_with_value_attr
1175
+ expected = %{<input id="post_written_on" name="post[written_on]" type="datetime-local" value="2013-06-29T13:37:00+00:00" />}
1176
+ value = DateTime.new(2013, 6, 29, 13, 37)
1177
+ assert_dom_equal(expected, datetime_field("post", "written_on", value: value))
1178
+ end
1179
+
1180
+ def test_datetime_field_with_timewithzone_value
1181
+ previous_time_zone, Time.zone = Time.zone, "UTC"
1182
+ expected = %{<input id="post_written_on" name="post[written_on]" type="datetime-local" value="2004-06-15T15:30:45" />}
1183
+ @post.written_on = Time.zone.parse("2004-06-15 15:30:45")
1184
+ assert_dom_equal(expected, datetime_field("post", "written_on"))
1185
+ ensure
1186
+ Time.zone = previous_time_zone
1187
+ end
1188
+
1189
+ def test_datetime_field_with_nil_value
1190
+ expected = %{<input id="post_written_on" name="post[written_on]" type="datetime-local" />}
1191
+ @post.written_on = nil
1192
+ assert_dom_equal(expected, datetime_field("post", "written_on"))
1193
+ end
1194
+
1195
+ def test_datetime_field_with_string_values_for_min_and_max
1196
+ expected = %{<input id="post_written_on" max="2010-08-15T10:25:00" min="2000-06-15T20:45:30" name="post[written_on]" type="datetime-local" value="2004-06-15T01:02:03" />}
1197
+ @post.written_on = DateTime.new(2004, 6, 15, 1, 2, 3)
1198
+ min_value = "2000-06-15T20:45:30"
1199
+ max_value = "2010-08-15T10:25:00"
1200
+ assert_dom_equal(expected, datetime_field("post", "written_on", min: min_value, max: max_value))
1201
+ end
1202
+
1203
+ def test_datetime_field_with_invalid_string_values_for_min_and_max
1204
+ expected = %{<input id="post_written_on" name="post[written_on]" type="datetime-local" value="2004-06-15T01:02:03" />}
1205
+ @post.written_on = DateTime.new(2004, 6, 15, 1, 2, 3)
1206
+ min_value = "foo"
1207
+ max_value = "bar"
1208
+ assert_dom_equal(expected, datetime_field("post", "written_on", min: min_value, max: max_value))
1209
+ end
1210
+
1211
+ def test_datetime_local_field
1212
+ expected = %{<input id="post_written_on" name="post[written_on]" type="datetime-local" value="2004-06-15T00:00:00" />}
1213
+ assert_dom_equal(expected, datetime_local_field("post", "written_on"))
1214
+ end
1215
+
1216
+ def test_month_field
1217
+ expected = %{<input id="post_written_on" name="post[written_on]" type="month" value="2004-06" />}
1218
+ assert_dom_equal(expected, month_field("post", "written_on"))
1219
+ end
1220
+
1221
+ def test_month_field_with_nil_value
1222
+ expected = %{<input id="post_written_on" name="post[written_on]" type="month" />}
1223
+ @post.written_on = nil
1224
+ assert_dom_equal(expected, month_field("post", "written_on"))
1225
+ end
1226
+
1227
+ def test_month_field_with_datetime_value
1228
+ expected = %{<input id="post_written_on" name="post[written_on]" type="month" value="2004-06" />}
1229
+ @post.written_on = DateTime.new(2004, 6, 15, 1, 2, 3)
1230
+ assert_dom_equal(expected, month_field("post", "written_on"))
1231
+ end
1232
+
1233
+ def test_month_field_with_extra_attrs
1234
+ expected = %{<input id="post_written_on" step="2" max="2010-12" min="2000-02" name="post[written_on]" type="month" value="2004-06" />}
1235
+ @post.written_on = DateTime.new(2004, 6, 15, 1, 2, 3)
1236
+ min_value = DateTime.new(2000, 2, 13)
1237
+ max_value = DateTime.new(2010, 12, 23)
1238
+ step = 2
1239
+ assert_dom_equal(expected, month_field("post", "written_on", min: min_value, max: max_value, step: step))
1240
+ end
1241
+
1242
+ def test_month_field_with_timewithzone_value
1243
+ previous_time_zone, Time.zone = Time.zone, "UTC"
1244
+ expected = %{<input id="post_written_on" name="post[written_on]" type="month" value="2004-06" />}
1245
+ @post.written_on = Time.zone.parse("2004-06-15 15:30:45")
1246
+ assert_dom_equal(expected, month_field("post", "written_on"))
1247
+ ensure
1248
+ Time.zone = previous_time_zone
1249
+ end
1250
+
1251
+ def test_week_field
1252
+ expected = %{<input id="post_written_on" name="post[written_on]" type="week" value="2004-W25" />}
1253
+ assert_dom_equal(expected, week_field("post", "written_on"))
1254
+ end
1255
+
1256
+ def test_week_field_with_nil_value
1257
+ expected = %{<input id="post_written_on" name="post[written_on]" type="week" />}
1258
+ @post.written_on = nil
1259
+ assert_dom_equal(expected, week_field("post", "written_on"))
1260
+ end
1261
+
1262
+ def test_week_field_with_datetime_value
1263
+ expected = %{<input id="post_written_on" name="post[written_on]" type="week" value="2004-W25" />}
1264
+ @post.written_on = DateTime.new(2004, 6, 15, 1, 2, 3)
1265
+ assert_dom_equal(expected, week_field("post", "written_on"))
1266
+ end
1267
+
1268
+ def test_week_field_with_extra_attrs
1269
+ expected = %{<input id="post_written_on" step="2" max="2010-W51" min="2000-W06" name="post[written_on]" type="week" value="2004-W25" />}
1270
+ @post.written_on = DateTime.new(2004, 6, 15, 1, 2, 3)
1271
+ min_value = DateTime.new(2000, 2, 13)
1272
+ max_value = DateTime.new(2010, 12, 23)
1273
+ step = 2
1274
+ assert_dom_equal(expected, week_field("post", "written_on", min: min_value, max: max_value, step: step))
1275
+ end
1276
+
1277
+ def test_week_field_with_timewithzone_value
1278
+ previous_time_zone, Time.zone = Time.zone, "UTC"
1279
+ expected = %{<input id="post_written_on" name="post[written_on]" type="week" value="2004-W25" />}
1280
+ @post.written_on = Time.zone.parse("2004-06-15 15:30:45")
1281
+ assert_dom_equal(expected, week_field("post", "written_on"))
1282
+ ensure
1283
+ Time.zone = previous_time_zone
1284
+ end
1285
+
1286
+ def test_week_field_week_number_base
1287
+ expected = %{<input id="post_written_on" name="post[written_on]" type="week" value="2015-W01" />}
1288
+ @post.written_on = DateTime.new(2015, 1, 1, 1, 2, 3)
1289
+ assert_dom_equal(expected, week_field("post", "written_on"))
1290
+ end
1291
+
1292
+ def test_url_field
1293
+ expected = %{<input id="user_homepage" name="user[homepage]" type="url" />}
1294
+ assert_dom_equal(expected, url_field("user", "homepage"))
1295
+ end
1296
+
1297
+ def test_email_field
1298
+ expected = %{<input id="user_address" name="user[address]" type="email" />}
1299
+ assert_dom_equal(expected, email_field("user", "address"))
1300
+ end
1301
+
1302
+ def test_number_field
1303
+ expected = %{<input name="order[quantity]" max="9" id="order_quantity" type="number" min="1" />}
1304
+ assert_dom_equal(expected, number_field("order", "quantity", in: 1...10))
1305
+ expected = %{<input name="order[quantity]" size="30" max="9" id="order_quantity" type="number" min="1" />}
1306
+ assert_dom_equal(expected, number_field("order", "quantity", size: 30, in: 1...10))
1307
+ end
1308
+
1309
+ def test_range_input
1310
+ expected = %{<input name="hifi[volume]" step="0.1" max="11" id="hifi_volume" type="range" min="0" />}
1311
+ assert_dom_equal(expected, range_field("hifi", "volume", in: 0..11, step: 0.1))
1312
+ expected = %{<input name="hifi[volume]" step="0.1" size="30" max="11" id="hifi_volume" type="range" min="0" />}
1313
+ assert_dom_equal(expected, range_field("hifi", "volume", size: 30, in: 0..11, step: 0.1))
1314
+ end
1315
+
1316
+ def test_explicit_name
1317
+ assert_dom_equal(
1318
+ '<input id="post_title" name="dont guess" type="text" value="Hello World" />',
1319
+ text_field("post", "title", "name" => "dont guess")
1320
+ )
1321
+ assert_dom_equal(
1322
+ %{<textarea id="post_body" name="really!">\nBack to the hill and over it again!</textarea>},
1323
+ text_area("post", "body", "name" => "really!")
1324
+ )
1325
+ assert_dom_equal(
1326
+ '<input name="i mean it" type="hidden" value="0" /><input checked="checked" id="post_secret" name="i mean it" type="checkbox" value="1" />',
1327
+ check_box("post", "secret", "name" => "i mean it")
1328
+ )
1329
+ assert_dom_equal(
1330
+ text_field("post", "title", "name" => "dont guess"),
1331
+ text_field("post", "title", name: "dont guess")
1332
+ )
1333
+ assert_dom_equal(
1334
+ text_area("post", "body", "name" => "really!"),
1335
+ text_area("post", "body", name: "really!")
1336
+ )
1337
+ assert_dom_equal(
1338
+ check_box("post", "secret", "name" => "i mean it"),
1339
+ check_box("post", "secret", name: "i mean it")
1340
+ )
1341
+ end
1342
+
1343
+ def test_explicit_id
1344
+ assert_dom_equal(
1345
+ '<input id="dont guess" name="post[title]" type="text" value="Hello World" />',
1346
+ text_field("post", "title", "id" => "dont guess")
1347
+ )
1348
+ assert_dom_equal(
1349
+ %{<textarea id="really!" name="post[body]">\nBack to the hill and over it again!</textarea>},
1350
+ text_area("post", "body", "id" => "really!")
1351
+ )
1352
+ assert_dom_equal(
1353
+ '<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="i mean it" name="post[secret]" type="checkbox" value="1" />',
1354
+ check_box("post", "secret", "id" => "i mean it")
1355
+ )
1356
+ assert_dom_equal(
1357
+ text_field("post", "title", "id" => "dont guess"),
1358
+ text_field("post", "title", id: "dont guess")
1359
+ )
1360
+ assert_dom_equal(
1361
+ text_area("post", "body", "id" => "really!"),
1362
+ text_area("post", "body", id: "really!")
1363
+ )
1364
+ assert_dom_equal(
1365
+ check_box("post", "secret", "id" => "i mean it"),
1366
+ check_box("post", "secret", id: "i mean it")
1367
+ )
1368
+ end
1369
+
1370
+ def test_nil_id
1371
+ assert_dom_equal(
1372
+ '<input name="post[title]" type="text" value="Hello World" />',
1373
+ text_field("post", "title", "id" => nil)
1374
+ )
1375
+ assert_dom_equal(
1376
+ %{<textarea name="post[body]">\nBack to the hill and over it again!</textarea>},
1377
+ text_area("post", "body", "id" => nil)
1378
+ )
1379
+ assert_dom_equal(
1380
+ '<input name="post[secret]" type="hidden" value="0" /><input checked="checked" name="post[secret]" type="checkbox" value="1" />',
1381
+ check_box("post", "secret", "id" => nil)
1382
+ )
1383
+ assert_dom_equal(
1384
+ '<input type="radio" name="post[secret]" value="0" />',
1385
+ radio_button("post", "secret", "0", "id" => nil)
1386
+ )
1387
+ assert_dom_equal(
1388
+ '<select name="post[secret]"></select>',
1389
+ select("post", "secret", [], {}, { "id" => nil })
1390
+ )
1391
+ assert_dom_equal(
1392
+ text_field("post", "title", "id" => nil),
1393
+ text_field("post", "title", id: nil)
1394
+ )
1395
+ assert_dom_equal(
1396
+ text_area("post", "body", "id" => nil),
1397
+ text_area("post", "body", id: nil)
1398
+ )
1399
+ assert_dom_equal(
1400
+ check_box("post", "secret", "id" => nil),
1401
+ check_box("post", "secret", id: nil)
1402
+ )
1403
+ assert_dom_equal(
1404
+ radio_button("post", "secret", "0", "id" => nil),
1405
+ radio_button("post", "secret", "0", id: nil)
1406
+ )
1407
+ end
1408
+
1409
+ def test_index
1410
+ assert_dom_equal(
1411
+ '<input name="post[5][title]" id="post_5_title" type="text" value="Hello World" />',
1412
+ text_field("post", "title", "index" => 5)
1413
+ )
1414
+ assert_dom_equal(
1415
+ %{<textarea name="post[5][body]" id="post_5_body">\nBack to the hill and over it again!</textarea>},
1416
+ text_area("post", "body", "index" => 5)
1417
+ )
1418
+ assert_dom_equal(
1419
+ '<input name="post[5][secret]" type="hidden" value="0" /><input checked="checked" name="post[5][secret]" type="checkbox" value="1" id="post_5_secret" />',
1420
+ check_box("post", "secret", "index" => 5)
1421
+ )
1422
+ assert_dom_equal(
1423
+ text_field("post", "title", "index" => 5),
1424
+ text_field("post", "title", "index" => 5)
1425
+ )
1426
+ assert_dom_equal(
1427
+ text_area("post", "body", "index" => 5),
1428
+ text_area("post", "body", "index" => 5)
1429
+ )
1430
+ assert_dom_equal(
1431
+ check_box("post", "secret", "index" => 5),
1432
+ check_box("post", "secret", "index" => 5)
1433
+ )
1434
+ end
1435
+
1436
+ def test_index_with_nil_id
1437
+ assert_dom_equal(
1438
+ '<input name="post[5][title]" type="text" value="Hello World" />',
1439
+ text_field("post", "title", "index" => 5, "id" => nil)
1440
+ )
1441
+ assert_dom_equal(
1442
+ %{<textarea name="post[5][body]">\nBack to the hill and over it again!</textarea>},
1443
+ text_area("post", "body", "index" => 5, "id" => nil)
1444
+ )
1445
+ assert_dom_equal(
1446
+ '<input name="post[5][secret]" type="hidden" value="0" /><input checked="checked" name="post[5][secret]" type="checkbox" value="1" />',
1447
+ check_box("post", "secret", "index" => 5, "id" => nil)
1448
+ )
1449
+ assert_dom_equal(
1450
+ text_field("post", "title", "index" => 5, "id" => nil),
1451
+ text_field("post", "title", index: 5, id: nil)
1452
+ )
1453
+ assert_dom_equal(
1454
+ text_area("post", "body", "index" => 5, "id" => nil),
1455
+ text_area("post", "body", index: 5, id: nil)
1456
+ )
1457
+ assert_dom_equal(
1458
+ check_box("post", "secret", "index" => 5, "id" => nil),
1459
+ check_box("post", "secret", index: 5, id: nil)
1460
+ )
1461
+ end
1462
+
1463
+ def test_auto_index
1464
+ pid = 123
1465
+ assert_dom_equal(
1466
+ %{<label for="post_#{pid}_title">Title</label>},
1467
+ label("post[]", "title")
1468
+ )
1469
+ assert_dom_equal(
1470
+ %{<input id="post_#{pid}_title" name="post[#{pid}][title]" type="text" value="Hello World" />},
1471
+ text_field("post[]", "title")
1472
+ )
1473
+ assert_dom_equal(
1474
+ %{<textarea id="post_#{pid}_body" name="post[#{pid}][body]">\nBack to the hill and over it again!</textarea>},
1475
+ text_area("post[]", "body")
1476
+ )
1477
+ assert_dom_equal(
1478
+ %{<input name="post[#{pid}][secret]" type="hidden" value="0" /><input checked="checked" id="post_#{pid}_secret" name="post[#{pid}][secret]" type="checkbox" value="1" />},
1479
+ check_box("post[]", "secret")
1480
+ )
1481
+ assert_dom_equal(
1482
+ %{<input checked="checked" id="post_#{pid}_title_hello_world" name="post[#{pid}][title]" type="radio" value="Hello World" />},
1483
+ radio_button("post[]", "title", "Hello World")
1484
+ )
1485
+ assert_dom_equal(
1486
+ %{<input id="post_#{pid}_title_goodbye_world" name="post[#{pid}][title]" type="radio" value="Goodbye World" />},
1487
+ radio_button("post[]", "title", "Goodbye World")
1488
+ )
1489
+ end
1490
+
1491
+ def test_auto_index_with_nil_id
1492
+ pid = 123
1493
+ assert_dom_equal(
1494
+ %{<input name="post[#{pid}][title]" type="text" value="Hello World" />},
1495
+ text_field("post[]", "title", id: nil)
1496
+ )
1497
+ assert_dom_equal(
1498
+ %{<textarea name="post[#{pid}][body]">\nBack to the hill and over it again!</textarea>},
1499
+ text_area("post[]", "body", id: nil)
1500
+ )
1501
+ assert_dom_equal(
1502
+ %{<input name="post[#{pid}][secret]" type="hidden" value="0" /><input checked="checked" name="post[#{pid}][secret]" type="checkbox" value="1" />},
1503
+ check_box("post[]", "secret", id: nil)
1504
+ )
1505
+ assert_dom_equal(
1506
+ %{<input checked="checked" name="post[#{pid}][title]" type="radio" value="Hello World" />},
1507
+ radio_button("post[]", "title", "Hello World", id: nil)
1508
+ )
1509
+ assert_dom_equal(
1510
+ %{<input name="post[#{pid}][title]" type="radio" value="Goodbye World" />},
1511
+ radio_button("post[]", "title", "Goodbye World", id: nil)
1512
+ )
1513
+ end
1514
+
1515
+ def test_form_for_requires_block
1516
+ error = assert_raises(ArgumentError) do
1517
+ form_for(@post, html: { id: "create-post" })
1518
+ end
1519
+ assert_equal "Missing block", error.message
1520
+ end
1521
+
1522
+ def test_form_for_requires_arguments
1523
+ error = assert_raises(ArgumentError) do
1524
+ form_for(nil, html: { id: "create-post" }) do
1525
+ end
1526
+ end
1527
+ assert_equal "First argument in form cannot contain nil or be empty", error.message
1528
+
1529
+ error = assert_raises(ArgumentError) do
1530
+ form_for([nil, nil], html: { id: "create-post" }) do
1531
+ end
1532
+ end
1533
+ assert_equal "First argument in form cannot contain nil or be empty", error.message
1534
+ end
1535
+
1536
+ def test_form_for
1537
+ form_for(@post, html: { id: "create-post" }) do |f|
1538
+ concat f.label(:title) { "The Title" }
1539
+ concat f.text_field(:title)
1540
+ concat f.text_area(:body)
1541
+ concat f.check_box(:secret)
1542
+ concat f.submit("Create post")
1543
+ concat f.button("Create post")
1544
+ concat f.button {
1545
+ concat content_tag(:span, "Create post")
1546
+ }
1547
+ end
1548
+
1549
+ expected = whole_form("/posts/123", "create-post", "edit_post", method: "patch") do
1550
+ "<label for='post_title'>The Title</label>" \
1551
+ "<input name='post[title]' type='text' id='post_title' value='Hello World' />" \
1552
+ "<textarea name='post[body]' id='post_body'>\nBack to the hill and over it again!</textarea>" \
1553
+ "<input name='post[secret]' type='hidden' value='0' />" \
1554
+ "<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" \
1555
+ "<input name='commit' data-disable-with='Create post' type='submit' value='Create post' />" \
1556
+ "<button name='button' type='submit'>Create post</button>" \
1557
+ "<button name='button' type='submit'><span>Create post</span></button>"
1558
+ end
1559
+
1560
+ assert_dom_equal expected, output_buffer
1561
+ end
1562
+
1563
+ def test_form_for_with_collection_radio_buttons
1564
+ post = Post.new
1565
+ def post.active; false; end
1566
+ form_for(post) do |f|
1567
+ concat f.collection_radio_buttons(:active, [true, false], :to_s, :to_s)
1568
+ end
1569
+
1570
+ expected = whole_form("/posts", "new_post", "new_post") do
1571
+ "<input type='hidden' name='post[active]' value='' />" \
1572
+ "<input id='post_active_true' name='post[active]' type='radio' value='true' />" \
1573
+ "<label for='post_active_true'>true</label>" \
1574
+ "<input checked='checked' id='post_active_false' name='post[active]' type='radio' value='false' />" \
1575
+ "<label for='post_active_false'>false</label>"
1576
+ end
1577
+
1578
+ assert_dom_equal expected, output_buffer
1579
+ end
1580
+
1581
+ def test_form_for_with_collection_radio_buttons_with_custom_builder_block
1582
+ post = Post.new
1583
+ def post.active; false; end
1584
+
1585
+ form_for(post) do |f|
1586
+ rendered_radio_buttons = f.collection_radio_buttons(:active, [true, false], :to_s, :to_s) do |b|
1587
+ b.label { b.radio_button + b.text }
1588
+ end
1589
+ concat rendered_radio_buttons
1590
+ end
1591
+
1592
+ expected = whole_form("/posts", "new_post", "new_post") do
1593
+ "<input type='hidden' name='post[active]' value='' />" \
1594
+ "<label for='post_active_true'>" \
1595
+ "<input id='post_active_true' name='post[active]' type='radio' value='true' />" \
1596
+ "true</label>" \
1597
+ "<label for='post_active_false'>" \
1598
+ "<input checked='checked' id='post_active_false' name='post[active]' type='radio' value='false' />" \
1599
+ "false</label>"
1600
+ end
1601
+
1602
+ assert_dom_equal expected, output_buffer
1603
+ end
1604
+
1605
+ def test_form_for_with_collection_radio_buttons_with_custom_builder_block_does_not_leak_the_template
1606
+ post = Post.new
1607
+ def post.active; false; end
1608
+ def post.id; 1; end
1609
+
1610
+ form_for(post) do |f|
1611
+ rendered_radio_buttons = f.collection_radio_buttons(:active, [true, false], :to_s, :to_s) do |b|
1612
+ b.label { b.radio_button + b.text }
1613
+ end
1614
+ concat rendered_radio_buttons
1615
+ concat f.hidden_field :id
1616
+ end
1617
+
1618
+ expected = whole_form("/posts", "new_post_1", "new_post") do
1619
+ "<input type='hidden' name='post[active]' value='' />" \
1620
+ "<label for='post_active_true'>" \
1621
+ "<input id='post_active_true' name='post[active]' type='radio' value='true' />" \
1622
+ "true</label>" \
1623
+ "<label for='post_active_false'>" \
1624
+ "<input checked='checked' id='post_active_false' name='post[active]' type='radio' value='false' />" \
1625
+ "false</label>" \
1626
+ "<input id='post_id' name='post[id]' type='hidden' value='1' />"
1627
+ end
1628
+
1629
+ assert_dom_equal expected, output_buffer
1630
+ end
1631
+
1632
+ def test_form_with_namespace_and_with_collection_radio_buttons
1633
+ post = Post.new
1634
+ def post.active; false; end
1635
+
1636
+ form_for(post, namespace: "foo") do |f|
1637
+ concat f.collection_radio_buttons(:active, [true, false], :to_s, :to_s)
1638
+ end
1639
+
1640
+ expected = whole_form("/posts", "foo_new_post", "new_post") do
1641
+ "<input type='hidden' name='post[active]' value='' />" \
1642
+ "<input id='foo_post_active_true' name='post[active]' type='radio' value='true' />" \
1643
+ "<label for='foo_post_active_true'>true</label>" \
1644
+ "<input checked='checked' id='foo_post_active_false' name='post[active]' type='radio' value='false' />" \
1645
+ "<label for='foo_post_active_false'>false</label>"
1646
+ end
1647
+
1648
+ assert_dom_equal expected, output_buffer
1649
+ end
1650
+
1651
+ def test_form_with_index_and_with_collection_radio_buttons
1652
+ post = Post.new
1653
+ def post.active; false; end
1654
+
1655
+ form_for(post, index: "1") do |f|
1656
+ concat f.collection_radio_buttons(:active, [true, false], :to_s, :to_s)
1657
+ end
1658
+
1659
+ expected = whole_form("/posts", "new_post", "new_post") do
1660
+ "<input type='hidden' name='post[1][active]' value='' />" \
1661
+ "<input id='post_1_active_true' name='post[1][active]' type='radio' value='true' />" \
1662
+ "<label for='post_1_active_true'>true</label>" \
1663
+ "<input checked='checked' id='post_1_active_false' name='post[1][active]' type='radio' value='false' />" \
1664
+ "<label for='post_1_active_false'>false</label>"
1665
+ end
1666
+
1667
+ assert_dom_equal expected, output_buffer
1668
+ end
1669
+
1670
+ def test_form_for_with_collection_check_boxes
1671
+ post = Post.new
1672
+ def post.tag_ids; [1, 3]; end
1673
+ collection = (1..3).map { |i| [i, "Tag #{i}"] }
1674
+ form_for(post) do |f|
1675
+ concat f.collection_check_boxes(:tag_ids, collection, :first, :last)
1676
+ end
1677
+
1678
+ expected = whole_form("/posts", "new_post", "new_post") do
1679
+ "<input name='post[tag_ids][]' type='hidden' value='' />" \
1680
+ "<input checked='checked' id='post_tag_ids_1' name='post[tag_ids][]' type='checkbox' value='1' />" \
1681
+ "<label for='post_tag_ids_1'>Tag 1</label>" \
1682
+ "<input id='post_tag_ids_2' name='post[tag_ids][]' type='checkbox' value='2' />" \
1683
+ "<label for='post_tag_ids_2'>Tag 2</label>" \
1684
+ "<input checked='checked' id='post_tag_ids_3' name='post[tag_ids][]' type='checkbox' value='3' />" \
1685
+ "<label for='post_tag_ids_3'>Tag 3</label>"
1686
+ end
1687
+
1688
+ assert_dom_equal expected, output_buffer
1689
+ end
1690
+
1691
+ def test_form_for_with_collection_check_boxes_with_custom_builder_block
1692
+ post = Post.new
1693
+ def post.tag_ids; [1, 3]; end
1694
+ collection = (1..3).map { |i| [i, "Tag #{i}"] }
1695
+ form_for(post) do |f|
1696
+ rendered_check_boxes = f.collection_check_boxes(:tag_ids, collection, :first, :last) do |b|
1697
+ b.label { b.check_box + b.text }
1698
+ end
1699
+ concat rendered_check_boxes
1700
+ end
1701
+
1702
+ expected = whole_form("/posts", "new_post", "new_post") do
1703
+ "<input name='post[tag_ids][]' type='hidden' value='' />" \
1704
+ "<label for='post_tag_ids_1'>" \
1705
+ "<input checked='checked' id='post_tag_ids_1' name='post[tag_ids][]' type='checkbox' value='1' />" \
1706
+ "Tag 1</label>" \
1707
+ "<label for='post_tag_ids_2'>" \
1708
+ "<input id='post_tag_ids_2' name='post[tag_ids][]' type='checkbox' value='2' />" \
1709
+ "Tag 2</label>" \
1710
+ "<label for='post_tag_ids_3'>" \
1711
+ "<input checked='checked' id='post_tag_ids_3' name='post[tag_ids][]' type='checkbox' value='3' />" \
1712
+ "Tag 3</label>"
1713
+ end
1714
+
1715
+ assert_dom_equal expected, output_buffer
1716
+ end
1717
+
1718
+ def test_form_for_with_collection_check_boxes_with_custom_builder_block_does_not_leak_the_template
1719
+ post = Post.new
1720
+ def post.tag_ids; [1, 3]; end
1721
+ def post.id; 1; end
1722
+ collection = (1..3).map { |i| [i, "Tag #{i}"] }
1723
+
1724
+ form_for(post) do |f|
1725
+ rendered_check_boxes = f.collection_check_boxes(:tag_ids, collection, :first, :last) do |b|
1726
+ b.label { b.check_box + b.text }
1727
+ end
1728
+ concat rendered_check_boxes
1729
+ concat f.hidden_field :id
1730
+ end
1731
+
1732
+ expected = whole_form("/posts", "new_post_1", "new_post") do
1733
+ "<input name='post[tag_ids][]' type='hidden' value='' />" \
1734
+ "<label for='post_tag_ids_1'>" \
1735
+ "<input checked='checked' id='post_tag_ids_1' name='post[tag_ids][]' type='checkbox' value='1' />" \
1736
+ "Tag 1</label>" \
1737
+ "<label for='post_tag_ids_2'>" \
1738
+ "<input id='post_tag_ids_2' name='post[tag_ids][]' type='checkbox' value='2' />" \
1739
+ "Tag 2</label>" \
1740
+ "<label for='post_tag_ids_3'>" \
1741
+ "<input checked='checked' id='post_tag_ids_3' name='post[tag_ids][]' type='checkbox' value='3' />" \
1742
+ "Tag 3</label>" \
1743
+ "<input id='post_id' name='post[id]' type='hidden' value='1' />"
1744
+ end
1745
+
1746
+ assert_dom_equal expected, output_buffer
1747
+ end
1748
+
1749
+ def test_form_with_namespace_and_with_collection_check_boxes
1750
+ post = Post.new
1751
+ def post.tag_ids; [1]; end
1752
+ collection = [[1, "Tag 1"]]
1753
+
1754
+ form_for(post, namespace: "foo") do |f|
1755
+ concat f.collection_check_boxes(:tag_ids, collection, :first, :last)
1756
+ end
1757
+
1758
+ expected = whole_form("/posts", "foo_new_post", "new_post") do
1759
+ "<input name='post[tag_ids][]' type='hidden' value='' />" \
1760
+ "<input checked='checked' id='foo_post_tag_ids_1' name='post[tag_ids][]' type='checkbox' value='1' />" \
1761
+ "<label for='foo_post_tag_ids_1'>Tag 1</label>"
1762
+ end
1763
+
1764
+ assert_dom_equal expected, output_buffer
1765
+ end
1766
+
1767
+ def test_form_with_index_and_with_collection_check_boxes
1768
+ post = Post.new
1769
+ def post.tag_ids; [1]; end
1770
+ collection = [[1, "Tag 1"]]
1771
+
1772
+ form_for(post, index: "1") do |f|
1773
+ concat f.collection_check_boxes(:tag_ids, collection, :first, :last)
1774
+ end
1775
+
1776
+ expected = whole_form("/posts", "new_post", "new_post") do
1777
+ "<input name='post[1][tag_ids][]' type='hidden' value='' />" \
1778
+ "<input checked='checked' id='post_1_tag_ids_1' name='post[1][tag_ids][]' type='checkbox' value='1' />" \
1779
+ "<label for='post_1_tag_ids_1'>Tag 1</label>"
1780
+ end
1781
+
1782
+ assert_dom_equal expected, output_buffer
1783
+ end
1784
+
1785
+ def test_form_for_with_file_field_generate_multipart
1786
+ form_for(@post, html: { id: "create-post" }) do |f|
1787
+ concat f.file_field(:file)
1788
+ end
1789
+
1790
+ expected = whole_form("/posts/123", "create-post", "edit_post", method: "patch", multipart: true) do
1791
+ "<input name='post[file]' type='file' id='post_file' />"
1792
+ end
1793
+
1794
+ assert_dom_equal expected, output_buffer
1795
+ end
1796
+
1797
+ def test_fields_for_with_file_field_generate_multipart
1798
+ form_for(@post) do |f|
1799
+ concat f.fields_for(:comment, @post) { |c|
1800
+ concat c.file_field(:file)
1801
+ }
1802
+ end
1803
+
1804
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch", multipart: true) do
1805
+ "<input name='post[comment][file]' type='file' id='post_comment_file' />"
1806
+ end
1807
+
1808
+ assert_dom_equal expected, output_buffer
1809
+ end
1810
+
1811
+ def test_form_for_with_format
1812
+ form_for(@post, format: :json, html: { id: "edit_post_123", class: "edit_post" }) do |f|
1813
+ concat f.label(:title)
1814
+ end
1815
+
1816
+ expected = whole_form("/posts/123.json", "edit_post_123", "edit_post", method: "patch") do
1817
+ "<label for='post_title'>Title</label>"
1818
+ end
1819
+
1820
+ assert_dom_equal expected, output_buffer
1821
+ end
1822
+
1823
+ def test_form_for_with_model_using_relative_model_naming
1824
+ blog_post = Blog::Post.new("And his name will be forty and four.", 44)
1825
+
1826
+ form_for(blog_post) do |f|
1827
+ concat f.text_field :title
1828
+ concat f.submit("Edit post")
1829
+ end
1830
+
1831
+ expected = whole_form("/posts/44", "edit_post_44", "edit_post", method: "patch") do
1832
+ "<input name='post[title]' type='text' id='post_title' value='And his name will be forty and four.' />" \
1833
+ "<input name='commit' data-disable-with='Edit post' type='submit' value='Edit post' />"
1834
+ end
1835
+
1836
+ assert_dom_equal expected, output_buffer
1837
+ end
1838
+
1839
+ def test_form_for_with_symbol_as
1840
+ form_for(@post, as: "other_name", html: { id: "create-post" }) do |f|
1841
+ concat f.label(:title, class: "post_title")
1842
+ concat f.text_field(:title)
1843
+ concat f.text_area(:body)
1844
+ concat f.check_box(:secret)
1845
+ concat f.submit("Create post")
1846
+ end
1847
+
1848
+ expected = whole_form("/posts/123", "create-post", "edit_other_name", method: "patch") do
1849
+ "<label for='other_name_title' class='post_title'>Title</label>" \
1850
+ "<input name='other_name[title]' id='other_name_title' value='Hello World' type='text' />" \
1851
+ "<textarea name='other_name[body]' id='other_name_body'>\nBack to the hill and over it again!</textarea>" \
1852
+ "<input name='other_name[secret]' value='0' type='hidden' />" \
1853
+ "<input name='other_name[secret]' checked='checked' id='other_name_secret' value='1' type='checkbox' />" \
1854
+ "<input name='commit' value='Create post' data-disable-with='Create post' type='submit' />"
1855
+ end
1856
+
1857
+ assert_dom_equal expected, output_buffer
1858
+ end
1859
+
1860
+ def test_form_tags_do_not_call_private_properties_on_form_object
1861
+ obj = Class.new do
1862
+ private
1863
+
1864
+ def private_property
1865
+ raise "This method should not be called."
1866
+ end
1867
+ end.new
1868
+
1869
+ form_for(obj, as: "other_name", url: "/", html: { id: "edit-other-name" }) do |f|
1870
+ assert_raise(NoMethodError) { f.hidden_field(:private_property) }
1871
+ end
1872
+ end
1873
+
1874
+ def test_form_for_with_method_as_part_of_html_options
1875
+ form_for(@post, url: "/", html: { id: "create-post", method: :delete }) do |f|
1876
+ concat f.text_field(:title)
1877
+ concat f.text_area(:body)
1878
+ concat f.check_box(:secret)
1879
+ end
1880
+
1881
+ expected = whole_form("/", "create-post", "edit_post", method: "delete") do
1882
+ "<input name='post[title]' type='text' id='post_title' value='Hello World' />" \
1883
+ "<textarea name='post[body]' id='post_body'>\nBack to the hill and over it again!</textarea>" \
1884
+ "<input name='post[secret]' type='hidden' value='0' />" \
1885
+ "<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />"
1886
+ end
1887
+
1888
+ assert_dom_equal expected, output_buffer
1889
+ end
1890
+
1891
+ def test_form_for_with_method
1892
+ form_for(@post, url: "/", method: :delete, html: { id: "create-post" }) do |f|
1893
+ concat f.text_field(:title)
1894
+ concat f.text_area(:body)
1895
+ concat f.check_box(:secret)
1896
+ end
1897
+
1898
+ expected = whole_form("/", "create-post", "edit_post", method: "delete") do
1899
+ "<input name='post[title]' type='text' id='post_title' value='Hello World' />" \
1900
+ "<textarea name='post[body]' id='post_body'>\nBack to the hill and over it again!</textarea>" \
1901
+ "<input name='post[secret]' type='hidden' value='0' />" \
1902
+ "<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />"
1903
+ end
1904
+
1905
+ assert_dom_equal expected, output_buffer
1906
+ end
1907
+
1908
+ def test_form_for_with_search_field
1909
+ # Test case for bug which would emit an "object" attribute
1910
+ # when used with form_for using a search_field form helper
1911
+ form_for(Post.new, url: "/search", html: { id: "search-post", method: :get }) do |f|
1912
+ concat f.search_field(:title)
1913
+ end
1914
+
1915
+ expected = whole_form("/search", "search-post", "new_post", method: "get") do
1916
+ "<input name='post[title]' type='search' id='post_title' />"
1917
+ end
1918
+
1919
+ assert_dom_equal expected, output_buffer
1920
+ end
1921
+
1922
+ def test_form_for_with_remote
1923
+ form_for(@post, url: "/", remote: true, html: { id: "create-post", method: :patch }) do |f|
1924
+ concat f.text_field(:title)
1925
+ concat f.text_area(:body)
1926
+ concat f.check_box(:secret)
1927
+ end
1928
+
1929
+ expected = whole_form("/", "create-post", "edit_post", method: "patch", remote: true) do
1930
+ "<input name='post[title]' type='text' id='post_title' value='Hello World' />" \
1931
+ "<textarea name='post[body]' id='post_body'>\nBack to the hill and over it again!</textarea>" \
1932
+ "<input name='post[secret]' type='hidden' value='0' />" \
1933
+ "<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />"
1934
+ end
1935
+
1936
+ assert_dom_equal expected, output_buffer
1937
+ end
1938
+
1939
+ def test_form_for_enforce_utf8_true
1940
+ form_for(:post, enforce_utf8: true) do |f|
1941
+ concat f.text_field(:title)
1942
+ end
1943
+
1944
+ expected = whole_form("/", nil, nil, enforce_utf8: true) do
1945
+ "<input name='post[title]' type='text' id='post_title' value='Hello World' />"
1946
+ end
1947
+
1948
+ assert_dom_equal expected, output_buffer
1949
+ end
1950
+
1951
+ def test_form_for_enforce_utf8_false
1952
+ form_for(:post, enforce_utf8: false) do |f|
1953
+ concat f.text_field(:title)
1954
+ end
1955
+
1956
+ expected = whole_form("/", nil, nil, enforce_utf8: false) do
1957
+ "<input name='post[title]' type='text' id='post_title' value='Hello World' />"
1958
+ end
1959
+
1960
+ assert_dom_equal expected, output_buffer
1961
+ end
1962
+
1963
+ def test_form_for_with_remote_in_html
1964
+ form_for(@post, url: "/", html: { remote: true, id: "create-post", method: :patch }) do |f|
1965
+ concat f.text_field(:title)
1966
+ concat f.text_area(:body)
1967
+ concat f.check_box(:secret)
1968
+ end
1969
+
1970
+ expected = whole_form("/", "create-post", "edit_post", method: "patch", remote: true) do
1971
+ "<input name='post[title]' type='text' id='post_title' value='Hello World' />" \
1972
+ "<textarea name='post[body]' id='post_body'>\nBack to the hill and over it again!</textarea>" \
1973
+ "<input name='post[secret]' type='hidden' value='0' />" \
1974
+ "<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />"
1975
+ end
1976
+
1977
+ assert_dom_equal expected, output_buffer
1978
+ end
1979
+
1980
+ def test_form_for_with_remote_without_html
1981
+ @post.persisted = false
1982
+ @post.stub(:to_key, nil) do
1983
+ form_for(@post, remote: true) do |f|
1984
+ concat f.text_field(:title)
1985
+ concat f.text_area(:body)
1986
+ concat f.check_box(:secret)
1987
+ end
1988
+
1989
+ expected = whole_form("/posts", "new_post", "new_post", remote: true) do
1990
+ "<input name='post[title]' type='text' id='post_title' value='Hello World' />" \
1991
+ "<textarea name='post[body]' id='post_body'>\nBack to the hill and over it again!</textarea>" \
1992
+ "<input name='post[secret]' type='hidden' value='0' />" \
1993
+ "<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />"
1994
+ end
1995
+
1996
+ assert_dom_equal expected, output_buffer
1997
+ end
1998
+ end
1999
+
2000
+ def test_form_for_without_object
2001
+ form_for(:post, html: { id: "create-post" }) do |f|
2002
+ concat f.text_field(:title)
2003
+ concat f.text_area(:body)
2004
+ concat f.check_box(:secret)
2005
+ end
2006
+
2007
+ expected = whole_form("/", "create-post") do
2008
+ "<input name='post[title]' type='text' id='post_title' value='Hello World' />" \
2009
+ "<textarea name='post[body]' id='post_body'>\nBack to the hill and over it again!</textarea>" \
2010
+ "<input name='post[secret]' type='hidden' value='0' />" \
2011
+ "<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />"
2012
+ end
2013
+
2014
+ assert_dom_equal expected, output_buffer
2015
+ end
2016
+
2017
+ def test_form_for_with_index
2018
+ form_for(@post, as: "post[]") do |f|
2019
+ concat f.label(:title)
2020
+ concat f.text_field(:title)
2021
+ concat f.text_area(:body)
2022
+ concat f.check_box(:secret)
2023
+ end
2024
+
2025
+ expected = whole_form("/posts/123", "edit_post[]", "edit_post[]", method: "patch") do
2026
+ "<label for='post_123_title'>Title</label>" \
2027
+ "<input name='post[123][title]' type='text' id='post_123_title' value='Hello World' />" \
2028
+ "<textarea name='post[123][body]' id='post_123_body'>\nBack to the hill and over it again!</textarea>" \
2029
+ "<input name='post[123][secret]' type='hidden' value='0' />" \
2030
+ "<input name='post[123][secret]' checked='checked' type='checkbox' id='post_123_secret' value='1' />"
2031
+ end
2032
+
2033
+ assert_dom_equal expected, output_buffer
2034
+ end
2035
+
2036
+ def test_form_for_with_nil_index_option_override
2037
+ form_for(@post, as: "post[]", index: nil) do |f|
2038
+ concat f.text_field(:title)
2039
+ concat f.text_area(:body)
2040
+ concat f.check_box(:secret)
2041
+ end
2042
+
2043
+ expected = whole_form("/posts/123", "edit_post[]", "edit_post[]", method: "patch") do
2044
+ "<input name='post[][title]' type='text' id='post__title' value='Hello World' />" \
2045
+ "<textarea name='post[][body]' id='post__body'>\nBack to the hill and over it again!</textarea>" \
2046
+ "<input name='post[][secret]' type='hidden' value='0' />" \
2047
+ "<input name='post[][secret]' checked='checked' type='checkbox' id='post__secret' value='1' />"
2048
+ end
2049
+
2050
+ assert_dom_equal expected, output_buffer
2051
+ end
2052
+
2053
+ def test_form_for_label_error_wrapping
2054
+ form_for(@post) do |f|
2055
+ concat f.label(:author_name, class: "label")
2056
+ concat f.text_field(:author_name)
2057
+ concat f.submit("Create post")
2058
+ end
2059
+
2060
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2061
+ "<div class='field_with_errors'><label for='post_author_name' class='label'>Author name</label></div>" \
2062
+ "<div class='field_with_errors'><input name='post[author_name]' type='text' id='post_author_name' value='' /></div>" \
2063
+ "<input name='commit' data-disable-with='Create post' type='submit' value='Create post' />"
2064
+ end
2065
+
2066
+ assert_dom_equal expected, output_buffer
2067
+ end
2068
+
2069
+ def test_form_for_label_error_wrapping_without_conventional_instance_variable
2070
+ post = remove_instance_variable :@post
2071
+
2072
+ form_for(post) do |f|
2073
+ concat f.label(:author_name, class: "label")
2074
+ concat f.text_field(:author_name)
2075
+ concat f.submit("Create post")
2076
+ end
2077
+
2078
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2079
+ "<div class='field_with_errors'><label for='post_author_name' class='label'>Author name</label></div>" \
2080
+ "<div class='field_with_errors'><input name='post[author_name]' type='text' id='post_author_name' value='' /></div>" \
2081
+ "<input name='commit' data-disable-with='Create post' type='submit' value='Create post' />"
2082
+ end
2083
+
2084
+ assert_dom_equal expected, output_buffer
2085
+ end
2086
+
2087
+ def test_form_for_label_error_wrapping_block_and_non_block_versions
2088
+ form_for(@post) do |f|
2089
+ concat f.label(:author_name, "Name", class: "label")
2090
+ concat f.label(:author_name, class: "label") { "Name" }
2091
+ end
2092
+
2093
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2094
+ "<div class='field_with_errors'><label for='post_author_name' class='label'>Name</label></div>" \
2095
+ "<div class='field_with_errors'><label for='post_author_name' class='label'>Name</label></div>"
2096
+ end
2097
+
2098
+ assert_dom_equal expected, output_buffer
2099
+ end
2100
+
2101
+ def test_form_for_with_namespace
2102
+ form_for(@post, namespace: "namespace") do |f|
2103
+ concat f.text_field(:title)
2104
+ concat f.text_area(:body)
2105
+ concat f.check_box(:secret)
2106
+ end
2107
+
2108
+ expected = whole_form("/posts/123", "namespace_edit_post_123", "edit_post", method: "patch") do
2109
+ "<input name='post[title]' type='text' id='namespace_post_title' value='Hello World' />" \
2110
+ "<textarea name='post[body]' id='namespace_post_body'>\nBack to the hill and over it again!</textarea>" \
2111
+ "<input name='post[secret]' type='hidden' value='0' />" \
2112
+ "<input name='post[secret]' checked='checked' type='checkbox' id='namespace_post_secret' value='1' />"
2113
+ end
2114
+
2115
+ assert_dom_equal expected, output_buffer
2116
+ end
2117
+
2118
+ def test_form_for_with_namespace_with_date_select
2119
+ form_for(@post, namespace: "namespace") do |f|
2120
+ concat f.date_select(:written_on)
2121
+ end
2122
+
2123
+ assert_select "select#namespace_post_written_on_1i"
2124
+ end
2125
+
2126
+ def test_form_for_with_namespace_with_label
2127
+ form_for(@post, namespace: "namespace") do |f|
2128
+ concat f.label(:title)
2129
+ concat f.text_field(:title)
2130
+ end
2131
+
2132
+ expected = whole_form("/posts/123", "namespace_edit_post_123", "edit_post", method: "patch") do
2133
+ "<label for='namespace_post_title'>Title</label>" \
2134
+ "<input name='post[title]' type='text' id='namespace_post_title' value='Hello World' />"
2135
+ end
2136
+
2137
+ assert_dom_equal expected, output_buffer
2138
+ end
2139
+
2140
+ def test_form_for_with_namespace_and_as_option
2141
+ form_for(@post, namespace: "namespace", as: "custom_name") do |f|
2142
+ concat f.text_field(:title)
2143
+ end
2144
+
2145
+ expected = whole_form("/posts/123", "namespace_edit_custom_name", "edit_custom_name", method: "patch") do
2146
+ "<input id='namespace_custom_name_title' name='custom_name[title]' type='text' value='Hello World' />"
2147
+ end
2148
+
2149
+ assert_dom_equal expected, output_buffer
2150
+ end
2151
+
2152
+ def test_two_form_for_with_namespace
2153
+ form_for(@post, namespace: "namespace_1") do |f|
2154
+ concat f.label(:title)
2155
+ concat f.text_field(:title)
2156
+ end
2157
+
2158
+ expected_1 = whole_form("/posts/123", "namespace_1_edit_post_123", "edit_post", method: "patch") do
2159
+ "<label for='namespace_1_post_title'>Title</label>" \
2160
+ "<input name='post[title]' type='text' id='namespace_1_post_title' value='Hello World' />"
2161
+ end
2162
+
2163
+ assert_dom_equal expected_1, output_buffer
2164
+
2165
+ form_for(@post, namespace: "namespace_2") do |f|
2166
+ concat f.label(:title)
2167
+ concat f.text_field(:title)
2168
+ end
2169
+
2170
+ expected_2 = whole_form("/posts/123", "namespace_2_edit_post_123", "edit_post", method: "patch") do
2171
+ "<label for='namespace_2_post_title'>Title</label>" \
2172
+ "<input name='post[title]' type='text' id='namespace_2_post_title' value='Hello World' />"
2173
+ end
2174
+
2175
+ assert_dom_equal expected_2, output_buffer
2176
+ end
2177
+
2178
+ def test_fields_for_with_namespace
2179
+ @comment.body = "Hello World"
2180
+ form_for(@post, namespace: "namespace") do |f|
2181
+ concat f.text_field(:title)
2182
+ concat f.text_area(:body)
2183
+ concat f.fields_for(@comment) { |c|
2184
+ concat c.text_field(:body)
2185
+ }
2186
+ end
2187
+
2188
+ expected = whole_form("/posts/123", "namespace_edit_post_123", "edit_post", method: "patch") do
2189
+ "<input name='post[title]' type='text' id='namespace_post_title' value='Hello World' />" \
2190
+ "<textarea name='post[body]' id='namespace_post_body'>\nBack to the hill and over it again!</textarea>" \
2191
+ "<input name='post[comment][body]' type='text' id='namespace_post_comment_body' value='Hello World' />"
2192
+ end
2193
+
2194
+ assert_dom_equal expected, output_buffer
2195
+ end
2196
+
2197
+ def test_submit_with_object_as_new_record_and_locale_strings
2198
+ with_locale :submit do
2199
+ @post.persisted = false
2200
+ @post.stub(:to_key, nil) do
2201
+ form_for(@post) do |f|
2202
+ concat f.submit
2203
+ end
2204
+
2205
+ expected = whole_form("/posts", "new_post", "new_post") do
2206
+ "<input name='commit' data-disable-with='Create Post' type='submit' value='Create Post' />"
2207
+ end
2208
+
2209
+ assert_dom_equal expected, output_buffer
2210
+ end
2211
+ end
2212
+ end
2213
+
2214
+ def test_submit_with_object_as_existing_record_and_locale_strings
2215
+ with_locale :submit do
2216
+ form_for(@post) do |f|
2217
+ concat f.submit
2218
+ end
2219
+
2220
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2221
+ "<input name='commit' data-disable-with='Confirm Post changes' type='submit' value='Confirm Post changes' />"
2222
+ end
2223
+
2224
+ assert_dom_equal expected, output_buffer
2225
+ end
2226
+ end
2227
+
2228
+ def test_submit_without_object_and_locale_strings
2229
+ with_locale :submit do
2230
+ form_for(:post) do |f|
2231
+ concat f.submit class: "extra"
2232
+ end
2233
+
2234
+ expected = whole_form do
2235
+ "<input name='commit' class='extra' data-disable-with='Save changes' type='submit' value='Save changes' />"
2236
+ end
2237
+
2238
+ assert_dom_equal expected, output_buffer
2239
+ end
2240
+ end
2241
+
2242
+ def test_submit_with_object_and_nested_lookup
2243
+ with_locale :submit do
2244
+ form_for(@post, as: :another_post) do |f|
2245
+ concat f.submit
2246
+ end
2247
+
2248
+ expected = whole_form("/posts/123", "edit_another_post", "edit_another_post", method: "patch") do
2249
+ "<input name='commit' data-disable-with='Update your Post' type='submit' value='Update your Post' />"
2250
+ end
2251
+
2252
+ assert_dom_equal expected, output_buffer
2253
+ end
2254
+ end
2255
+
2256
+ def test_nested_fields_for
2257
+ @comment.body = "Hello World"
2258
+ form_for(@post) do |f|
2259
+ concat f.fields_for(@comment) { |c|
2260
+ concat c.text_field(:body)
2261
+ }
2262
+ end
2263
+
2264
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2265
+ "<input name='post[comment][body]' type='text' id='post_comment_body' value='Hello World' />"
2266
+ end
2267
+
2268
+ assert_dom_equal expected, output_buffer
2269
+ end
2270
+
2271
+ def test_deep_nested_fields_for
2272
+ @comment.save
2273
+ form_for(:posts) do |f|
2274
+ f.fields_for("post[]", @post) do |f2|
2275
+ f2.text_field(:id)
2276
+ @post.comments.each do |comment|
2277
+ concat f2.fields_for("comment[]", comment) { |c|
2278
+ concat c.text_field(:name)
2279
+ }
2280
+ end
2281
+ end
2282
+ end
2283
+
2284
+ expected = whole_form do
2285
+ "<input name='posts[post][0][comment][1][name]' type='text' id='posts_post_0_comment_1_name' value='comment #1' />"
2286
+ end
2287
+
2288
+ assert_dom_equal expected, output_buffer
2289
+ end
2290
+
2291
+ def test_nested_fields_for_with_nested_collections
2292
+ form_for(@post, as: "post[]") do |f|
2293
+ concat f.text_field(:title)
2294
+ concat f.fields_for("comment[]", @comment) { |c|
2295
+ concat c.text_field(:name)
2296
+ }
2297
+ concat f.text_field(:body)
2298
+ end
2299
+
2300
+ expected = whole_form("/posts/123", "edit_post[]", "edit_post[]", method: "patch") do
2301
+ "<input name='post[123][title]' type='text' id='post_123_title' value='Hello World' />" \
2302
+ "<input name='post[123][comment][][name]' type='text' id='post_123_comment__name' value='new comment' />" \
2303
+ "<input name='post[123][body]' type='text' id='post_123_body' value='Back to the hill and over it again!' />"
2304
+ end
2305
+
2306
+ assert_dom_equal expected, output_buffer
2307
+ end
2308
+
2309
+ def test_nested_fields_for_with_index_and_parent_fields
2310
+ form_for(@post, index: 1) do |c|
2311
+ concat c.text_field(:title)
2312
+ concat c.fields_for("comment", @comment, index: 1) { |r|
2313
+ concat r.text_field(:name)
2314
+ }
2315
+ end
2316
+
2317
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2318
+ "<input name='post[1][title]' type='text' id='post_1_title' value='Hello World' />" \
2319
+ "<input name='post[1][comment][1][name]' type='text' id='post_1_comment_1_name' value='new comment' />"
2320
+ end
2321
+
2322
+ assert_dom_equal expected, output_buffer
2323
+ end
2324
+
2325
+ def test_form_for_with_index_and_nested_fields_for
2326
+ output_buffer = form_for(@post, index: 1) do |f|
2327
+ concat f.fields_for(:comment, @post) { |c|
2328
+ concat c.text_field(:title)
2329
+ }
2330
+ end
2331
+
2332
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2333
+ "<input name='post[1][comment][title]' type='text' id='post_1_comment_title' value='Hello World' />"
2334
+ end
2335
+
2336
+ assert_dom_equal expected, output_buffer
2337
+ end
2338
+
2339
+ def test_nested_fields_for_with_index_on_both
2340
+ form_for(@post, index: 1) do |f|
2341
+ concat f.fields_for(:comment, @post, index: 5) { |c|
2342
+ concat c.text_field(:title)
2343
+ }
2344
+ end
2345
+
2346
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2347
+ "<input name='post[1][comment][5][title]' type='text' id='post_1_comment_5_title' value='Hello World' />"
2348
+ end
2349
+
2350
+ assert_dom_equal expected, output_buffer
2351
+ end
2352
+
2353
+ def test_nested_fields_for_with_auto_index
2354
+ form_for(@post, as: "post[]") do |f|
2355
+ concat f.fields_for(:comment, @post) { |c|
2356
+ concat c.text_field(:title)
2357
+ }
2358
+ end
2359
+
2360
+ expected = whole_form("/posts/123", "edit_post[]", "edit_post[]", method: "patch") do
2361
+ "<input name='post[123][comment][title]' type='text' id='post_123_comment_title' value='Hello World' />"
2362
+ end
2363
+
2364
+ assert_dom_equal expected, output_buffer
2365
+ end
2366
+
2367
+ def test_nested_fields_for_with_index_radio_button
2368
+ form_for(@post) do |f|
2369
+ concat f.fields_for(:comment, @post, index: 5) { |c|
2370
+ concat c.radio_button(:title, "hello")
2371
+ }
2372
+ end
2373
+
2374
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2375
+ "<input name='post[comment][5][title]' type='radio' id='post_comment_5_title_hello' value='hello' />"
2376
+ end
2377
+
2378
+ assert_dom_equal expected, output_buffer
2379
+ end
2380
+
2381
+ def test_nested_fields_for_with_auto_index_on_both
2382
+ form_for(@post, as: "post[]") do |f|
2383
+ concat f.fields_for("comment[]", @post) { |c|
2384
+ concat c.text_field(:title)
2385
+ }
2386
+ end
2387
+
2388
+ expected = whole_form("/posts/123", "edit_post[]", "edit_post[]", method: "patch") do
2389
+ "<input name='post[123][comment][123][title]' type='text' id='post_123_comment_123_title' value='Hello World' />"
2390
+ end
2391
+
2392
+ assert_dom_equal expected, output_buffer
2393
+ end
2394
+
2395
+ def test_nested_fields_for_with_index_and_auto_index
2396
+ output_buffer = form_for(@post, as: "post[]") do |f|
2397
+ concat f.fields_for(:comment, @post, index: 5) { |c|
2398
+ concat c.text_field(:title)
2399
+ }
2400
+ end
2401
+
2402
+ output_buffer << form_for(@post, as: :post, index: 1) do |f|
2403
+ concat f.fields_for("comment[]", @post) { |c|
2404
+ concat c.text_field(:title)
2405
+ }
2406
+ end
2407
+
2408
+ expected = whole_form("/posts/123", "edit_post[]", "edit_post[]", method: "patch") do
2409
+ "<input name='post[123][comment][5][title]' type='text' id='post_123_comment_5_title' value='Hello World' />"
2410
+ end + whole_form("/posts/123", "edit_post", "edit_post", method: "patch") do
2411
+ "<input name='post[1][comment][123][title]' type='text' id='post_1_comment_123_title' value='Hello World' />"
2412
+ end
2413
+
2414
+ assert_dom_equal expected, output_buffer
2415
+ end
2416
+
2417
+ def test_nested_fields_for_with_a_new_record_on_a_nested_attributes_one_to_one_association
2418
+ @post.author = Author.new
2419
+
2420
+ form_for(@post) do |f|
2421
+ concat f.text_field(:title)
2422
+ concat f.fields_for(:author) { |af|
2423
+ concat af.text_field(:name)
2424
+ }
2425
+ end
2426
+
2427
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2428
+ '<input name="post[title]" type="text" id="post_title" value="Hello World" />' \
2429
+ '<input id="post_author_attributes_name" name="post[author_attributes][name]" type="text" value="new author" />'
2430
+ end
2431
+
2432
+ assert_dom_equal expected, output_buffer
2433
+ end
2434
+
2435
+ def test_nested_fields_for_with_explicitly_passed_object_on_a_nested_attributes_one_to_one_association
2436
+ form_for(@post) do |f|
2437
+ f.fields_for(:author, Author.new(123)) do |af|
2438
+ assert_not_nil af.object
2439
+ assert_equal 123, af.object.id
2440
+ end
2441
+ end
2442
+ end
2443
+
2444
+ def test_nested_fields_for_with_an_existing_record_on_a_nested_attributes_one_to_one_association
2445
+ @post.author = Author.new(321)
2446
+
2447
+ form_for(@post) do |f|
2448
+ concat f.text_field(:title)
2449
+ concat f.fields_for(:author) { |af|
2450
+ concat af.text_field(:name)
2451
+ }
2452
+ end
2453
+
2454
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2455
+ '<input name="post[title]" type="text" id="post_title" value="Hello World" />' \
2456
+ '<input id="post_author_attributes_name" name="post[author_attributes][name]" type="text" value="author #321" />' \
2457
+ '<input id="post_author_attributes_id" name="post[author_attributes][id]" type="hidden" value="321" />'
2458
+ end
2459
+
2460
+ assert_dom_equal expected, output_buffer
2461
+ end
2462
+
2463
+ def test_nested_fields_for_with_an_existing_record_on_a_nested_attributes_one_to_one_association_using_erb_and_inline_block
2464
+ @post.author = Author.new(321)
2465
+
2466
+ form_for(@post) do |f|
2467
+ concat f.text_field(:title)
2468
+ concat f.fields_for(:author) { |af|
2469
+ af.text_field(:name)
2470
+ }
2471
+ end
2472
+
2473
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2474
+ '<input name="post[title]" type="text" id="post_title" value="Hello World" />' \
2475
+ '<input id="post_author_attributes_name" name="post[author_attributes][name]" type="text" value="author #321" />' \
2476
+ '<input id="post_author_attributes_id" name="post[author_attributes][id]" type="hidden" value="321" />'
2477
+ end
2478
+
2479
+ assert_dom_equal expected, output_buffer
2480
+ end
2481
+
2482
+ def test_nested_fields_for_with_an_existing_record_on_a_nested_attributes_one_to_one_association_with_disabled_hidden_id
2483
+ @post.author = Author.new(321)
2484
+
2485
+ form_for(@post) do |f|
2486
+ concat f.text_field(:title)
2487
+ concat f.fields_for(:author, include_id: false) { |af|
2488
+ af.text_field(:name)
2489
+ }
2490
+ end
2491
+
2492
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2493
+ '<input name="post[title]" type="text" id="post_title" value="Hello World" />' \
2494
+ '<input id="post_author_attributes_name" name="post[author_attributes][name]" type="text" value="author #321" />'
2495
+ end
2496
+
2497
+ assert_dom_equal expected, output_buffer
2498
+ end
2499
+
2500
+ def test_nested_fields_for_with_an_existing_record_on_a_nested_attributes_one_to_one_association_with_disabled_hidden_id_inherited
2501
+ @post.author = Author.new(321)
2502
+
2503
+ form_for(@post, include_id: false) do |f|
2504
+ concat f.text_field(:title)
2505
+ concat f.fields_for(:author) { |af|
2506
+ af.text_field(:name)
2507
+ }
2508
+ end
2509
+
2510
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2511
+ '<input name="post[title]" type="text" id="post_title" value="Hello World" />' \
2512
+ '<input id="post_author_attributes_name" name="post[author_attributes][name]" type="text" value="author #321" />'
2513
+ end
2514
+
2515
+ assert_dom_equal expected, output_buffer
2516
+ end
2517
+
2518
+ def test_nested_fields_for_with_an_existing_record_on_a_nested_attributes_one_to_one_association_with_disabled_hidden_id_override
2519
+ @post.author = Author.new(321)
2520
+
2521
+ form_for(@post, include_id: false) do |f|
2522
+ concat f.text_field(:title)
2523
+ concat f.fields_for(:author, include_id: true) { |af|
2524
+ af.text_field(:name)
2525
+ }
2526
+ end
2527
+
2528
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2529
+ '<input name="post[title]" type="text" id="post_title" value="Hello World" />' \
2530
+ '<input id="post_author_attributes_name" name="post[author_attributes][name]" type="text" value="author #321" />' \
2531
+ '<input id="post_author_attributes_id" name="post[author_attributes][id]" type="hidden" value="321" />'
2532
+ end
2533
+
2534
+ assert_dom_equal expected, output_buffer
2535
+ end
2536
+
2537
+ def test_nested_fields_for_with_existing_records_on_a_nested_attributes_one_to_one_association_with_explicit_hidden_field_placement
2538
+ @post.author = Author.new(321)
2539
+
2540
+ form_for(@post) do |f|
2541
+ concat f.text_field(:title)
2542
+ concat f.fields_for(:author) { |af|
2543
+ concat af.hidden_field(:id)
2544
+ concat af.text_field(:name)
2545
+ }
2546
+ end
2547
+
2548
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2549
+ '<input name="post[title]" type="text" id="post_title" value="Hello World" />' \
2550
+ '<input id="post_author_attributes_id" name="post[author_attributes][id]" type="hidden" value="321" />' \
2551
+ '<input id="post_author_attributes_name" name="post[author_attributes][name]" type="text" value="author #321" />'
2552
+ end
2553
+
2554
+ assert_dom_equal expected, output_buffer
2555
+ end
2556
+
2557
+ def test_nested_fields_for_with_existing_records_on_a_nested_attributes_collection_association
2558
+ @post.comments = Array.new(2) { |id| Comment.new(id + 1) }
2559
+
2560
+ form_for(@post) do |f|
2561
+ concat f.text_field(:title)
2562
+ @post.comments.each do |comment|
2563
+ concat f.fields_for(:comments, comment) { |cf|
2564
+ concat cf.text_field(:name)
2565
+ }
2566
+ end
2567
+ end
2568
+
2569
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2570
+ '<input name="post[title]" type="text" id="post_title" value="Hello World" />' \
2571
+ '<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" type="text" value="comment #1" />' \
2572
+ '<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="1" />' \
2573
+ '<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" type="text" value="comment #2" />' \
2574
+ '<input id="post_comments_attributes_1_id" name="post[comments_attributes][1][id]" type="hidden" value="2" />'
2575
+ end
2576
+
2577
+ assert_dom_equal expected, output_buffer
2578
+ end
2579
+
2580
+ def test_nested_fields_for_with_existing_records_on_a_nested_attributes_collection_association_with_disabled_hidden_id
2581
+ @post.comments = Array.new(2) { |id| Comment.new(id + 1) }
2582
+ @post.author = Author.new(321)
2583
+
2584
+ form_for(@post) do |f|
2585
+ concat f.text_field(:title)
2586
+ concat f.fields_for(:author) { |af|
2587
+ concat af.text_field(:name)
2588
+ }
2589
+ @post.comments.each do |comment|
2590
+ concat f.fields_for(:comments, comment, include_id: false) { |cf|
2591
+ concat cf.text_field(:name)
2592
+ }
2593
+ end
2594
+ end
2595
+
2596
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2597
+ '<input name="post[title]" type="text" id="post_title" value="Hello World" />' \
2598
+ '<input id="post_author_attributes_name" name="post[author_attributes][name]" type="text" value="author #321" />' \
2599
+ '<input id="post_author_attributes_id" name="post[author_attributes][id]" type="hidden" value="321" />' \
2600
+ '<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" type="text" value="comment #1" />' \
2601
+ '<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" type="text" value="comment #2" />'
2602
+ end
2603
+
2604
+ assert_dom_equal expected, output_buffer
2605
+ end
2606
+
2607
+ def test_nested_fields_for_with_existing_records_on_a_nested_attributes_collection_association_with_disabled_hidden_id_inherited
2608
+ @post.comments = Array.new(2) { |id| Comment.new(id + 1) }
2609
+ @post.author = Author.new(321)
2610
+
2611
+ form_for(@post, include_id: false) do |f|
2612
+ concat f.text_field(:title)
2613
+ concat f.fields_for(:author) { |af|
2614
+ concat af.text_field(:name)
2615
+ }
2616
+ @post.comments.each do |comment|
2617
+ concat f.fields_for(:comments, comment) { |cf|
2618
+ concat cf.text_field(:name)
2619
+ }
2620
+ end
2621
+ end
2622
+
2623
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2624
+ '<input name="post[title]" type="text" id="post_title" value="Hello World" />' \
2625
+ '<input id="post_author_attributes_name" name="post[author_attributes][name]" type="text" value="author #321" />' \
2626
+ '<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" type="text" value="comment #1" />' \
2627
+ '<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" type="text" value="comment #2" />'
2628
+ end
2629
+
2630
+ assert_dom_equal expected, output_buffer
2631
+ end
2632
+
2633
+ def test_nested_fields_for_with_existing_records_on_a_nested_attributes_collection_association_with_disabled_hidden_id_override
2634
+ @post.comments = Array.new(2) { |id| Comment.new(id + 1) }
2635
+ @post.author = Author.new(321)
2636
+
2637
+ form_for(@post, include_id: false) do |f|
2638
+ concat f.text_field(:title)
2639
+ concat f.fields_for(:author, include_id: true) { |af|
2640
+ concat af.text_field(:name)
2641
+ }
2642
+ @post.comments.each do |comment|
2643
+ concat f.fields_for(:comments, comment) { |cf|
2644
+ concat cf.text_field(:name)
2645
+ }
2646
+ end
2647
+ end
2648
+
2649
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2650
+ '<input name="post[title]" type="text" id="post_title" value="Hello World" />' \
2651
+ '<input id="post_author_attributes_name" name="post[author_attributes][name]" type="text" value="author #321" />' \
2652
+ '<input id="post_author_attributes_id" name="post[author_attributes][id]" type="hidden" value="321" />' \
2653
+ '<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" type="text" value="comment #1" />' \
2654
+ '<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" type="text" value="comment #2" />'
2655
+ end
2656
+
2657
+ assert_dom_equal expected, output_buffer
2658
+ end
2659
+
2660
+ def test_nested_fields_for_with_existing_records_on_a_nested_attributes_collection_association_using_erb_and_inline_block
2661
+ @post.comments = Array.new(2) { |id| Comment.new(id + 1) }
2662
+
2663
+ form_for(@post) do |f|
2664
+ concat f.text_field(:title)
2665
+ @post.comments.each do |comment|
2666
+ concat f.fields_for(:comments, comment) { |cf|
2667
+ cf.text_field(:name)
2668
+ }
2669
+ end
2670
+ end
2671
+
2672
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2673
+ '<input name="post[title]" type="text" id="post_title" value="Hello World" />' \
2674
+ '<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" type="text" value="comment #1" />' \
2675
+ '<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="1" />' \
2676
+ '<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" type="text" value="comment #2" />' \
2677
+ '<input id="post_comments_attributes_1_id" name="post[comments_attributes][1][id]" type="hidden" value="2" />'
2678
+ end
2679
+
2680
+ assert_dom_equal expected, output_buffer
2681
+ end
2682
+
2683
+ def test_nested_fields_for_with_existing_records_on_a_nested_attributes_collection_association_with_explicit_hidden_field_placement
2684
+ @post.comments = Array.new(2) { |id| Comment.new(id + 1) }
2685
+
2686
+ form_for(@post) do |f|
2687
+ concat f.text_field(:title)
2688
+ @post.comments.each do |comment|
2689
+ concat f.fields_for(:comments, comment) { |cf|
2690
+ concat cf.hidden_field(:id)
2691
+ concat cf.text_field(:name)
2692
+ }
2693
+ end
2694
+ end
2695
+
2696
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2697
+ '<input name="post[title]" type="text" id="post_title" value="Hello World" />' \
2698
+ '<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="1" />' \
2699
+ '<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" type="text" value="comment #1" />' \
2700
+ '<input id="post_comments_attributes_1_id" name="post[comments_attributes][1][id]" type="hidden" value="2" />' \
2701
+ '<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" type="text" value="comment #2" />'
2702
+ end
2703
+
2704
+ assert_dom_equal expected, output_buffer
2705
+ end
2706
+
2707
+ def test_nested_fields_for_with_new_records_on_a_nested_attributes_collection_association
2708
+ @post.comments = [Comment.new, Comment.new]
2709
+
2710
+ form_for(@post) do |f|
2711
+ concat f.text_field(:title)
2712
+ @post.comments.each do |comment|
2713
+ concat f.fields_for(:comments, comment) { |cf|
2714
+ concat cf.text_field(:name)
2715
+ }
2716
+ end
2717
+ end
2718
+
2719
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2720
+ '<input name="post[title]" type="text" id="post_title" value="Hello World" />' \
2721
+ '<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" type="text" value="new comment" />' \
2722
+ '<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" type="text" value="new comment" />'
2723
+ end
2724
+
2725
+ assert_dom_equal expected, output_buffer
2726
+ end
2727
+
2728
+ def test_nested_fields_for_with_existing_and_new_records_on_a_nested_attributes_collection_association
2729
+ @post.comments = [Comment.new(321), Comment.new]
2730
+
2731
+ form_for(@post) do |f|
2732
+ concat f.text_field(:title)
2733
+ @post.comments.each do |comment|
2734
+ concat f.fields_for(:comments, comment) { |cf|
2735
+ concat cf.text_field(:name)
2736
+ }
2737
+ end
2738
+ end
2739
+
2740
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2741
+ '<input name="post[title]" type="text" id="post_title" value="Hello World" />' \
2742
+ '<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" type="text" value="comment #321" />' \
2743
+ '<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="321" />' \
2744
+ '<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" type="text" value="new comment" />'
2745
+ end
2746
+
2747
+ assert_dom_equal expected, output_buffer
2748
+ end
2749
+
2750
+ def test_nested_fields_for_with_an_empty_supplied_attributes_collection
2751
+ form_for(@post) do |f|
2752
+ concat f.text_field(:title)
2753
+ f.fields_for(:comments, []) do |cf|
2754
+ concat cf.text_field(:name)
2755
+ end
2756
+ end
2757
+
2758
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2759
+ '<input name="post[title]" type="text" id="post_title" value="Hello World" />'
2760
+ end
2761
+
2762
+ assert_dom_equal expected, output_buffer
2763
+ end
2764
+
2765
+ def test_nested_fields_for_with_existing_records_on_a_supplied_nested_attributes_collection
2766
+ @post.comments = Array.new(2) { |id| Comment.new(id + 1) }
2767
+
2768
+ form_for(@post) do |f|
2769
+ concat f.text_field(:title)
2770
+ concat f.fields_for(:comments, @post.comments) { |cf|
2771
+ concat cf.text_field(:name)
2772
+ }
2773
+ end
2774
+
2775
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2776
+ '<input name="post[title]" type="text" id="post_title" value="Hello World" />' \
2777
+ '<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" type="text" value="comment #1" />' \
2778
+ '<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="1" />' \
2779
+ '<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" type="text" value="comment #2" />' \
2780
+ '<input id="post_comments_attributes_1_id" name="post[comments_attributes][1][id]" type="hidden" value="2" />'
2781
+ end
2782
+
2783
+ assert_dom_equal expected, output_buffer
2784
+ end
2785
+
2786
+ def test_nested_fields_for_arel_like
2787
+ @post.comments = ArelLike.new
2788
+
2789
+ form_for(@post) do |f|
2790
+ concat f.text_field(:title)
2791
+ concat f.fields_for(:comments, @post.comments) { |cf|
2792
+ concat cf.text_field(:name)
2793
+ }
2794
+ end
2795
+
2796
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2797
+ '<input name="post[title]" type="text" id="post_title" value="Hello World" />' \
2798
+ '<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" type="text" value="comment #1" />' \
2799
+ '<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="1" />' \
2800
+ '<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" type="text" value="comment #2" />' \
2801
+ '<input id="post_comments_attributes_1_id" name="post[comments_attributes][1][id]" type="hidden" value="2" />'
2802
+ end
2803
+
2804
+ assert_dom_equal expected, output_buffer
2805
+ end
2806
+
2807
+ def test_nested_fields_label_translation_with_more_than_10_records
2808
+ @post.comments = Array.new(11) { |id| Comment.new(id + 1) }
2809
+
2810
+ params = 11.times.map { ["post.comments.body", default: [:"comment.body", ""], scope: "helpers.label"] }
2811
+ assert_called_with(I18n, :t, params, returns: "Write body here") do
2812
+ form_for(@post) do |f|
2813
+ f.fields_for(:comments) do |cf|
2814
+ concat cf.label(:body)
2815
+ end
2816
+ end
2817
+ end
2818
+ end
2819
+
2820
+ def test_nested_fields_for_with_existing_records_on_a_supplied_nested_attributes_collection_different_from_record_one
2821
+ comments = Array.new(2) { |id| Comment.new(id + 1) }
2822
+ @post.comments = []
2823
+
2824
+ form_for(@post) do |f|
2825
+ concat f.text_field(:title)
2826
+ concat f.fields_for(:comments, comments) { |cf|
2827
+ concat cf.text_field(:name)
2828
+ }
2829
+ end
2830
+
2831
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2832
+ '<input name="post[title]" type="text" id="post_title" value="Hello World" />' \
2833
+ '<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" type="text" value="comment #1" />' \
2834
+ '<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="1" />' \
2835
+ '<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" type="text" value="comment #2" />' \
2836
+ '<input id="post_comments_attributes_1_id" name="post[comments_attributes][1][id]" type="hidden" value="2" />'
2837
+ end
2838
+
2839
+ assert_dom_equal expected, output_buffer
2840
+ end
2841
+
2842
+ def test_nested_fields_for_on_a_nested_attributes_collection_association_yields_only_builder
2843
+ @post.comments = [Comment.new(321), Comment.new]
2844
+ yielded_comments = []
2845
+
2846
+ form_for(@post) do |f|
2847
+ concat f.text_field(:title)
2848
+ concat f.fields_for(:comments) { |cf|
2849
+ concat cf.text_field(:name)
2850
+ yielded_comments << cf.object
2851
+ }
2852
+ end
2853
+
2854
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2855
+ '<input name="post[title]" type="text" id="post_title" value="Hello World" />' \
2856
+ '<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" type="text" value="comment #321" />' \
2857
+ '<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="321" />' \
2858
+ '<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" type="text" value="new comment" />'
2859
+ end
2860
+
2861
+ assert_dom_equal expected, output_buffer
2862
+ assert_equal yielded_comments, @post.comments
2863
+ end
2864
+
2865
+ def test_nested_fields_for_with_child_index_option_override_on_a_nested_attributes_collection_association
2866
+ @post.comments = []
2867
+
2868
+ form_for(@post) do |f|
2869
+ concat f.fields_for(:comments, Comment.new(321), child_index: "abc") { |cf|
2870
+ concat cf.text_field(:name)
2871
+ }
2872
+ end
2873
+
2874
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2875
+ '<input id="post_comments_attributes_abc_name" name="post[comments_attributes][abc][name]" type="text" value="comment #321" />' \
2876
+ '<input id="post_comments_attributes_abc_id" name="post[comments_attributes][abc][id]" type="hidden" value="321" />'
2877
+ end
2878
+
2879
+ assert_dom_equal expected, output_buffer
2880
+ end
2881
+
2882
+ def test_nested_fields_for_with_child_index_as_lambda_option_override_on_a_nested_attributes_collection_association
2883
+ @post.comments = []
2884
+
2885
+ form_for(@post) do |f|
2886
+ concat f.fields_for(:comments, Comment.new(321), child_index: -> { "abc" }) { |cf|
2887
+ concat cf.text_field(:name)
2888
+ }
2889
+ end
2890
+
2891
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2892
+ '<input id="post_comments_attributes_abc_name" name="post[comments_attributes][abc][name]" type="text" value="comment #321" />' \
2893
+ '<input id="post_comments_attributes_abc_id" name="post[comments_attributes][abc][id]" type="hidden" value="321" />'
2894
+ end
2895
+
2896
+ assert_dom_equal expected, output_buffer
2897
+ end
2898
+
2899
+ class FakeAssociationProxy
2900
+ def to_ary
2901
+ [1, 2, 3]
2902
+ end
2903
+ end
2904
+
2905
+ def test_nested_fields_for_with_child_index_option_override_on_a_nested_attributes_collection_association_with_proxy
2906
+ @post.comments = FakeAssociationProxy.new
2907
+
2908
+ form_for(@post) do |f|
2909
+ concat f.fields_for(:comments, Comment.new(321), child_index: "abc") { |cf|
2910
+ concat cf.text_field(:name)
2911
+ }
2912
+ end
2913
+
2914
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
2915
+ '<input id="post_comments_attributes_abc_name" name="post[comments_attributes][abc][name]" type="text" value="comment #321" />' \
2916
+ '<input id="post_comments_attributes_abc_id" name="post[comments_attributes][abc][id]" type="hidden" value="321" />'
2917
+ end
2918
+
2919
+ assert_dom_equal expected, output_buffer
2920
+ end
2921
+
2922
+ def test_nested_fields_for_index_method_with_existing_records_on_a_nested_attributes_collection_association
2923
+ @post.comments = Array.new(2) { |id| Comment.new(id + 1) }
2924
+
2925
+ form_for(@post) do |f|
2926
+ expected = 0
2927
+ @post.comments.each do |comment|
2928
+ f.fields_for(:comments, comment) { |cf|
2929
+ assert_equal expected, cf.index
2930
+ expected += 1
2931
+ }
2932
+ end
2933
+ end
2934
+ end
2935
+
2936
+ def test_nested_fields_for_index_method_with_existing_and_new_records_on_a_nested_attributes_collection_association
2937
+ @post.comments = [Comment.new(321), Comment.new]
2938
+
2939
+ form_for(@post) do |f|
2940
+ expected = 0
2941
+ @post.comments.each do |comment|
2942
+ f.fields_for(:comments, comment) { |cf|
2943
+ assert_equal expected, cf.index
2944
+ expected += 1
2945
+ }
2946
+ end
2947
+ end
2948
+ end
2949
+
2950
+ def test_nested_fields_for_index_method_with_existing_records_on_a_supplied_nested_attributes_collection
2951
+ @post.comments = Array.new(2) { |id| Comment.new(id + 1) }
2952
+
2953
+ form_for(@post) do |f|
2954
+ expected = 0
2955
+ f.fields_for(:comments, @post.comments) { |cf|
2956
+ assert_equal expected, cf.index
2957
+ expected += 1
2958
+ }
2959
+ end
2960
+ end
2961
+
2962
+ def test_nested_fields_for_index_method_with_child_index_option_override_on_a_nested_attributes_collection_association
2963
+ @post.comments = []
2964
+
2965
+ form_for(@post) do |f|
2966
+ f.fields_for(:comments, Comment.new(321), child_index: "abc") { |cf|
2967
+ assert_equal "abc", cf.index
2968
+ }
2969
+ end
2970
+ end
2971
+
2972
+ def test_nested_fields_uses_unique_indices_for_different_collection_associations
2973
+ @post.comments = [Comment.new(321)]
2974
+ @post.tags = [Tag.new(123), Tag.new(456)]
2975
+ @post.comments[0].relevances = []
2976
+ @post.tags[0].relevances = []
2977
+ @post.tags[1].relevances = []
2978
+
2979
+ form_for(@post) do |f|
2980
+ concat f.fields_for(:comments, @post.comments[0]) { |cf|
2981
+ concat cf.text_field(:name)
2982
+ concat cf.fields_for(:relevances, CommentRelevance.new(314)) { |crf|
2983
+ concat crf.text_field(:value)
2984
+ }
2985
+ }
2986
+ concat f.fields_for(:tags, @post.tags[0]) { |tf|
2987
+ concat tf.text_field(:value)
2988
+ concat tf.fields_for(:relevances, TagRelevance.new(3141)) { |trf|
2989
+ concat trf.text_field(:value)
2990
+ }
2991
+ }
2992
+ concat f.fields_for("tags", @post.tags[1]) { |tf|
2993
+ concat tf.text_field(:value)
2994
+ concat tf.fields_for(:relevances, TagRelevance.new(31415)) { |trf|
2995
+ concat trf.text_field(:value)
2996
+ }
2997
+ }
2998
+ end
2999
+
3000
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
3001
+ '<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" type="text" value="comment #321" />' \
3002
+ '<input id="post_comments_attributes_0_relevances_attributes_0_value" name="post[comments_attributes][0][relevances_attributes][0][value]" type="text" value="commentrelevance #314" />' \
3003
+ '<input id="post_comments_attributes_0_relevances_attributes_0_id" name="post[comments_attributes][0][relevances_attributes][0][id]" type="hidden" value="314" />' \
3004
+ '<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="321" />' \
3005
+ '<input id="post_tags_attributes_0_value" name="post[tags_attributes][0][value]" type="text" value="tag #123" />' \
3006
+ '<input id="post_tags_attributes_0_relevances_attributes_0_value" name="post[tags_attributes][0][relevances_attributes][0][value]" type="text" value="tagrelevance #3141" />' \
3007
+ '<input id="post_tags_attributes_0_relevances_attributes_0_id" name="post[tags_attributes][0][relevances_attributes][0][id]" type="hidden" value="3141" />' \
3008
+ '<input id="post_tags_attributes_0_id" name="post[tags_attributes][0][id]" type="hidden" value="123" />' \
3009
+ '<input id="post_tags_attributes_1_value" name="post[tags_attributes][1][value]" type="text" value="tag #456" />' \
3010
+ '<input id="post_tags_attributes_1_relevances_attributes_0_value" name="post[tags_attributes][1][relevances_attributes][0][value]" type="text" value="tagrelevance #31415" />' \
3011
+ '<input id="post_tags_attributes_1_relevances_attributes_0_id" name="post[tags_attributes][1][relevances_attributes][0][id]" type="hidden" value="31415" />' \
3012
+ '<input id="post_tags_attributes_1_id" name="post[tags_attributes][1][id]" type="hidden" value="456" />'
3013
+ end
3014
+
3015
+ assert_dom_equal expected, output_buffer
3016
+ end
3017
+
3018
+ def test_nested_fields_for_with_hash_like_model
3019
+ @author = HashBackedAuthor.new
3020
+
3021
+ form_for(@post) do |f|
3022
+ concat f.fields_for(:author, @author) { |af|
3023
+ concat af.text_field(:name)
3024
+ }
3025
+ end
3026
+
3027
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
3028
+ '<input id="post_author_attributes_name" name="post[author_attributes][name]" type="text" value="hash backed author" />'
3029
+ end
3030
+
3031
+ assert_dom_equal expected, output_buffer
3032
+ end
3033
+
3034
+ def test_fields_for
3035
+ output_buffer = fields_for(:post, @post) do |f|
3036
+ concat f.text_field(:title)
3037
+ concat f.text_area(:body)
3038
+ concat f.check_box(:secret)
3039
+ end
3040
+
3041
+ expected =
3042
+ "<input name='post[title]' type='text' id='post_title' value='Hello World' />" \
3043
+ "<textarea name='post[body]' id='post_body'>\nBack to the hill and over it again!</textarea>" \
3044
+ "<input name='post[secret]' type='hidden' value='0' />" \
3045
+ "<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />"
3046
+
3047
+ assert_dom_equal expected, output_buffer
3048
+ end
3049
+
3050
+ def test_fields_for_with_index
3051
+ output_buffer = fields_for("post[]", @post) do |f|
3052
+ concat f.text_field(:title)
3053
+ concat f.text_area(:body)
3054
+ concat f.check_box(:secret)
3055
+ end
3056
+
3057
+ expected =
3058
+ "<input name='post[123][title]' type='text' id='post_123_title' value='Hello World' />" \
3059
+ "<textarea name='post[123][body]' id='post_123_body'>\nBack to the hill and over it again!</textarea>" \
3060
+ "<input name='post[123][secret]' type='hidden' value='0' />" \
3061
+ "<input name='post[123][secret]' checked='checked' type='checkbox' id='post_123_secret' value='1' />"
3062
+
3063
+ assert_dom_equal expected, output_buffer
3064
+ end
3065
+
3066
+ def test_fields_for_with_nil_index_option_override
3067
+ output_buffer = fields_for("post[]", @post, index: nil) do |f|
3068
+ concat f.text_field(:title)
3069
+ concat f.text_area(:body)
3070
+ concat f.check_box(:secret)
3071
+ end
3072
+
3073
+ expected =
3074
+ "<input name='post[][title]' type='text' id='post__title' value='Hello World' />" \
3075
+ "<textarea name='post[][body]' id='post__body'>\nBack to the hill and over it again!</textarea>" \
3076
+ "<input name='post[][secret]' type='hidden' value='0' />" \
3077
+ "<input name='post[][secret]' checked='checked' type='checkbox' id='post__secret' value='1' />"
3078
+
3079
+ assert_dom_equal expected, output_buffer
3080
+ end
3081
+
3082
+ def test_fields_for_with_index_option_override
3083
+ output_buffer = fields_for("post[]", @post, index: "abc") do |f|
3084
+ concat f.text_field(:title)
3085
+ concat f.text_area(:body)
3086
+ concat f.check_box(:secret)
3087
+ end
3088
+
3089
+ expected =
3090
+ "<input name='post[abc][title]' type='text' id='post_abc_title' value='Hello World' />" \
3091
+ "<textarea name='post[abc][body]' id='post_abc_body'>\nBack to the hill and over it again!</textarea>" \
3092
+ "<input name='post[abc][secret]' type='hidden' value='0' />" \
3093
+ "<input name='post[abc][secret]' checked='checked' type='checkbox' id='post_abc_secret' value='1' />"
3094
+
3095
+ assert_dom_equal expected, output_buffer
3096
+ end
3097
+
3098
+ def test_fields_for_without_object
3099
+ output_buffer = fields_for(:post) do |f|
3100
+ concat f.text_field(:title)
3101
+ concat f.text_area(:body)
3102
+ concat f.check_box(:secret)
3103
+ end
3104
+
3105
+ expected =
3106
+ "<input name='post[title]' type='text' id='post_title' value='Hello World' />" \
3107
+ "<textarea name='post[body]' id='post_body'>\nBack to the hill and over it again!</textarea>" \
3108
+ "<input name='post[secret]' type='hidden' value='0' />" \
3109
+ "<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />"
3110
+
3111
+ assert_dom_equal expected, output_buffer
3112
+ end
3113
+
3114
+ def test_fields_for_with_only_object
3115
+ output_buffer = fields_for(@post) do |f|
3116
+ concat f.text_field(:title)
3117
+ concat f.text_area(:body)
3118
+ concat f.check_box(:secret)
3119
+ end
3120
+
3121
+ expected =
3122
+ "<input name='post[title]' type='text' id='post_title' value='Hello World' />" \
3123
+ "<textarea name='post[body]' id='post_body'>\nBack to the hill and over it again!</textarea>" \
3124
+ "<input name='post[secret]' type='hidden' value='0' />" \
3125
+ "<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />"
3126
+
3127
+ assert_dom_equal expected, output_buffer
3128
+ end
3129
+
3130
+ def test_fields_for_object_with_bracketed_name
3131
+ output_buffer = fields_for("author[post]", @post) do |f|
3132
+ concat f.label(:title)
3133
+ concat f.text_field(:title)
3134
+ end
3135
+
3136
+ assert_dom_equal "<label for=\"author_post_title\">Title</label>" \
3137
+ "<input name='author[post][title]' type='text' id='author_post_title' value='Hello World' />",
3138
+ output_buffer
3139
+ end
3140
+
3141
+ def test_fields_for_object_with_bracketed_name_and_index
3142
+ output_buffer = fields_for("author[post]", @post, index: 1) do |f|
3143
+ concat f.label(:title)
3144
+ concat f.text_field(:title)
3145
+ end
3146
+
3147
+ assert_dom_equal "<label for=\"author_post_1_title\">Title</label>" \
3148
+ "<input name='author[post][1][title]' type='text' id='author_post_1_title' value='Hello World' />",
3149
+ output_buffer
3150
+ end
3151
+
3152
+ def test_form_builder_does_not_have_form_for_method
3153
+ assert_not_includes ActionView::Helpers::FormBuilder.instance_methods, :form_for
3154
+ end
3155
+
3156
+ def test_form_for_and_fields_for
3157
+ form_for(@post, as: :post, html: { id: "create-post" }) do |post_form|
3158
+ concat post_form.text_field(:title)
3159
+ concat post_form.text_area(:body)
3160
+
3161
+ concat fields_for(:parent_post, @post) { |parent_fields|
3162
+ concat parent_fields.check_box(:secret)
3163
+ }
3164
+ end
3165
+
3166
+ expected = whole_form("/posts/123", "create-post", "edit_post", method: "patch") do
3167
+ "<input name='post[title]' type='text' id='post_title' value='Hello World' />" \
3168
+ "<textarea name='post[body]' id='post_body'>\nBack to the hill and over it again!</textarea>" \
3169
+ "<input name='parent_post[secret]' type='hidden' value='0' />" \
3170
+ "<input name='parent_post[secret]' checked='checked' type='checkbox' id='parent_post_secret' value='1' />"
3171
+ end
3172
+
3173
+ assert_dom_equal expected, output_buffer
3174
+ end
3175
+
3176
+ def test_form_for_and_fields_for_with_object
3177
+ form_for(@post, as: :post, html: { id: "create-post" }) do |post_form|
3178
+ concat post_form.text_field(:title)
3179
+ concat post_form.text_area(:body)
3180
+
3181
+ concat post_form.fields_for(@comment) { |comment_fields|
3182
+ concat comment_fields.text_field(:name)
3183
+ }
3184
+ end
3185
+
3186
+ expected = whole_form("/posts/123", "create-post", "edit_post", method: "patch") do
3187
+ "<input name='post[title]' type='text' id='post_title' value='Hello World' />" \
3188
+ "<textarea name='post[body]' id='post_body'>\nBack to the hill and over it again!</textarea>" \
3189
+ "<input name='post[comment][name]' type='text' id='post_comment_name' value='new comment' />"
3190
+ end
3191
+
3192
+ assert_dom_equal expected, output_buffer
3193
+ end
3194
+
3195
+ def test_form_for_and_fields_for_with_non_nested_association_and_without_object
3196
+ form_for(@post) do |f|
3197
+ concat f.fields_for(:category) { |c|
3198
+ concat c.text_field(:name)
3199
+ }
3200
+ end
3201
+
3202
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
3203
+ "<input name='post[category][name]' type='text' id='post_category_name' />"
3204
+ end
3205
+
3206
+ assert_dom_equal expected, output_buffer
3207
+ end
3208
+
3209
+ class LabelledFormBuilder < ActionView::Helpers::FormBuilder
3210
+ (field_helpers - %w(hidden_field)).each do |selector|
3211
+ class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
3212
+ def #{selector}(field, *args, &proc)
3213
+ ("<label for='\#{field}'>\#{field.to_s.humanize}:</label> " + super + "<br/>").html_safe
3214
+ end
3215
+ RUBY_EVAL
3216
+ end
3217
+ end
3218
+
3219
+ def test_form_for_with_labelled_builder
3220
+ form_for(@post, builder: LabelledFormBuilder) do |f|
3221
+ concat f.text_field(:title)
3222
+ concat f.text_area(:body)
3223
+ concat f.check_box(:secret)
3224
+ end
3225
+
3226
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
3227
+ "<label for='title'>Title:</label> <input name='post[title]' type='text' id='post_title' value='Hello World' /><br/>" \
3228
+ "<label for='body'>Body:</label> <textarea name='post[body]' id='post_body'>\nBack to the hill and over it again!</textarea><br/>" \
3229
+ "<label for='secret'>Secret:</label> <input name='post[secret]' type='hidden' value='0' /><input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /><br/>"
3230
+ end
3231
+
3232
+ assert_dom_equal expected, output_buffer
3233
+ end
3234
+
3235
+ def test_default_form_builder
3236
+ old_default_form_builder, ActionView::Base.default_form_builder =
3237
+ ActionView::Base.default_form_builder, LabelledFormBuilder
3238
+
3239
+ form_for(@post) do |f|
3240
+ concat f.text_field(:title)
3241
+ concat f.text_area(:body)
3242
+ concat f.check_box(:secret)
3243
+ end
3244
+
3245
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
3246
+ "<label for='title'>Title:</label> <input name='post[title]' type='text' id='post_title' value='Hello World' /><br/>" \
3247
+ "<label for='body'>Body:</label> <textarea name='post[body]' id='post_body'>\nBack to the hill and over it again!</textarea><br/>" \
3248
+ "<label for='secret'>Secret:</label> <input name='post[secret]' type='hidden' value='0' /><input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /><br/>"
3249
+ end
3250
+
3251
+ assert_dom_equal expected, output_buffer
3252
+ ensure
3253
+ ActionView::Base.default_form_builder = old_default_form_builder
3254
+ end
3255
+
3256
+ def test_lazy_loading_default_form_builder
3257
+ old_default_form_builder, ActionView::Base.default_form_builder =
3258
+ ActionView::Base.default_form_builder, "FormHelperTest::LabelledFormBuilder"
3259
+
3260
+ form_for(@post) do |f|
3261
+ concat f.text_field(:title)
3262
+ end
3263
+
3264
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch") do
3265
+ "<label for='title'>Title:</label> <input name='post[title]' type='text' id='post_title' value='Hello World' /><br/>"
3266
+ end
3267
+
3268
+ assert_dom_equal expected, output_buffer
3269
+ ensure
3270
+ ActionView::Base.default_form_builder = old_default_form_builder
3271
+ end
3272
+
3273
+ def test_form_builder_override
3274
+ self.default_form_builder = LabelledFormBuilder
3275
+
3276
+ output_buffer = fields_for(:post, @post) do |f|
3277
+ concat f.text_field(:title)
3278
+ end
3279
+
3280
+ expected = "<label for='title'>Title:</label> <input name='post[title]' type='text' id='post_title' value='Hello World' /><br/>"
3281
+
3282
+ assert_dom_equal expected, output_buffer
3283
+ end
3284
+
3285
+ def test_lazy_loading_form_builder_override
3286
+ self.default_form_builder = "FormHelperTest::LabelledFormBuilder"
3287
+
3288
+ output_buffer = fields_for(:post, @post) do |f|
3289
+ concat f.text_field(:title)
3290
+ end
3291
+
3292
+ expected = "<label for='title'>Title:</label> <input name='post[title]' type='text' id='post_title' value='Hello World' /><br/>"
3293
+
3294
+ assert_dom_equal expected, output_buffer
3295
+ end
3296
+
3297
+ def test_fields_for_with_labelled_builder
3298
+ output_buffer = fields_for(:post, @post, builder: LabelledFormBuilder) do |f|
3299
+ concat f.text_field(:title)
3300
+ concat f.text_area(:body)
3301
+ concat f.check_box(:secret)
3302
+ end
3303
+
3304
+ expected =
3305
+ "<label for='title'>Title:</label> <input name='post[title]' type='text' id='post_title' value='Hello World' /><br/>" \
3306
+ "<label for='body'>Body:</label> <textarea name='post[body]' id='post_body'>\nBack to the hill and over it again!</textarea><br/>" \
3307
+ "<label for='secret'>Secret:</label> <input name='post[secret]' type='hidden' value='0' /><input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /><br/>"
3308
+
3309
+ assert_dom_equal expected, output_buffer
3310
+ end
3311
+
3312
+ def test_form_for_with_labelled_builder_with_nested_fields_for_without_options_hash
3313
+ klass = nil
3314
+
3315
+ form_for(@post, builder: LabelledFormBuilder) do |f|
3316
+ f.fields_for(:comments, Comment.new) do |nested_fields|
3317
+ klass = nested_fields.class
3318
+ ""
3319
+ end
3320
+ end
3321
+
3322
+ assert_equal LabelledFormBuilder, klass
3323
+ end
3324
+
3325
+ def test_form_for_with_labelled_builder_with_nested_fields_for_with_options_hash
3326
+ klass = nil
3327
+
3328
+ form_for(@post, builder: LabelledFormBuilder) do |f|
3329
+ f.fields_for(:comments, Comment.new, index: "foo") do |nested_fields|
3330
+ klass = nested_fields.class
3331
+ ""
3332
+ end
3333
+ end
3334
+
3335
+ assert_equal LabelledFormBuilder, klass
3336
+ end
3337
+
3338
+ def test_form_for_with_labelled_builder_path
3339
+ path = nil
3340
+
3341
+ form_for(@post, builder: LabelledFormBuilder) do |f|
3342
+ path = f.to_partial_path
3343
+ ""
3344
+ end
3345
+
3346
+ assert_equal "labelled_form", path
3347
+ end
3348
+
3349
+ class LabelledFormBuilderSubclass < LabelledFormBuilder; end
3350
+
3351
+ def test_form_for_with_labelled_builder_with_nested_fields_for_with_custom_builder
3352
+ klass = nil
3353
+
3354
+ form_for(@post, builder: LabelledFormBuilder) do |f|
3355
+ f.fields_for(:comments, Comment.new, builder: LabelledFormBuilderSubclass) do |nested_fields|
3356
+ klass = nested_fields.class
3357
+ ""
3358
+ end
3359
+ end
3360
+
3361
+ assert_equal LabelledFormBuilderSubclass, klass
3362
+ end
3363
+
3364
+ def test_form_for_with_html_options_adds_options_to_form_tag
3365
+ form_for(@post, html: { id: "some_form", class: "some_class", multipart: true }) do |f| end
3366
+ expected = whole_form("/posts/123", "some_form", "some_class", method: "patch", multipart: "multipart/form-data")
3367
+
3368
+ assert_dom_equal expected, output_buffer
3369
+ end
3370
+
3371
+ def test_form_for_with_string_url_option
3372
+ form_for(@post, url: "http://www.otherdomain.com") do |f| end
3373
+
3374
+ assert_dom_equal whole_form("http://www.otherdomain.com", "edit_post_123", "edit_post", method: "patch"), output_buffer
3375
+ end
3376
+
3377
+ def test_form_for_with_hash_url_option
3378
+ form_for(@post, url: { controller: "controller", action: "action" }) do |f| end
3379
+
3380
+ assert_equal "controller", @url_for_options[:controller]
3381
+ assert_equal "action", @url_for_options[:action]
3382
+ end
3383
+
3384
+ def test_form_for_with_record_url_option
3385
+ form_for(@post, url: @post) do |f| end
3386
+
3387
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch")
3388
+ assert_dom_equal expected, output_buffer
3389
+ end
3390
+
3391
+ def test_form_for_with_existing_object
3392
+ form_for(@post) do |f| end
3393
+
3394
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch")
3395
+ assert_dom_equal expected, output_buffer
3396
+ end
3397
+
3398
+ def test_form_for_with_new_object
3399
+ post = Post.new
3400
+ post.persisted = false
3401
+ def post.to_key; nil; end
3402
+
3403
+ form_for(post) do |f| end
3404
+
3405
+ expected = whole_form("/posts", "new_post", "new_post")
3406
+ assert_dom_equal expected, output_buffer
3407
+ end
3408
+
3409
+ def test_form_for_with_existing_object_in_list
3410
+ @comment.save
3411
+ form_for([@post, @comment]) {}
3412
+
3413
+ expected = whole_form(post_comment_path(@post, @comment), "edit_comment_1", "edit_comment", method: "patch")
3414
+ assert_dom_equal expected, output_buffer
3415
+ end
3416
+
3417
+ def test_form_for_with_new_object_in_list
3418
+ form_for([@post, @comment]) {}
3419
+
3420
+ expected = whole_form(post_comments_path(@post), "new_comment", "new_comment")
3421
+ assert_dom_equal expected, output_buffer
3422
+ end
3423
+
3424
+ def test_form_for_with_existing_object_and_namespace_in_list
3425
+ @comment.save
3426
+ form_for([:admin, @post, @comment]) {}
3427
+
3428
+ expected = whole_form(admin_post_comment_path(@post, @comment), "edit_comment_1", "edit_comment", method: "patch")
3429
+ assert_dom_equal expected, output_buffer
3430
+ end
3431
+
3432
+ def test_form_for_with_new_object_and_namespace_in_list
3433
+ form_for([:admin, @post, @comment]) {}
3434
+
3435
+ expected = whole_form(admin_post_comments_path(@post), "new_comment", "new_comment")
3436
+ assert_dom_equal expected, output_buffer
3437
+ end
3438
+
3439
+ def test_form_for_with_existing_object_and_custom_url
3440
+ form_for(@post, url: "/super_posts") do |f| end
3441
+
3442
+ expected = whole_form("/super_posts", "edit_post_123", "edit_post", method: "patch")
3443
+ assert_dom_equal expected, output_buffer
3444
+ end
3445
+
3446
+ def test_form_for_with_default_method_as_patch
3447
+ form_for(@post) {}
3448
+ expected = whole_form("/posts/123", "edit_post_123", "edit_post", method: "patch")
3449
+ assert_dom_equal expected, output_buffer
3450
+ end
3451
+
3452
+ def test_form_for_with_data_attributes
3453
+ form_for(@post, data: { behavior: "stuff" }, remote: true) {}
3454
+ assert_match %r|data-behavior="stuff"|, output_buffer
3455
+ assert_match %r|data-remote="true"|, output_buffer
3456
+ end
3457
+
3458
+ def test_fields_for_returns_block_result
3459
+ output = fields_for(Post.new) { |f| "fields" }
3460
+ assert_equal "fields", output
3461
+ end
3462
+
3463
+ def test_form_for_only_instantiates_builder_once
3464
+ initialization_count = 0
3465
+ builder_class = Class.new(ActionView::Helpers::FormBuilder) do
3466
+ define_method :initialize do |*args|
3467
+ super(*args)
3468
+ initialization_count += 1
3469
+ end
3470
+ end
3471
+
3472
+ form_for(@post, builder: builder_class) {}
3473
+ assert_equal 1, initialization_count, "form builder instantiated more than once"
3474
+ end
3475
+
3476
+ private
3477
+
3478
+ def hidden_fields(options = {})
3479
+ method = options[:method]
3480
+
3481
+ if options.fetch(:enforce_utf8, true)
3482
+ txt = %{<input name="utf8" type="hidden" value="&#x2713;" />}.dup
3483
+ else
3484
+ txt = "".dup
3485
+ end
3486
+
3487
+ if method && !%w(get post).include?(method.to_s)
3488
+ txt << %{<input name="_method" type="hidden" value="#{method}" />}
3489
+ end
3490
+
3491
+ txt
3492
+ end
3493
+
3494
+ def form_text(action = "/", id = nil, html_class = nil, remote = nil, multipart = nil, method = nil)
3495
+ txt = %{<form accept-charset="UTF-8" action="#{action}"}.dup
3496
+ txt << %{ enctype="multipart/form-data"} if multipart
3497
+ txt << %{ data-remote="true"} if remote
3498
+ txt << %{ class="#{html_class}"} if html_class
3499
+ txt << %{ id="#{id}"} if id
3500
+ method = method.to_s == "get" ? "get" : "post"
3501
+ txt << %{ method="#{method}">}
3502
+ end
3503
+
3504
+ def whole_form(action = "/", id = nil, html_class = nil, options = {})
3505
+ contents = block_given? ? yield : ""
3506
+
3507
+ method, remote, multipart = options.values_at(:method, :remote, :multipart)
3508
+
3509
+ form_text(action, id, html_class, remote, multipart, method) + hidden_fields(options.slice :method, :enforce_utf8) + contents + "</form>"
3510
+ end
3511
+
3512
+ def protect_against_forgery?
3513
+ false
3514
+ end
3515
+
3516
+ def with_locale(testing_locale = :label)
3517
+ old_locale, I18n.locale = I18n.locale, testing_locale
3518
+ yield
3519
+ ensure
3520
+ I18n.locale = old_locale
3521
+ end
3522
+ end