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,2619 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "models/developer"
5
+ require "models/computer"
6
+ require "models/project"
7
+ require "models/company"
8
+ require "models/contract"
9
+ require "models/topic"
10
+ require "models/reply"
11
+ require "models/category"
12
+ require "models/image"
13
+ require "models/post"
14
+ require "models/author"
15
+ require "models/essay"
16
+ require "models/comment"
17
+ require "models/person"
18
+ require "models/reader"
19
+ require "models/tagging"
20
+ require "models/tag"
21
+ require "models/invoice"
22
+ require "models/line_item"
23
+ require "models/car"
24
+ require "models/bulb"
25
+ require "models/engine"
26
+ require "models/categorization"
27
+ require "models/minivan"
28
+ require "models/speedometer"
29
+ require "models/reference"
30
+ require "models/job"
31
+ require "models/college"
32
+ require "models/student"
33
+ require "models/pirate"
34
+ require "models/ship"
35
+ require "models/ship_part"
36
+ require "models/treasure"
37
+ require "models/parrot"
38
+ require "models/tyre"
39
+ require "models/subscriber"
40
+ require "models/subscription"
41
+ require "models/zine"
42
+ require "models/interest"
43
+
44
+ class HasManyAssociationsTestForReorderWithJoinDependency < ActiveRecord::TestCase
45
+ fixtures :authors, :author_addresses, :posts, :comments
46
+
47
+ def test_should_generate_valid_sql
48
+ author = authors(:david)
49
+ # this can fail on adapters which require ORDER BY expressions to be included in the SELECT expression
50
+ # if the reorder clauses are not correctly handled
51
+ assert author.posts_with_comments_sorted_by_comment_id.where("comments.id > 0").reorder("posts.comments_count DESC", "posts.tags_count DESC").last
52
+ end
53
+ end
54
+
55
+ class HasManyAssociationsTestPrimaryKeys < ActiveRecord::TestCase
56
+ fixtures :authors, :author_addresses, :essays, :subscribers, :subscriptions, :people
57
+
58
+ def test_custom_primary_key_on_new_record_should_fetch_with_query
59
+ subscriber = Subscriber.new(nick: "webster132")
60
+ assert !subscriber.subscriptions.loaded?
61
+
62
+ assert_queries 1 do
63
+ assert_equal 2, subscriber.subscriptions.size
64
+ end
65
+
66
+ assert_equal Subscription.where(subscriber_id: "webster132"), subscriber.subscriptions
67
+ end
68
+
69
+ def test_association_primary_key_on_new_record_should_fetch_with_query
70
+ author = Author.new(name: "David")
71
+ assert !author.essays.loaded?
72
+
73
+ assert_queries 1 do
74
+ assert_equal 1, author.essays.size
75
+ end
76
+
77
+ assert_equal Essay.where(writer_id: "David"), author.essays
78
+ end
79
+
80
+ def test_has_many_custom_primary_key
81
+ david = authors(:david)
82
+ assert_equal Essay.where(writer_id: "David"), david.essays
83
+ end
84
+
85
+ def test_ids_on_unloaded_association_with_custom_primary_key
86
+ david = people(:david)
87
+ assert_equal Essay.where(writer_id: "David").pluck(:id), david.essay_ids
88
+ end
89
+
90
+ def test_ids_on_loaded_association_with_custom_primary_key
91
+ david = people(:david)
92
+ david.essays.load
93
+ assert_equal Essay.where(writer_id: "David").pluck(:id), david.essay_ids
94
+ end
95
+
96
+ def test_has_many_assignment_with_custom_primary_key
97
+ david = people(:david)
98
+
99
+ assert_equal ["A Modest Proposal"], david.essays.map(&:name)
100
+ david.essays = [Essay.create!(name: "Remote Work")]
101
+ assert_equal ["Remote Work"], david.essays.map(&:name)
102
+ end
103
+
104
+ def test_blank_custom_primary_key_on_new_record_should_not_run_queries
105
+ author = Author.new
106
+ assert !author.essays.loaded?
107
+
108
+ assert_queries 0 do
109
+ assert_equal 0, author.essays.size
110
+ end
111
+ end
112
+ end
113
+
114
+ class HasManyAssociationsTest < ActiveRecord::TestCase
115
+ fixtures :accounts, :categories, :companies, :developers, :projects,
116
+ :developers_projects, :topics, :authors, :author_addresses, :comments,
117
+ :posts, :readers, :taggings, :cars, :jobs, :tags,
118
+ :categorizations, :zines, :interests
119
+
120
+ def setup
121
+ Client.destroyed_client_ids.clear
122
+ end
123
+
124
+ def test_sti_subselect_count
125
+ tag = Tag.first
126
+ len = Post.tagged_with(tag.id).limit(10).size
127
+ assert_operator len, :>, 0
128
+ end
129
+
130
+ def test_anonymous_has_many
131
+ developer = Class.new(ActiveRecord::Base) {
132
+ self.table_name = "developers"
133
+ dev = self
134
+
135
+ developer_project = Class.new(ActiveRecord::Base) {
136
+ self.table_name = "developers_projects"
137
+ belongs_to :developer, anonymous_class: dev
138
+ }
139
+ has_many :developer_projects, anonymous_class: developer_project, foreign_key: "developer_id"
140
+ }
141
+ dev = developer.first
142
+ named = Developer.find(dev.id)
143
+ assert_operator dev.developer_projects.count, :>, 0
144
+ assert_equal named.projects.map(&:id).sort,
145
+ dev.developer_projects.map(&:project_id).sort
146
+ end
147
+
148
+ def test_default_scope_on_relations_is_not_cached
149
+ counter = 0
150
+ posts = Class.new(ActiveRecord::Base) {
151
+ self.table_name = "posts"
152
+ self.inheritance_column = "not_there"
153
+ post = self
154
+
155
+ comments = Class.new(ActiveRecord::Base) {
156
+ self.table_name = "comments"
157
+ self.inheritance_column = "not_there"
158
+ belongs_to :post, anonymous_class: post
159
+ default_scope -> {
160
+ counter += 1
161
+ where("id = :inc", inc: counter)
162
+ }
163
+ }
164
+ has_many :comments, anonymous_class: comments, foreign_key: "post_id"
165
+ }
166
+ assert_equal 0, counter
167
+ post = posts.first
168
+ assert_equal 0, counter
169
+ sql = capture_sql { post.comments.to_a }
170
+ post.comments.reset
171
+ assert_not_equal sql, capture_sql { post.comments.to_a }
172
+ end
173
+
174
+ def test_has_many_build_with_options
175
+ college = College.create(name: "UFMT")
176
+ Student.create(active: true, college_id: college.id, name: "Sarah")
177
+
178
+ assert_equal college.students, Student.where(active: true, college_id: college.id)
179
+ end
180
+
181
+ def test_add_record_to_collection_should_change_its_updated_at
182
+ ship = Ship.create(name: "dauntless")
183
+ part = ShipPart.create(name: "cockpit")
184
+ updated_at = part.updated_at
185
+
186
+ travel(1.second) do
187
+ ship.parts << part
188
+ end
189
+
190
+ assert_equal part.ship, ship
191
+ assert_not_equal part.updated_at, updated_at
192
+ end
193
+
194
+ def test_clear_collection_should_not_change_updated_at
195
+ # GH#17161: .clear calls delete_all (and returns the association),
196
+ # which is intended to not touch associated objects's updated_at field
197
+ ship = Ship.create(name: "dauntless")
198
+ part = ShipPart.create(name: "cockpit", ship_id: ship.id)
199
+
200
+ ship.parts.clear
201
+ part.reload
202
+
203
+ assert_nil part.ship
204
+ assert !part.updated_at_changed?
205
+ end
206
+
207
+ def test_create_from_association_should_respect_default_scope
208
+ car = Car.create(name: "honda")
209
+ assert_equal "honda", car.name
210
+
211
+ bulb = Bulb.create
212
+ assert_equal "defaulty", bulb.name
213
+
214
+ bulb = car.bulbs.build
215
+ assert_equal "defaulty", bulb.name
216
+
217
+ bulb = car.bulbs.create
218
+ assert_equal "defaulty", bulb.name
219
+ end
220
+
221
+ def test_build_and_create_from_association_should_respect_passed_attributes_over_default_scope
222
+ car = Car.create(name: "honda")
223
+
224
+ bulb = car.bulbs.build(name: "exotic")
225
+ assert_equal "exotic", bulb.name
226
+
227
+ bulb = car.bulbs.create(name: "exotic")
228
+ assert_equal "exotic", bulb.name
229
+
230
+ bulb = car.awesome_bulbs.build(frickinawesome: false)
231
+ assert_equal false, bulb.frickinawesome
232
+
233
+ bulb = car.awesome_bulbs.create(frickinawesome: false)
234
+ assert_equal false, bulb.frickinawesome
235
+ end
236
+
237
+ def test_build_from_association_should_respect_scope
238
+ author = Author.new
239
+
240
+ post = author.thinking_posts.build
241
+ assert_equal "So I was thinking", post.title
242
+ end
243
+
244
+ def test_create_from_association_with_nil_values_should_work
245
+ car = Car.create(name: "honda")
246
+
247
+ bulb = car.bulbs.new(nil)
248
+ assert_equal "defaulty", bulb.name
249
+
250
+ bulb = car.bulbs.build(nil)
251
+ assert_equal "defaulty", bulb.name
252
+
253
+ bulb = car.bulbs.create(nil)
254
+ assert_equal "defaulty", bulb.name
255
+ end
256
+
257
+ def test_build_from_association_sets_inverse_instance
258
+ car = Car.new(name: "honda")
259
+
260
+ bulb = car.bulbs.build
261
+ assert_equal car, bulb.car
262
+ end
263
+
264
+ def test_do_not_call_callbacks_for_delete_all
265
+ car = Car.create(name: "honda")
266
+ car.funky_bulbs.create!
267
+ assert_equal 1, car.funky_bulbs.count
268
+ assert_nothing_raised { car.reload.funky_bulbs.delete_all }
269
+ assert_equal 0, car.funky_bulbs.count, "bulbs should have been deleted using :delete_all strategy"
270
+ end
271
+
272
+ def test_delete_all_on_association_is_the_same_as_not_loaded
273
+ author = authors :david
274
+ author.thinking_posts.create!(body: "test")
275
+ author.reload
276
+ expected_sql = capture_sql { author.thinking_posts.delete_all }
277
+
278
+ author.thinking_posts.create!(body: "test")
279
+ author.reload
280
+ author.thinking_posts.inspect
281
+ loaded_sql = capture_sql { author.thinking_posts.delete_all }
282
+ assert_equal(expected_sql, loaded_sql)
283
+ end
284
+
285
+ def test_delete_all_on_association_with_nil_dependency_is_the_same_as_not_loaded
286
+ author = authors :david
287
+ author.posts.create!(title: "test", body: "body")
288
+ author.reload
289
+ expected_sql = capture_sql { author.posts.delete_all }
290
+
291
+ author.posts.create!(title: "test", body: "body")
292
+ author.reload
293
+ author.posts.to_a
294
+ loaded_sql = capture_sql { author.posts.delete_all }
295
+ assert_equal(expected_sql, loaded_sql)
296
+ end
297
+
298
+ def test_building_the_associated_object_with_implicit_sti_base_class
299
+ firm = DependentFirm.new
300
+ company = firm.companies.build
301
+ assert_kind_of Company, company, "Expected #{company.class} to be a Company"
302
+ end
303
+
304
+ def test_building_the_associated_object_with_explicit_sti_base_class
305
+ firm = DependentFirm.new
306
+ company = firm.companies.build(type: "Company")
307
+ assert_kind_of Company, company, "Expected #{company.class} to be a Company"
308
+ end
309
+
310
+ def test_building_the_associated_object_with_sti_subclass
311
+ firm = DependentFirm.new
312
+ company = firm.companies.build(type: "Client")
313
+ assert_kind_of Client, company, "Expected #{company.class} to be a Client"
314
+ end
315
+
316
+ def test_building_the_associated_object_with_an_invalid_type
317
+ firm = DependentFirm.new
318
+ assert_raise(ActiveRecord::SubclassNotFound) { firm.companies.build(type: "Invalid") }
319
+ end
320
+
321
+ def test_building_the_associated_object_with_an_unrelated_type
322
+ firm = DependentFirm.new
323
+ assert_raise(ActiveRecord::SubclassNotFound) { firm.companies.build(type: "Account") }
324
+ end
325
+
326
+ test "building the association with an array" do
327
+ speedometer = Speedometer.new(speedometer_id: "a")
328
+ data = [{ name: "first" }, { name: "second" }]
329
+ speedometer.minivans.build(data)
330
+
331
+ assert_equal 2, speedometer.minivans.size
332
+ assert speedometer.save
333
+ assert_equal ["first", "second"], speedometer.reload.minivans.map(&:name)
334
+ end
335
+
336
+ def test_association_keys_bypass_attribute_protection
337
+ car = Car.create(name: "honda")
338
+
339
+ bulb = car.bulbs.new
340
+ assert_equal car.id, bulb.car_id
341
+
342
+ bulb = car.bulbs.new car_id: car.id + 1
343
+ assert_equal car.id, bulb.car_id
344
+
345
+ bulb = car.bulbs.build
346
+ assert_equal car.id, bulb.car_id
347
+
348
+ bulb = car.bulbs.build car_id: car.id + 1
349
+ assert_equal car.id, bulb.car_id
350
+
351
+ bulb = car.bulbs.create
352
+ assert_equal car.id, bulb.car_id
353
+
354
+ bulb = car.bulbs.create car_id: car.id + 1
355
+ assert_equal car.id, bulb.car_id
356
+ end
357
+
358
+ def test_association_protect_foreign_key
359
+ invoice = Invoice.create
360
+
361
+ line_item = invoice.line_items.new
362
+ assert_equal invoice.id, line_item.invoice_id
363
+
364
+ line_item = invoice.line_items.new invoice_id: invoice.id + 1
365
+ assert_equal invoice.id, line_item.invoice_id
366
+
367
+ line_item = invoice.line_items.build
368
+ assert_equal invoice.id, line_item.invoice_id
369
+
370
+ line_item = invoice.line_items.build invoice_id: invoice.id + 1
371
+ assert_equal invoice.id, line_item.invoice_id
372
+
373
+ line_item = invoice.line_items.create
374
+ assert_equal invoice.id, line_item.invoice_id
375
+
376
+ line_item = invoice.line_items.create invoice_id: invoice.id + 1
377
+ assert_equal invoice.id, line_item.invoice_id
378
+ end
379
+
380
+ # When creating objects on the association, we must not do it within a scope (even though it
381
+ # would be convenient), because this would cause that scope to be applied to any callbacks etc.
382
+ def test_build_and_create_should_not_happen_within_scope
383
+ car = cars(:honda)
384
+ scope = car.foo_bulbs.where_values_hash
385
+
386
+ bulb = car.foo_bulbs.build
387
+ assert_not_equal scope, bulb.scope_after_initialize.where_values_hash
388
+
389
+ bulb = car.foo_bulbs.create
390
+ assert_not_equal scope, bulb.scope_after_initialize.where_values_hash
391
+
392
+ bulb = car.foo_bulbs.create!
393
+ assert_not_equal scope, bulb.scope_after_initialize.where_values_hash
394
+ end
395
+
396
+ def test_no_sql_should_be_fired_if_association_already_loaded
397
+ Car.create(name: "honda")
398
+ bulbs = Car.first.bulbs
399
+ bulbs.to_a # to load all instances of bulbs
400
+
401
+ assert_no_queries do
402
+ bulbs.first()
403
+ end
404
+
405
+ assert_no_queries do
406
+ bulbs.second()
407
+ end
408
+
409
+ assert_no_queries do
410
+ bulbs.third()
411
+ end
412
+
413
+ assert_no_queries do
414
+ bulbs.fourth()
415
+ end
416
+
417
+ assert_no_queries do
418
+ bulbs.fifth()
419
+ end
420
+
421
+ assert_no_queries do
422
+ bulbs.forty_two()
423
+ end
424
+
425
+ assert_no_queries do
426
+ bulbs.third_to_last()
427
+ end
428
+
429
+ assert_no_queries do
430
+ bulbs.second_to_last()
431
+ end
432
+
433
+ assert_no_queries do
434
+ bulbs.last()
435
+ end
436
+ end
437
+
438
+ def test_finder_method_with_dirty_target
439
+ company = companies(:first_firm)
440
+ new_clients = []
441
+ assert_no_queries(ignore_none: false) do
442
+ new_clients << company.clients_of_firm.build(name: "Another Client")
443
+ new_clients << company.clients_of_firm.build(name: "Another Client II")
444
+ new_clients << company.clients_of_firm.build(name: "Another Client III")
445
+ end
446
+
447
+ assert_not company.clients_of_firm.loaded?
448
+ assert_queries(1) do
449
+ assert_same new_clients[0], company.clients_of_firm.third
450
+ assert_same new_clients[1], company.clients_of_firm.fourth
451
+ assert_same new_clients[2], company.clients_of_firm.fifth
452
+ assert_same new_clients[0], company.clients_of_firm.third_to_last
453
+ assert_same new_clients[1], company.clients_of_firm.second_to_last
454
+ assert_same new_clients[2], company.clients_of_firm.last
455
+ end
456
+ end
457
+
458
+ def test_finder_bang_method_with_dirty_target
459
+ company = companies(:first_firm)
460
+ new_clients = []
461
+ assert_no_queries(ignore_none: false) do
462
+ new_clients << company.clients_of_firm.build(name: "Another Client")
463
+ new_clients << company.clients_of_firm.build(name: "Another Client II")
464
+ new_clients << company.clients_of_firm.build(name: "Another Client III")
465
+ end
466
+
467
+ assert_not company.clients_of_firm.loaded?
468
+ assert_queries(1) do
469
+ assert_same new_clients[0], company.clients_of_firm.third!
470
+ assert_same new_clients[1], company.clients_of_firm.fourth!
471
+ assert_same new_clients[2], company.clients_of_firm.fifth!
472
+ assert_same new_clients[0], company.clients_of_firm.third_to_last!
473
+ assert_same new_clients[1], company.clients_of_firm.second_to_last!
474
+ assert_same new_clients[2], company.clients_of_firm.last!
475
+ end
476
+ end
477
+
478
+ def test_create_resets_cached_counters
479
+ Reader.delete_all
480
+
481
+ person = Person.create!(first_name: "tenderlove")
482
+
483
+ post = Post.first
484
+
485
+ assert_equal [], person.readers
486
+ assert_nil person.readers.find_by_post_id(post.id)
487
+
488
+ person.readers.create(post_id: post.id)
489
+
490
+ assert_equal 1, person.readers.count
491
+ assert_equal 1, person.readers.length
492
+ assert_equal post, person.readers.first.post
493
+ assert_equal person, person.readers.first.person
494
+ end
495
+
496
+ def test_update_all_respects_association_scope
497
+ person = Person.new
498
+ person.first_name = "Naruto"
499
+ person.references << Reference.new
500
+ person.id = 10
501
+ person.references
502
+ person.save!
503
+ assert_equal 1, person.references.update_all(favourite: true)
504
+ end
505
+
506
+ def test_exists_respects_association_scope
507
+ person = Person.new
508
+ person.first_name = "Sasuke"
509
+ person.references << Reference.new
510
+ person.id = 10
511
+ person.references
512
+ person.save!
513
+ assert_predicate person.references, :exists?
514
+ end
515
+
516
+ def test_counting_with_counter_sql
517
+ assert_equal 3, Firm.first.clients.count
518
+ end
519
+
520
+ def test_counting
521
+ assert_equal 3, Firm.first.plain_clients.count
522
+ end
523
+
524
+ def test_counting_with_single_hash
525
+ assert_equal 1, Firm.first.plain_clients.where(name: "Microsoft").count
526
+ end
527
+
528
+ def test_counting_with_column_name_and_hash
529
+ assert_equal 3, Firm.first.plain_clients.count(:name)
530
+ end
531
+
532
+ def test_counting_with_association_limit
533
+ firm = companies(:first_firm)
534
+ assert_equal firm.limited_clients.length, firm.limited_clients.size
535
+ assert_equal firm.limited_clients.length, firm.limited_clients.count
536
+ end
537
+
538
+ def test_finding
539
+ assert_equal 3, Firm.first.clients.length
540
+ end
541
+
542
+ def test_finding_array_compatibility
543
+ assert_equal 3, Firm.order(:id).find { |f| f.id > 0 }.clients.length
544
+ end
545
+
546
+ def test_find_many_with_merged_options
547
+ assert_equal 1, companies(:first_firm).limited_clients.size
548
+ assert_equal 1, companies(:first_firm).limited_clients.to_a.size
549
+ assert_equal 3, companies(:first_firm).limited_clients.limit(nil).to_a.size
550
+ end
551
+
552
+ def test_find_should_append_to_association_order
553
+ ordered_clients = companies(:first_firm).clients_sorted_desc.order("companies.id")
554
+ assert_equal ["id DESC", "companies.id"], ordered_clients.order_values
555
+ end
556
+
557
+ def test_dynamic_find_should_respect_association_order
558
+ assert_equal companies(:another_first_firm_client), companies(:first_firm).clients_sorted_desc.where("type = 'Client'").first
559
+ assert_equal companies(:another_first_firm_client), companies(:first_firm).clients_sorted_desc.find_by_type("Client")
560
+ end
561
+
562
+ def test_taking
563
+ posts(:other_by_bob).destroy
564
+ assert_equal posts(:misc_by_bob), authors(:bob).posts.take
565
+ assert_equal posts(:misc_by_bob), authors(:bob).posts.take!
566
+ authors(:bob).posts.to_a
567
+ assert_equal posts(:misc_by_bob), authors(:bob).posts.take
568
+ assert_equal posts(:misc_by_bob), authors(:bob).posts.take!
569
+ end
570
+
571
+ def test_taking_not_found
572
+ authors(:bob).posts.delete_all
573
+ assert_raise(ActiveRecord::RecordNotFound) { authors(:bob).posts.take! }
574
+ authors(:bob).posts.to_a
575
+ assert_raise(ActiveRecord::RecordNotFound) { authors(:bob).posts.take! }
576
+ end
577
+
578
+ def test_taking_with_a_number
579
+ klass = Class.new(Author) do
580
+ has_many :posts, -> { order(:id) }
581
+
582
+ def self.name
583
+ "Author"
584
+ end
585
+ end
586
+
587
+ # taking from unloaded Relation
588
+ bob = klass.find(authors(:bob).id)
589
+ new_post = bob.posts.build
590
+ assert_not bob.posts.loaded?
591
+ assert_equal [posts(:misc_by_bob)], bob.posts.take(1)
592
+ assert_equal [posts(:misc_by_bob), posts(:other_by_bob)], bob.posts.take(2)
593
+ assert_equal [posts(:misc_by_bob), posts(:other_by_bob), new_post], bob.posts.take(3)
594
+
595
+ # taking from loaded Relation
596
+ bob.posts.load
597
+ assert bob.posts.loaded?
598
+ assert_equal [posts(:misc_by_bob)], bob.posts.take(1)
599
+ assert_equal [posts(:misc_by_bob), posts(:other_by_bob)], bob.posts.take(2)
600
+ assert_equal [posts(:misc_by_bob), posts(:other_by_bob), new_post], bob.posts.take(3)
601
+ end
602
+
603
+ def test_taking_with_inverse_of
604
+ interests(:woodsmanship).destroy
605
+ interests(:survival).destroy
606
+
607
+ zine = zines(:going_out)
608
+ interest = zine.interests.take
609
+ assert_equal interests(:hunting), interest
610
+ assert_same zine, interest.zine
611
+ end
612
+
613
+ def test_cant_save_has_many_readonly_association
614
+ authors(:david).readonly_comments.each { |c| assert_raise(ActiveRecord::ReadOnlyRecord) { c.save! } }
615
+ authors(:david).readonly_comments.each { |c| assert c.readonly? }
616
+ end
617
+
618
+ def test_finding_default_orders
619
+ assert_equal "Summit", Firm.first.clients.first.name
620
+ end
621
+
622
+ def test_finding_with_different_class_name_and_order
623
+ assert_equal "Apex", Firm.first.clients_sorted_desc.first.name
624
+ end
625
+
626
+ def test_finding_with_foreign_key
627
+ assert_equal "Microsoft", Firm.first.clients_of_firm.first.name
628
+ end
629
+
630
+ def test_finding_with_condition
631
+ assert_equal "Microsoft", Firm.first.clients_like_ms.first.name
632
+ end
633
+
634
+ def test_finding_with_condition_hash
635
+ assert_equal "Microsoft", Firm.first.clients_like_ms_with_hash_conditions.first.name
636
+ end
637
+
638
+ def test_finding_using_primary_key
639
+ assert_equal "Summit", Firm.first.clients_using_primary_key.first.name
640
+ end
641
+
642
+ def test_update_all_on_association_accessed_before_save
643
+ firm = Firm.new(name: "Firm")
644
+ firm.clients << Client.first
645
+ firm.save!
646
+ assert_equal firm.clients.count, firm.clients.update_all(description: "Great!")
647
+ end
648
+
649
+ def test_update_all_on_association_accessed_before_save_with_explicit_foreign_key
650
+ firm = Firm.new(name: "Firm", id: 100)
651
+ firm.clients << Client.first
652
+ firm.save!
653
+ assert_equal firm.clients.count, firm.clients.update_all(description: "Great!")
654
+ end
655
+
656
+ def test_belongs_to_sanity
657
+ c = Client.new
658
+ assert_nil c.firm, "belongs_to failed sanity check on new object"
659
+ end
660
+
661
+ def test_find_ids
662
+ firm = Firm.first
663
+
664
+ assert_raise(ActiveRecord::RecordNotFound) { firm.clients.find }
665
+
666
+ client = firm.clients.find(2)
667
+ assert_kind_of Client, client
668
+
669
+ client_ary = firm.clients.find([2])
670
+ assert_kind_of Array, client_ary
671
+ assert_equal client, client_ary.first
672
+
673
+ client_ary = firm.clients.find(2, 3)
674
+ assert_kind_of Array, client_ary
675
+ assert_equal 2, client_ary.size
676
+ assert_equal client, client_ary.first
677
+
678
+ assert_raise(ActiveRecord::RecordNotFound) { firm.clients.find(2, 99) }
679
+ end
680
+
681
+ def test_find_one_message_on_primary_key
682
+ firm = Firm.first
683
+
684
+ e = assert_raises(ActiveRecord::RecordNotFound) do
685
+ firm.clients.find(0)
686
+ end
687
+ assert_equal 0, e.id
688
+ assert_equal "id", e.primary_key
689
+ assert_equal "Client", e.model
690
+ assert_match (/\ACouldn't find Client with 'id'=0/), e.message
691
+ end
692
+
693
+ def test_find_ids_and_inverse_of
694
+ force_signal37_to_load_all_clients_of_firm
695
+
696
+ assert_predicate companies(:first_firm).clients_of_firm, :loaded?
697
+
698
+ firm = companies(:first_firm)
699
+ client = firm.clients_of_firm.find(3)
700
+ assert_kind_of Client, client
701
+
702
+ client_ary = firm.clients_of_firm.find([3])
703
+ assert_kind_of Array, client_ary
704
+ assert_equal client, client_ary.first
705
+ end
706
+
707
+ def test_find_all
708
+ firm = Firm.first
709
+ assert_equal 3, firm.clients.where("#{QUOTED_TYPE} = 'Client'").to_a.length
710
+ assert_equal 1, firm.clients.where("name = 'Summit'").to_a.length
711
+ end
712
+
713
+ def test_find_each
714
+ firm = companies(:first_firm)
715
+
716
+ assert ! firm.clients.loaded?
717
+
718
+ assert_queries(4) do
719
+ firm.clients.find_each(batch_size: 1) { |c| assert_equal firm.id, c.firm_id }
720
+ end
721
+
722
+ assert ! firm.clients.loaded?
723
+ end
724
+
725
+ def test_find_each_with_conditions
726
+ firm = companies(:first_firm)
727
+
728
+ assert_queries(2) do
729
+ firm.clients.where(name: "Microsoft").find_each(batch_size: 1) do |c|
730
+ assert_equal firm.id, c.firm_id
731
+ assert_equal "Microsoft", c.name
732
+ end
733
+ end
734
+
735
+ assert ! firm.clients.loaded?
736
+ end
737
+
738
+ def test_find_in_batches
739
+ firm = companies(:first_firm)
740
+
741
+ assert ! firm.clients.loaded?
742
+
743
+ assert_queries(2) do
744
+ firm.clients.find_in_batches(batch_size: 2) do |clients|
745
+ clients.each { |c| assert_equal firm.id, c.firm_id }
746
+ end
747
+ end
748
+
749
+ assert ! firm.clients.loaded?
750
+ end
751
+
752
+ def test_find_all_sanitized
753
+ firm = Firm.first
754
+ summit = firm.clients.where("name = 'Summit'").to_a
755
+ assert_equal summit, firm.clients.where("name = ?", "Summit").to_a
756
+ assert_equal summit, firm.clients.where("name = :name", name: "Summit").to_a
757
+ end
758
+
759
+ def test_find_first
760
+ firm = Firm.first
761
+ client2 = Client.find(2)
762
+ assert_equal firm.clients.first, firm.clients.order("id").first
763
+ assert_equal client2, firm.clients.where("#{QUOTED_TYPE} = 'Client'").order("id").first
764
+ end
765
+
766
+ def test_find_first_sanitized
767
+ firm = Firm.first
768
+ client2 = Client.find(2)
769
+ assert_equal client2, firm.clients.where("#{QUOTED_TYPE} = ?", "Client").first
770
+ assert_equal client2, firm.clients.where("#{QUOTED_TYPE} = :type", type: "Client").first
771
+ end
772
+
773
+ def test_find_first_after_reset_scope
774
+ firm = Firm.first
775
+ collection = firm.clients
776
+
777
+ original_object = collection.first
778
+ assert_same original_object, collection.first, "Expected second call to #first to cache the same object"
779
+
780
+ # It should return a different object, since the association has been reloaded
781
+ assert_not_same original_object, firm.clients.first, "Expected #first to return a new object"
782
+ end
783
+
784
+ def test_find_first_after_reset
785
+ firm = Firm.first
786
+ collection = firm.clients
787
+
788
+ original_object = collection.first
789
+ assert_same original_object, collection.first, "Expected second call to #first to cache the same object"
790
+ collection.reset
791
+
792
+ # It should return a different object, since the association has been reloaded
793
+ assert_not_same original_object, collection.first, "Expected #first after #reset to return a new object"
794
+ end
795
+
796
+ def test_find_first_after_reload
797
+ firm = Firm.first
798
+ collection = firm.clients
799
+
800
+ original_object = collection.first
801
+ assert_same original_object, collection.first, "Expected second call to #first to cache the same object"
802
+ collection.reload
803
+
804
+ # It should return a different object, since the association has been reloaded
805
+ assert_not_same original_object, collection.first, "Expected #first after #reload to return a new object"
806
+ end
807
+
808
+ def test_find_all_with_include_and_conditions
809
+ assert_nothing_raised do
810
+ Developer.all.merge!(joins: :audit_logs, where: { "audit_logs.message" => nil, :name => "Smith" }).to_a
811
+ end
812
+ end
813
+
814
+ def test_find_in_collection
815
+ assert_equal Client.find(2).name, companies(:first_firm).clients.find(2).name
816
+ assert_raise(ActiveRecord::RecordNotFound) { companies(:first_firm).clients.find(6) }
817
+ end
818
+
819
+ def test_find_grouped
820
+ all_clients_of_firm1 = Client.all.merge!(where: "firm_id = 1").to_a
821
+ grouped_clients_of_firm1 = Client.all.merge!(where: "firm_id = 1", group: "firm_id", select: "firm_id, count(id) as clients_count").to_a
822
+ assert_equal 3, all_clients_of_firm1.size
823
+ assert_equal 1, grouped_clients_of_firm1.size
824
+ end
825
+
826
+ def test_find_scoped_grouped
827
+ assert_equal 1, companies(:first_firm).clients_grouped_by_firm_id.size
828
+ assert_equal 1, companies(:first_firm).clients_grouped_by_firm_id.length
829
+ assert_equal 3, companies(:first_firm).clients_grouped_by_name.size
830
+ assert_equal 3, companies(:first_firm).clients_grouped_by_name.length
831
+ end
832
+
833
+ def test_find_scoped_grouped_having
834
+ assert_equal 1, authors(:david).popular_grouped_posts.length
835
+ assert_equal 0, authors(:mary).popular_grouped_posts.length
836
+ end
837
+
838
+ def test_default_select
839
+ assert_equal Comment.column_names.sort, posts(:welcome).comments.first.attributes.keys.sort
840
+ end
841
+
842
+ def test_select_query_method
843
+ assert_equal ["id", "body"], posts(:welcome).comments.select(:id, :body).first.attributes.keys
844
+ end
845
+
846
+ def test_select_with_block
847
+ assert_equal [1], posts(:welcome).comments.select { |c| c.id == 1 }.map(&:id)
848
+ end
849
+
850
+ def test_select_with_block_and_dirty_target
851
+ assert_equal 2, posts(:welcome).comments.select { true }.size
852
+ posts(:welcome).comments.build
853
+ assert_equal 3, posts(:welcome).comments.select { true }.size
854
+ end
855
+
856
+ def test_select_without_foreign_key
857
+ assert_equal companies(:first_firm).accounts.first.credit_limit, companies(:first_firm).accounts.select(:credit_limit).first.credit_limit
858
+ end
859
+
860
+ def test_adding
861
+ force_signal37_to_load_all_clients_of_firm
862
+
863
+ assert_predicate companies(:first_firm).clients_of_firm, :loaded?
864
+
865
+ natural = Client.new("name" => "Natural Company")
866
+ companies(:first_firm).clients_of_firm << natural
867
+ assert_equal 3, companies(:first_firm).clients_of_firm.size # checking via the collection
868
+ assert_equal 3, companies(:first_firm).clients_of_firm.reload.size # checking using the db
869
+ assert_equal natural, companies(:first_firm).clients_of_firm.last
870
+ end
871
+
872
+ def test_adding_using_create
873
+ first_firm = companies(:first_firm)
874
+ assert_equal 3, first_firm.plain_clients.size
875
+ first_firm.plain_clients.create(name: "Natural Company")
876
+ assert_equal 4, first_firm.plain_clients.length
877
+ assert_equal 4, first_firm.plain_clients.size
878
+ end
879
+
880
+ def test_create_with_bang_on_has_many_when_parent_is_new_raises
881
+ error = assert_raise(ActiveRecord::RecordNotSaved) do
882
+ firm = Firm.new
883
+ firm.plain_clients.create! name: "Whoever"
884
+ end
885
+
886
+ assert_equal "You cannot call create unless the parent is saved", error.message
887
+ end
888
+
889
+ def test_regular_create_on_has_many_when_parent_is_new_raises
890
+ error = assert_raise(ActiveRecord::RecordNotSaved) do
891
+ firm = Firm.new
892
+ firm.plain_clients.create name: "Whoever"
893
+ end
894
+
895
+ assert_equal "You cannot call create unless the parent is saved", error.message
896
+ end
897
+
898
+ def test_create_with_bang_on_has_many_raises_when_record_not_saved
899
+ assert_raise(ActiveRecord::RecordInvalid) do
900
+ firm = Firm.first
901
+ firm.plain_clients.create!
902
+ end
903
+ end
904
+
905
+ def test_create_with_bang_on_habtm_when_parent_is_new_raises
906
+ error = assert_raise(ActiveRecord::RecordNotSaved) do
907
+ Developer.new("name" => "Aredridel").projects.create!
908
+ end
909
+
910
+ assert_equal "You cannot call create unless the parent is saved", error.message
911
+ end
912
+
913
+ def test_adding_a_mismatch_class
914
+ assert_raise(ActiveRecord::AssociationTypeMismatch) { companies(:first_firm).clients_of_firm << nil }
915
+ assert_raise(ActiveRecord::AssociationTypeMismatch) { companies(:first_firm).clients_of_firm << 1 }
916
+ assert_raise(ActiveRecord::AssociationTypeMismatch) { companies(:first_firm).clients_of_firm << Topic.find(1) }
917
+ end
918
+
919
+ def test_adding_a_collection
920
+ force_signal37_to_load_all_clients_of_firm
921
+
922
+ assert_predicate companies(:first_firm).clients_of_firm, :loaded?
923
+
924
+ companies(:first_firm).clients_of_firm.concat([Client.new("name" => "Natural Company"), Client.new("name" => "Apple")])
925
+ assert_equal 4, companies(:first_firm).clients_of_firm.size
926
+ assert_equal 4, companies(:first_firm).clients_of_firm.reload.size
927
+ end
928
+
929
+ def test_transactions_when_adding_to_persisted
930
+ good = Client.new(name: "Good")
931
+ bad = Client.new(name: "Bad", raise_on_save: true)
932
+
933
+ begin
934
+ companies(:first_firm).clients_of_firm.concat(good, bad)
935
+ rescue Client::RaisedOnSave
936
+ end
937
+
938
+ assert_not_includes companies(:first_firm).clients_of_firm.reload, good
939
+ end
940
+
941
+ def test_transactions_when_adding_to_new_record
942
+ assert_no_queries(ignore_none: false) do
943
+ firm = Firm.new
944
+ firm.clients_of_firm.concat(Client.new("name" => "Natural Company"))
945
+ end
946
+ end
947
+
948
+ def test_inverse_on_before_validate
949
+ firm = companies(:first_firm)
950
+ assert_queries(1) do
951
+ firm.clients_of_firm << Client.new("name" => "Natural Company")
952
+ end
953
+ end
954
+
955
+ def test_new_aliased_to_build
956
+ company = companies(:first_firm)
957
+ new_client = assert_no_queries(ignore_none: false) { company.clients_of_firm.new("name" => "Another Client") }
958
+ assert !company.clients_of_firm.loaded?
959
+
960
+ assert_equal "Another Client", new_client.name
961
+ assert !new_client.persisted?
962
+ assert_equal new_client, company.clients_of_firm.last
963
+ end
964
+
965
+ def test_build
966
+ company = companies(:first_firm)
967
+ new_client = assert_no_queries(ignore_none: false) { company.clients_of_firm.build("name" => "Another Client") }
968
+ assert !company.clients_of_firm.loaded?
969
+
970
+ assert_equal "Another Client", new_client.name
971
+ assert !new_client.persisted?
972
+ assert_equal new_client, company.clients_of_firm.last
973
+ end
974
+
975
+ def test_collection_size_after_building
976
+ company = companies(:first_firm) # company already has one client
977
+ company.clients_of_firm.build("name" => "Another Client")
978
+ company.clients_of_firm.build("name" => "Yet Another Client")
979
+ assert_equal 4, company.clients_of_firm.size
980
+ assert_equal 4, company.clients_of_firm.uniq.size
981
+ end
982
+
983
+ def test_collection_not_empty_after_building
984
+ company = companies(:first_firm)
985
+ assert_predicate company.contracts, :empty?
986
+ company.contracts.build
987
+ assert_not_predicate company.contracts, :empty?
988
+ end
989
+
990
+ def test_collection_size_twice_for_regressions
991
+ post = posts(:thinking)
992
+ assert_equal 0, post.readers.size
993
+ # This test needs a post that has no readers, we assert it to ensure it holds,
994
+ # but need to reload the post because the very call to #size hides the bug.
995
+ post.reload
996
+ post.readers.build
997
+ size1 = post.readers.size
998
+ size2 = post.readers.size
999
+ assert_equal size1, size2
1000
+ end
1001
+
1002
+ def test_build_many
1003
+ company = companies(:first_firm)
1004
+ new_clients = assert_no_queries(ignore_none: false) { company.clients_of_firm.build([{ "name" => "Another Client" }, { "name" => "Another Client II" }]) }
1005
+ assert_equal 2, new_clients.size
1006
+ end
1007
+
1008
+ def test_build_followed_by_save_does_not_load_target
1009
+ companies(:first_firm).clients_of_firm.build("name" => "Another Client")
1010
+ assert companies(:first_firm).save
1011
+ assert !companies(:first_firm).clients_of_firm.loaded?
1012
+ end
1013
+
1014
+ def test_build_without_loading_association
1015
+ first_topic = topics(:first)
1016
+ Reply.column_names
1017
+
1018
+ assert_equal 1, first_topic.replies.length
1019
+
1020
+ assert_no_queries do
1021
+ first_topic.replies.build(title: "Not saved", content: "Superstars")
1022
+ assert_equal 2, first_topic.replies.size
1023
+ end
1024
+
1025
+ assert_equal 2, first_topic.replies.to_ary.size
1026
+ end
1027
+
1028
+ def test_build_via_block
1029
+ company = companies(:first_firm)
1030
+ new_client = assert_no_queries(ignore_none: false) { company.clients_of_firm.build { |client| client.name = "Another Client" } }
1031
+ assert !company.clients_of_firm.loaded?
1032
+
1033
+ assert_equal "Another Client", new_client.name
1034
+ assert !new_client.persisted?
1035
+ assert_equal new_client, company.clients_of_firm.last
1036
+ end
1037
+
1038
+ def test_build_many_via_block
1039
+ company = companies(:first_firm)
1040
+ new_clients = assert_no_queries(ignore_none: false) do
1041
+ company.clients_of_firm.build([{ "name" => "Another Client" }, { "name" => "Another Client II" }]) do |client|
1042
+ client.name = "changed"
1043
+ end
1044
+ end
1045
+
1046
+ assert_equal 2, new_clients.size
1047
+ assert_equal "changed", new_clients.first.name
1048
+ assert_equal "changed", new_clients.last.name
1049
+ end
1050
+
1051
+ def test_create_without_loading_association
1052
+ first_firm = companies(:first_firm)
1053
+ Firm.column_names
1054
+ Client.column_names
1055
+
1056
+ assert_equal 2, first_firm.clients_of_firm.size
1057
+ first_firm.clients_of_firm.reset
1058
+
1059
+ assert_queries(1) do
1060
+ first_firm.clients_of_firm.create(name: "Superstars")
1061
+ end
1062
+
1063
+ assert_equal 3, first_firm.clients_of_firm.size
1064
+ end
1065
+
1066
+ def test_create
1067
+ force_signal37_to_load_all_clients_of_firm
1068
+
1069
+ assert_predicate companies(:first_firm).clients_of_firm, :loaded?
1070
+
1071
+ new_client = companies(:first_firm).clients_of_firm.create("name" => "Another Client")
1072
+ assert new_client.persisted?
1073
+ assert_equal new_client, companies(:first_firm).clients_of_firm.last
1074
+ assert_equal new_client, companies(:first_firm).clients_of_firm.reload.last
1075
+ end
1076
+
1077
+ def test_create_many
1078
+ companies(:first_firm).clients_of_firm.create([{ "name" => "Another Client" }, { "name" => "Another Client II" }])
1079
+ assert_equal 4, companies(:first_firm).clients_of_firm.reload.size
1080
+ end
1081
+
1082
+ def test_create_followed_by_save_does_not_load_target
1083
+ companies(:first_firm).clients_of_firm.create("name" => "Another Client")
1084
+ assert companies(:first_firm).save
1085
+ assert !companies(:first_firm).clients_of_firm.loaded?
1086
+ end
1087
+
1088
+ def test_deleting
1089
+ force_signal37_to_load_all_clients_of_firm
1090
+
1091
+ assert_predicate companies(:first_firm).clients_of_firm, :loaded?
1092
+
1093
+ companies(:first_firm).clients_of_firm.delete(companies(:first_firm).clients_of_firm.first)
1094
+ assert_equal 1, companies(:first_firm).clients_of_firm.size
1095
+ assert_equal 1, companies(:first_firm).clients_of_firm.reload.size
1096
+ end
1097
+
1098
+ def test_deleting_before_save
1099
+ new_firm = Firm.new("name" => "A New Firm, Inc.")
1100
+ new_client = new_firm.clients_of_firm.build("name" => "Another Client")
1101
+ assert_equal 1, new_firm.clients_of_firm.size
1102
+ new_firm.clients_of_firm.delete(new_client)
1103
+ assert_equal 0, new_firm.clients_of_firm.size
1104
+ end
1105
+
1106
+ def test_has_many_without_counter_cache_option
1107
+ # Ship has a conventionally named `treasures_count` column, but the counter_cache
1108
+ # option is not given on the association.
1109
+ ship = Ship.create(name: "Countless", treasures_count: 10)
1110
+
1111
+ assert_not Ship.reflect_on_association(:treasures).has_cached_counter?
1112
+
1113
+ # Count should come from sql count() of treasures rather than treasures_count attribute
1114
+ assert_equal ship.treasures.size, 0
1115
+
1116
+ assert_no_difference lambda { ship.reload.treasures_count }, "treasures_count should not be changed" do
1117
+ ship.treasures.create(name: "Gold")
1118
+ end
1119
+
1120
+ assert_no_difference lambda { ship.reload.treasures_count }, "treasures_count should not be changed" do
1121
+ ship.treasures.destroy_all
1122
+ end
1123
+ end
1124
+
1125
+ def test_deleting_updates_counter_cache
1126
+ topic = Topic.order("id ASC").first
1127
+ assert_equal topic.replies.to_a.size, topic.replies_count
1128
+
1129
+ topic.replies.delete(topic.replies.first)
1130
+ topic.reload
1131
+ assert_equal topic.replies.to_a.size, topic.replies_count
1132
+ end
1133
+
1134
+ def test_counter_cache_updates_in_memory_after_concat
1135
+ topic = Topic.create title: "Zoom-zoom-zoom"
1136
+
1137
+ topic.replies << Reply.create(title: "re: zoom", content: "speedy quick!")
1138
+ assert_equal 1, topic.replies_count
1139
+ assert_equal 1, topic.replies.size
1140
+ assert_equal 1, topic.reload.replies.size
1141
+ end
1142
+
1143
+ def test_counter_cache_updates_in_memory_after_create
1144
+ topic = Topic.create title: "Zoom-zoom-zoom"
1145
+
1146
+ topic.replies.create!(title: "re: zoom", content: "speedy quick!")
1147
+ assert_equal 1, topic.replies_count
1148
+ assert_equal 1, topic.replies.size
1149
+ assert_equal 1, topic.reload.replies.size
1150
+ end
1151
+
1152
+ def test_counter_cache_updates_in_memory_after_create_with_array
1153
+ topic = Topic.create title: "Zoom-zoom-zoom"
1154
+
1155
+ topic.replies.create!([
1156
+ { title: "re: zoom", content: "speedy quick!" },
1157
+ { title: "re: zoom 2", content: "OMG lol!" },
1158
+ ])
1159
+ assert_equal 2, topic.replies_count
1160
+ assert_equal 2, topic.replies.size
1161
+ assert_equal 2, topic.reload.replies.size
1162
+ end
1163
+
1164
+ def test_pushing_association_updates_counter_cache
1165
+ topic = Topic.order("id ASC").first
1166
+ reply = Reply.create!
1167
+
1168
+ assert_difference "topic.reload.replies_count", 1 do
1169
+ topic.replies << reply
1170
+ end
1171
+ end
1172
+
1173
+ def test_deleting_updates_counter_cache_without_dependent_option
1174
+ post = posts(:welcome)
1175
+
1176
+ assert_difference "post.reload.tags_count", -1 do
1177
+ post.taggings.delete(post.taggings.first)
1178
+ end
1179
+ end
1180
+
1181
+ def test_deleting_updates_counter_cache_with_dependent_delete_all
1182
+ post = posts(:welcome)
1183
+ post.update_columns(taggings_with_delete_all_count: post.tags_count)
1184
+
1185
+ assert_difference "post.reload.taggings_with_delete_all_count", -1 do
1186
+ post.taggings_with_delete_all.delete(post.taggings_with_delete_all.first)
1187
+ end
1188
+ end
1189
+
1190
+ def test_deleting_updates_counter_cache_with_dependent_destroy
1191
+ post = posts(:welcome)
1192
+ post.update_columns(taggings_with_destroy_count: post.tags_count)
1193
+
1194
+ assert_difference "post.reload.taggings_with_destroy_count", -1 do
1195
+ post.taggings_with_destroy.delete(post.taggings_with_destroy.first)
1196
+ end
1197
+ end
1198
+
1199
+ def test_calling_empty_with_counter_cache
1200
+ post = posts(:welcome)
1201
+ assert_queries(0) do
1202
+ assert_not post.comments.empty?
1203
+ end
1204
+ end
1205
+
1206
+ def test_custom_named_counter_cache
1207
+ topic = topics(:first)
1208
+
1209
+ assert_difference "topic.reload.replies_count", -1 do
1210
+ topic.approved_replies.clear
1211
+ end
1212
+ end
1213
+
1214
+ def test_calling_update_attributes_on_id_changes_the_counter_cache
1215
+ topic = Topic.order("id ASC").first
1216
+ original_count = topic.replies.to_a.size
1217
+ assert_equal original_count, topic.replies_count
1218
+
1219
+ first_reply = topic.replies.first
1220
+ first_reply.update_attributes(parent_id: nil)
1221
+ assert_equal original_count - 1, topic.reload.replies_count
1222
+
1223
+ first_reply.update_attributes(parent_id: topic.id)
1224
+ assert_equal original_count, topic.reload.replies_count
1225
+ end
1226
+
1227
+ def test_calling_update_attributes_changing_ids_doesnt_change_counter_cache
1228
+ topic1 = Topic.find(1)
1229
+ topic2 = Topic.find(3)
1230
+ original_count1 = topic1.replies.to_a.size
1231
+ original_count2 = topic2.replies.to_a.size
1232
+
1233
+ reply1 = topic1.replies.first
1234
+ reply2 = topic2.replies.first
1235
+
1236
+ reply1.update_attributes(parent_id: topic2.id)
1237
+ assert_equal original_count1 - 1, topic1.reload.replies_count
1238
+ assert_equal original_count2 + 1, topic2.reload.replies_count
1239
+
1240
+ reply2.update_attributes(parent_id: topic1.id)
1241
+ assert_equal original_count1, topic1.reload.replies_count
1242
+ assert_equal original_count2, topic2.reload.replies_count
1243
+ end
1244
+
1245
+ def test_deleting_a_collection
1246
+ force_signal37_to_load_all_clients_of_firm
1247
+
1248
+ assert_predicate companies(:first_firm).clients_of_firm, :loaded?
1249
+
1250
+ companies(:first_firm).clients_of_firm.create("name" => "Another Client")
1251
+ assert_equal 3, companies(:first_firm).clients_of_firm.size
1252
+ companies(:first_firm).clients_of_firm.delete([companies(:first_firm).clients_of_firm[0], companies(:first_firm).clients_of_firm[1], companies(:first_firm).clients_of_firm[2]])
1253
+ assert_equal 0, companies(:first_firm).clients_of_firm.size
1254
+ assert_equal 0, companies(:first_firm).clients_of_firm.reload.size
1255
+ end
1256
+
1257
+ def test_delete_all
1258
+ force_signal37_to_load_all_clients_of_firm
1259
+
1260
+ assert_predicate companies(:first_firm).clients_of_firm, :loaded?
1261
+
1262
+ companies(:first_firm).dependent_clients_of_firm.create("name" => "Another Client")
1263
+ clients = companies(:first_firm).dependent_clients_of_firm.to_a
1264
+ assert_equal 3, clients.count
1265
+
1266
+ assert_difference "Client.count", -(clients.count) do
1267
+ companies(:first_firm).dependent_clients_of_firm.delete_all
1268
+ end
1269
+ end
1270
+
1271
+ def test_delete_all_with_not_yet_loaded_association_collection
1272
+ force_signal37_to_load_all_clients_of_firm
1273
+
1274
+ assert_predicate companies(:first_firm).clients_of_firm, :loaded?
1275
+
1276
+ companies(:first_firm).clients_of_firm.create("name" => "Another Client")
1277
+ assert_equal 3, companies(:first_firm).clients_of_firm.size
1278
+ companies(:first_firm).clients_of_firm.reset
1279
+ companies(:first_firm).clients_of_firm.delete_all
1280
+ assert_equal 0, companies(:first_firm).clients_of_firm.size
1281
+ assert_equal 0, companies(:first_firm).clients_of_firm.reload.size
1282
+ end
1283
+
1284
+ def test_transaction_when_deleting_persisted
1285
+ good = Client.new(name: "Good")
1286
+ bad = Client.new(name: "Bad", raise_on_destroy: true)
1287
+
1288
+ companies(:first_firm).clients_of_firm = [good, bad]
1289
+
1290
+ begin
1291
+ companies(:first_firm).clients_of_firm.destroy(good, bad)
1292
+ rescue Client::RaisedOnDestroy
1293
+ end
1294
+
1295
+ assert_equal [good, bad], companies(:first_firm).clients_of_firm.reload
1296
+ end
1297
+
1298
+ def test_transaction_when_deleting_new_record
1299
+ assert_no_queries(ignore_none: false) do
1300
+ firm = Firm.new
1301
+ client = Client.new("name" => "New Client")
1302
+ firm.clients_of_firm << client
1303
+ firm.clients_of_firm.destroy(client)
1304
+ end
1305
+ end
1306
+
1307
+ def test_clearing_an_association_collection
1308
+ firm = companies(:first_firm)
1309
+ client_id = firm.clients_of_firm.first.id
1310
+ assert_equal 2, firm.clients_of_firm.size
1311
+
1312
+ firm.clients_of_firm.clear
1313
+
1314
+ assert_equal 0, firm.clients_of_firm.size
1315
+ assert_equal 0, firm.clients_of_firm.reload.size
1316
+ assert_equal [], Client.destroyed_client_ids[firm.id]
1317
+
1318
+ # Should not be destroyed since the association is not dependent.
1319
+ assert_nothing_raised do
1320
+ assert_nil Client.find(client_id).firm
1321
+ end
1322
+ end
1323
+
1324
+ def test_clearing_updates_counter_cache
1325
+ topic = Topic.first
1326
+
1327
+ assert_difference "topic.reload.replies_count", -1 do
1328
+ topic.replies.clear
1329
+ end
1330
+ end
1331
+
1332
+ def test_clearing_updates_counter_cache_when_inverse_counter_cache_is_a_symbol_with_dependent_destroy
1333
+ car = Car.first
1334
+ car.engines.create!
1335
+
1336
+ assert_difference "car.reload.engines_count", -1 do
1337
+ car.engines.clear
1338
+ end
1339
+ end
1340
+
1341
+ def test_clearing_a_dependent_association_collection
1342
+ firm = companies(:first_firm)
1343
+ client_id = firm.dependent_clients_of_firm.first.id
1344
+ assert_equal 2, firm.dependent_clients_of_firm.size
1345
+ assert_equal 1, Client.find_by_id(client_id).client_of
1346
+
1347
+ # :delete_all is called on each client since the dependent options is :destroy
1348
+ firm.dependent_clients_of_firm.clear
1349
+
1350
+ assert_equal 0, firm.dependent_clients_of_firm.size
1351
+ assert_equal 0, firm.dependent_clients_of_firm.reload.size
1352
+ assert_equal [], Client.destroyed_client_ids[firm.id]
1353
+
1354
+ # Should be destroyed since the association is dependent.
1355
+ assert_nil Client.find_by_id(client_id)
1356
+ end
1357
+
1358
+ def test_delete_all_with_option_delete_all
1359
+ firm = companies(:first_firm)
1360
+ client_id = firm.dependent_clients_of_firm.first.id
1361
+ firm.dependent_clients_of_firm.delete_all(:delete_all)
1362
+ assert_nil Client.find_by_id(client_id)
1363
+ end
1364
+
1365
+ def test_delete_all_accepts_limited_parameters
1366
+ firm = companies(:first_firm)
1367
+ assert_raise(ArgumentError) do
1368
+ firm.dependent_clients_of_firm.delete_all(:destroy)
1369
+ end
1370
+ end
1371
+
1372
+ def test_clearing_an_exclusively_dependent_association_collection
1373
+ firm = companies(:first_firm)
1374
+ client_id = firm.exclusively_dependent_clients_of_firm.first.id
1375
+ assert_equal 2, firm.exclusively_dependent_clients_of_firm.size
1376
+
1377
+ assert_equal [], Client.destroyed_client_ids[firm.id]
1378
+
1379
+ # :exclusively_dependent means each client is deleted directly from
1380
+ # the database without looping through them calling destroy.
1381
+ firm.exclusively_dependent_clients_of_firm.clear
1382
+
1383
+ assert_equal 0, firm.exclusively_dependent_clients_of_firm.size
1384
+ assert_equal 0, firm.exclusively_dependent_clients_of_firm.reload.size
1385
+ # no destroy-filters should have been called
1386
+ assert_equal [], Client.destroyed_client_ids[firm.id]
1387
+
1388
+ # Should be destroyed since the association is exclusively dependent.
1389
+ assert_nil Client.find_by_id(client_id)
1390
+ end
1391
+
1392
+ def test_dependent_association_respects_optional_conditions_on_delete
1393
+ firm = companies(:odegy)
1394
+ Client.create(client_of: firm.id, name: "BigShot Inc.")
1395
+ Client.create(client_of: firm.id, name: "SmallTime Inc.")
1396
+ # only one of two clients is included in the association due to the :conditions key
1397
+ assert_equal 2, Client.where(client_of: firm.id).size
1398
+ assert_equal 1, firm.dependent_conditional_clients_of_firm.size
1399
+ firm.destroy
1400
+ # only the correctly associated client should have been deleted
1401
+ assert_equal 1, Client.where(client_of: firm.id).size
1402
+ end
1403
+
1404
+ def test_dependent_association_respects_optional_sanitized_conditions_on_delete
1405
+ firm = companies(:odegy)
1406
+ Client.create(client_of: firm.id, name: "BigShot Inc.")
1407
+ Client.create(client_of: firm.id, name: "SmallTime Inc.")
1408
+ # only one of two clients is included in the association due to the :conditions key
1409
+ assert_equal 2, Client.where(client_of: firm.id).size
1410
+ assert_equal 1, firm.dependent_sanitized_conditional_clients_of_firm.size
1411
+ firm.destroy
1412
+ # only the correctly associated client should have been deleted
1413
+ assert_equal 1, Client.where(client_of: firm.id).size
1414
+ end
1415
+
1416
+ def test_dependent_association_respects_optional_hash_conditions_on_delete
1417
+ firm = companies(:odegy)
1418
+ Client.create(client_of: firm.id, name: "BigShot Inc.")
1419
+ Client.create(client_of: firm.id, name: "SmallTime Inc.")
1420
+ # only one of two clients is included in the association due to the :conditions key
1421
+ assert_equal 2, Client.where(client_of: firm.id).size
1422
+ assert_equal 1, firm.dependent_hash_conditional_clients_of_firm.size
1423
+ firm.destroy
1424
+ # only the correctly associated client should have been deleted
1425
+ assert_equal 1, Client.where(client_of: firm.id).size
1426
+ end
1427
+
1428
+ def test_delete_all_association_with_primary_key_deletes_correct_records
1429
+ firm = Firm.first
1430
+ # break the vanilla firm_id foreign key
1431
+ assert_equal 3, firm.clients.count
1432
+ firm.clients.first.update_columns(firm_id: nil)
1433
+ assert_equal 2, firm.clients.reload.count
1434
+ assert_equal 2, firm.clients_using_primary_key_with_delete_all.count
1435
+ old_record = firm.clients_using_primary_key_with_delete_all.first
1436
+ firm = Firm.first
1437
+ firm.destroy
1438
+ assert_nil Client.find_by_id(old_record.id)
1439
+ end
1440
+
1441
+ def test_creation_respects_hash_condition
1442
+ ms_client = companies(:first_firm).clients_like_ms_with_hash_conditions.build
1443
+
1444
+ assert ms_client.save
1445
+ assert_equal "Microsoft", ms_client.name
1446
+
1447
+ another_ms_client = companies(:first_firm).clients_like_ms_with_hash_conditions.create
1448
+
1449
+ assert another_ms_client.persisted?
1450
+ assert_equal "Microsoft", another_ms_client.name
1451
+ end
1452
+
1453
+ def test_clearing_without_initial_access
1454
+ firm = companies(:first_firm)
1455
+
1456
+ firm.clients_of_firm.clear
1457
+
1458
+ assert_equal 0, firm.clients_of_firm.size
1459
+ assert_equal 0, firm.clients_of_firm.reload.size
1460
+ end
1461
+
1462
+ def test_deleting_a_item_which_is_not_in_the_collection
1463
+ force_signal37_to_load_all_clients_of_firm
1464
+
1465
+ assert_predicate companies(:first_firm).clients_of_firm, :loaded?
1466
+
1467
+ summit = Client.find_by_name("Summit")
1468
+ companies(:first_firm).clients_of_firm.delete(summit)
1469
+ assert_equal 2, companies(:first_firm).clients_of_firm.size
1470
+ assert_equal 2, companies(:first_firm).clients_of_firm.reload.size
1471
+ assert_equal 2, summit.client_of
1472
+ end
1473
+
1474
+ def test_deleting_by_integer_id
1475
+ david = Developer.find(1)
1476
+
1477
+ assert_difference "david.projects.count", -1 do
1478
+ assert_equal 1, david.projects.delete(1).size
1479
+ end
1480
+
1481
+ assert_equal 1, david.projects.size
1482
+ end
1483
+
1484
+ def test_deleting_by_string_id
1485
+ david = Developer.find(1)
1486
+
1487
+ assert_difference "david.projects.count", -1 do
1488
+ assert_equal 1, david.projects.delete("1").size
1489
+ end
1490
+
1491
+ assert_equal 1, david.projects.size
1492
+ end
1493
+
1494
+ def test_deleting_self_type_mismatch
1495
+ david = Developer.find(1)
1496
+ david.projects.reload
1497
+ assert_raise(ActiveRecord::AssociationTypeMismatch) { david.projects.delete(Project.find(1).developers) }
1498
+ end
1499
+
1500
+ def test_destroying
1501
+ force_signal37_to_load_all_clients_of_firm
1502
+
1503
+ assert_predicate companies(:first_firm).clients_of_firm, :loaded?
1504
+
1505
+ assert_difference "Client.count", -1 do
1506
+ companies(:first_firm).clients_of_firm.destroy(companies(:first_firm).clients_of_firm.first)
1507
+ end
1508
+
1509
+ assert_equal 1, companies(:first_firm).reload.clients_of_firm.size
1510
+ assert_equal 1, companies(:first_firm).clients_of_firm.reload.size
1511
+ end
1512
+
1513
+ def test_destroying_by_integer_id
1514
+ force_signal37_to_load_all_clients_of_firm
1515
+
1516
+ assert_predicate companies(:first_firm).clients_of_firm, :loaded?
1517
+
1518
+ assert_difference "Client.count", -1 do
1519
+ companies(:first_firm).clients_of_firm.destroy(companies(:first_firm).clients_of_firm.first.id)
1520
+ end
1521
+
1522
+ assert_equal 1, companies(:first_firm).reload.clients_of_firm.size
1523
+ assert_equal 1, companies(:first_firm).clients_of_firm.reload.size
1524
+ end
1525
+
1526
+ def test_destroying_by_string_id
1527
+ force_signal37_to_load_all_clients_of_firm
1528
+
1529
+ assert_predicate companies(:first_firm).clients_of_firm, :loaded?
1530
+
1531
+ assert_difference "Client.count", -1 do
1532
+ companies(:first_firm).clients_of_firm.destroy(companies(:first_firm).clients_of_firm.first.id.to_s)
1533
+ end
1534
+
1535
+ assert_equal 1, companies(:first_firm).reload.clients_of_firm.size
1536
+ assert_equal 1, companies(:first_firm).clients_of_firm.reload.size
1537
+ end
1538
+
1539
+ def test_destroying_a_collection
1540
+ force_signal37_to_load_all_clients_of_firm
1541
+
1542
+ assert_predicate companies(:first_firm).clients_of_firm, :loaded?
1543
+
1544
+ companies(:first_firm).clients_of_firm.create("name" => "Another Client")
1545
+ assert_equal 3, companies(:first_firm).clients_of_firm.size
1546
+
1547
+ assert_difference "Client.count", -2 do
1548
+ companies(:first_firm).clients_of_firm.destroy([companies(:first_firm).clients_of_firm[0], companies(:first_firm).clients_of_firm[1]])
1549
+ end
1550
+
1551
+ assert_equal 1, companies(:first_firm).reload.clients_of_firm.size
1552
+ assert_equal 1, companies(:first_firm).clients_of_firm.reload.size
1553
+ end
1554
+
1555
+ def test_destroy_all
1556
+ force_signal37_to_load_all_clients_of_firm
1557
+
1558
+ assert_predicate companies(:first_firm).clients_of_firm, :loaded?
1559
+
1560
+ clients = companies(:first_firm).clients_of_firm.to_a
1561
+ assert !clients.empty?, "37signals has clients after load"
1562
+ destroyed = companies(:first_firm).clients_of_firm.destroy_all
1563
+ assert_equal clients.sort_by(&:id), destroyed.sort_by(&:id)
1564
+ assert destroyed.all?(&:frozen?), "destroyed clients should be frozen"
1565
+ assert companies(:first_firm).clients_of_firm.empty?, "37signals has no clients after destroy all"
1566
+ assert companies(:first_firm).clients_of_firm.reload.empty?, "37signals has no clients after destroy all and refresh"
1567
+ end
1568
+
1569
+ def test_dependence
1570
+ firm = companies(:first_firm)
1571
+ assert_equal 3, firm.clients.size
1572
+ firm.destroy
1573
+ assert Client.all.merge!(where: "firm_id=#{firm.id}").to_a.empty?
1574
+ end
1575
+
1576
+ def test_dependence_for_associations_with_hash_condition
1577
+ david = authors(:david)
1578
+ assert_difference("Post.count", -1) { assert david.destroy }
1579
+ end
1580
+
1581
+ def test_destroy_dependent_when_deleted_from_association
1582
+ firm = Firm.first
1583
+ assert_equal 3, firm.clients.size
1584
+
1585
+ client = firm.clients.first
1586
+ firm.clients.delete(client)
1587
+
1588
+ assert_raise(ActiveRecord::RecordNotFound) { Client.find(client.id) }
1589
+ assert_raise(ActiveRecord::RecordNotFound) { firm.clients.find(client.id) }
1590
+ assert_equal 2, firm.clients.size
1591
+ end
1592
+
1593
+ def test_three_levels_of_dependence
1594
+ topic = Topic.create "title" => "neat and simple"
1595
+ reply = topic.replies.create "title" => "neat and simple", "content" => "still digging it"
1596
+ reply.replies.create "title" => "neat and simple", "content" => "ain't complaining"
1597
+
1598
+ assert_nothing_raised { topic.destroy }
1599
+ end
1600
+
1601
+ def test_dependence_with_transaction_support_on_failure
1602
+ firm = companies(:first_firm)
1603
+ clients = firm.clients
1604
+ assert_equal 3, clients.length
1605
+ clients.last.instance_eval { def overwrite_to_raise() raise "Trigger rollback" end }
1606
+
1607
+ firm.destroy rescue "do nothing"
1608
+
1609
+ assert_equal 3, Client.all.merge!(where: "firm_id=#{firm.id}").to_a.size
1610
+ end
1611
+
1612
+ def test_dependence_on_account
1613
+ num_accounts = Account.count
1614
+ companies(:first_firm).destroy
1615
+ assert_equal num_accounts - 1, Account.count
1616
+ end
1617
+
1618
+ def test_depends_and_nullify
1619
+ num_accounts = Account.count
1620
+
1621
+ core = companies(:quails_core)
1622
+ assert_equal accounts(:quails_core_account), core.account
1623
+ assert_equal companies(:leetsoft, :jadedpixel), core.companies
1624
+ core.destroy
1625
+ assert_nil accounts(:quails_core_account).reload.firm_id
1626
+ assert_nil companies(:leetsoft).reload.client_of
1627
+ assert_nil companies(:jadedpixel).reload.client_of
1628
+
1629
+ assert_equal num_accounts, Account.count
1630
+ end
1631
+
1632
+ def test_restrict_with_exception
1633
+ firm = RestrictedWithExceptionFirm.create!(name: "restrict")
1634
+ firm.companies.create(name: "child")
1635
+
1636
+ assert !firm.companies.empty?
1637
+ assert_raise(ActiveRecord::DeleteRestrictionError) { firm.destroy }
1638
+ assert RestrictedWithExceptionFirm.exists?(name: "restrict")
1639
+ assert firm.companies.exists?(name: "child")
1640
+ end
1641
+
1642
+ def test_restrict_with_error
1643
+ firm = RestrictedWithErrorFirm.create!(name: "restrict")
1644
+ firm.companies.create(name: "child")
1645
+
1646
+ assert !firm.companies.empty?
1647
+
1648
+ firm.destroy
1649
+
1650
+ assert !firm.errors.empty?
1651
+
1652
+ assert_equal "Cannot delete record because dependent companies exist", firm.errors[:base].first
1653
+ assert RestrictedWithErrorFirm.exists?(name: "restrict")
1654
+ assert firm.companies.exists?(name: "child")
1655
+ end
1656
+
1657
+ def test_restrict_with_error_with_locale
1658
+ I18n.backend = I18n::Backend::Simple.new
1659
+ I18n.backend.store_translations "en", activerecord: { attributes: { restricted_with_error_firm: { companies: "client companies" } } }
1660
+ firm = RestrictedWithErrorFirm.create!(name: "restrict")
1661
+ firm.companies.create(name: "child")
1662
+
1663
+ assert !firm.companies.empty?
1664
+
1665
+ firm.destroy
1666
+
1667
+ assert !firm.errors.empty?
1668
+
1669
+ assert_equal "Cannot delete record because dependent client companies exist", firm.errors[:base].first
1670
+ assert RestrictedWithErrorFirm.exists?(name: "restrict")
1671
+ assert firm.companies.exists?(name: "child")
1672
+ ensure
1673
+ I18n.backend.reload!
1674
+ end
1675
+
1676
+ def test_included_in_collection
1677
+ assert_equal true, companies(:first_firm).clients.include?(Client.find(2))
1678
+ end
1679
+
1680
+ def test_included_in_collection_for_new_records
1681
+ client = Client.create(name: "Persisted")
1682
+ assert_nil client.client_of
1683
+ assert_equal false, Firm.new.clients_of_firm.include?(client),
1684
+ "includes a client that does not belong to any firm"
1685
+ end
1686
+
1687
+ def test_adding_array_and_collection
1688
+ assert_nothing_raised { Firm.first.clients + Firm.all.last.clients }
1689
+ end
1690
+
1691
+ def test_replace_with_less
1692
+ firm = Firm.first
1693
+ firm.clients = [companies(:first_client)]
1694
+ assert firm.save, "Could not save firm"
1695
+ firm.reload
1696
+ assert_equal 1, firm.clients.length
1697
+ end
1698
+
1699
+ def test_replace_with_less_and_dependent_nullify
1700
+ num_companies = Company.count
1701
+ companies(:quails_core).companies = []
1702
+ assert_equal num_companies, Company.count
1703
+ end
1704
+
1705
+ def test_replace_with_new
1706
+ firm = Firm.first
1707
+ firm.clients = [companies(:second_client), Client.new("name" => "New Client")]
1708
+ firm.save
1709
+ firm.reload
1710
+ assert_equal 2, firm.clients.length
1711
+ assert_equal false, firm.clients.include?(:first_client)
1712
+ end
1713
+
1714
+ def test_replace_failure
1715
+ firm = companies(:first_firm)
1716
+ account = Account.new
1717
+ orig_accounts = firm.accounts.to_a
1718
+
1719
+ assert !account.valid?
1720
+ assert !orig_accounts.empty?
1721
+ error = assert_raise ActiveRecord::RecordNotSaved do
1722
+ firm.accounts = [account]
1723
+ end
1724
+
1725
+ assert_equal orig_accounts, firm.accounts
1726
+ assert_equal "Failed to replace accounts because one or more of the " \
1727
+ "new records could not be saved.", error.message
1728
+ end
1729
+
1730
+ def test_replace_with_same_content
1731
+ firm = Firm.first
1732
+ firm.clients = []
1733
+ firm.save
1734
+
1735
+ assert_queries(0, ignore_none: true) do
1736
+ firm.clients = []
1737
+ end
1738
+
1739
+ assert_equal [], firm.send("clients=", [])
1740
+ end
1741
+
1742
+ def test_transactions_when_replacing_on_persisted
1743
+ good = Client.new(name: "Good")
1744
+ bad = Client.new(name: "Bad", raise_on_save: true)
1745
+
1746
+ companies(:first_firm).clients_of_firm = [good]
1747
+
1748
+ begin
1749
+ companies(:first_firm).clients_of_firm = [bad]
1750
+ rescue Client::RaisedOnSave
1751
+ end
1752
+
1753
+ assert_equal [good], companies(:first_firm).clients_of_firm.reload
1754
+ end
1755
+
1756
+ def test_transactions_when_replacing_on_new_record
1757
+ assert_no_queries(ignore_none: false) do
1758
+ firm = Firm.new
1759
+ firm.clients_of_firm = [Client.new("name" => "New Client")]
1760
+ end
1761
+ end
1762
+
1763
+ def test_get_ids
1764
+ assert_equal [companies(:first_client).id, companies(:second_client).id, companies(:another_first_firm_client).id], companies(:first_firm).client_ids
1765
+ end
1766
+
1767
+ def test_get_ids_for_loaded_associations
1768
+ company = companies(:first_firm)
1769
+ company.clients.reload
1770
+ assert_queries(0) do
1771
+ company.client_ids
1772
+ company.client_ids
1773
+ end
1774
+ end
1775
+
1776
+ def test_get_ids_for_unloaded_associations_does_not_load_them
1777
+ company = companies(:first_firm)
1778
+ assert !company.clients.loaded?
1779
+ assert_equal [companies(:first_client).id, companies(:second_client).id, companies(:another_first_firm_client).id], company.client_ids
1780
+ assert !company.clients.loaded?
1781
+ end
1782
+
1783
+ def test_counter_cache_on_unloaded_association
1784
+ car = Car.create(name: "My AppliCar")
1785
+ assert_equal car.engines.size, 0
1786
+ end
1787
+
1788
+ def test_get_ids_ignores_include_option
1789
+ assert_equal [readers(:michael_welcome).id], posts(:welcome).readers_with_person_ids
1790
+ end
1791
+
1792
+ def test_get_ids_for_ordered_association
1793
+ assert_equal [companies(:another_first_firm_client).id, companies(:second_client).id, companies(:first_client).id], companies(:first_firm).clients_ordered_by_name_ids
1794
+ end
1795
+
1796
+ def test_get_ids_for_association_on_new_record_does_not_try_to_find_records
1797
+ Company.columns # Load schema information so we don't query below
1798
+ Contract.columns # if running just this test.
1799
+
1800
+ company = Company.new
1801
+ assert_queries(0) do
1802
+ company.contract_ids
1803
+ end
1804
+
1805
+ assert_equal [], company.contract_ids
1806
+ end
1807
+
1808
+ def test_set_ids_for_association_on_new_record_applies_association_correctly
1809
+ contract_a = Contract.create!
1810
+ contract_b = Contract.create!
1811
+ Contract.create! # another contract
1812
+ company = Company.new(name: "Some Company")
1813
+
1814
+ company.contract_ids = [contract_a.id, contract_b.id]
1815
+ assert_equal [contract_a.id, contract_b.id], company.contract_ids
1816
+ assert_equal [contract_a, contract_b], company.contracts
1817
+
1818
+ company.save!
1819
+ assert_equal company, contract_a.reload.company
1820
+ assert_equal company, contract_b.reload.company
1821
+ end
1822
+
1823
+ def test_assign_ids_ignoring_blanks
1824
+ firm = Firm.create!(name: "Apple")
1825
+ firm.client_ids = [companies(:first_client).id, nil, companies(:second_client).id, ""]
1826
+ firm.save!
1827
+
1828
+ assert_equal 2, firm.clients.reload.size
1829
+ assert_equal true, firm.clients.include?(companies(:second_client))
1830
+ end
1831
+
1832
+ def test_get_ids_for_through
1833
+ assert_equal [comments(:eager_other_comment1).id], authors(:mary).comment_ids
1834
+ end
1835
+
1836
+ def test_modifying_a_through_a_has_many_should_raise
1837
+ [
1838
+ lambda { authors(:mary).comment_ids = [comments(:greetings).id, comments(:more_greetings).id] },
1839
+ lambda { authors(:mary).comments = [comments(:greetings), comments(:more_greetings)] },
1840
+ lambda { authors(:mary).comments << Comment.create!(body: "Yay", post_id: 424242) },
1841
+ lambda { authors(:mary).comments.delete(authors(:mary).comments.first) },
1842
+ ].each { |block| assert_raise(ActiveRecord::HasManyThroughCantAssociateThroughHasOneOrManyReflection, &block) }
1843
+ end
1844
+
1845
+ def test_dynamic_find_should_respect_association_order_for_through
1846
+ assert_equal Comment.find(10), authors(:david).comments_desc.where("comments.type = 'SpecialComment'").first
1847
+ assert_equal Comment.find(10), authors(:david).comments_desc.find_by_type("SpecialComment")
1848
+ end
1849
+
1850
+ def test_has_many_through_respects_hash_conditions
1851
+ assert_equal authors(:david).hello_posts, authors(:david).hello_posts_with_hash_conditions
1852
+ assert_equal authors(:david).hello_post_comments, authors(:david).hello_post_comments_with_hash_conditions
1853
+ end
1854
+
1855
+ def test_include_uses_array_include_after_loaded
1856
+ firm = companies(:first_firm)
1857
+ firm.clients.load_target
1858
+
1859
+ client = firm.clients.first
1860
+
1861
+ assert_no_queries do
1862
+ assert firm.clients.loaded?
1863
+ assert_equal true, firm.clients.include?(client)
1864
+ end
1865
+ end
1866
+
1867
+ def test_include_checks_if_record_exists_if_target_not_loaded
1868
+ firm = companies(:first_firm)
1869
+ client = firm.clients.first
1870
+
1871
+ firm.reload
1872
+ assert ! firm.clients.loaded?
1873
+ assert_queries(1) do
1874
+ assert_equal true, firm.clients.include?(client)
1875
+ end
1876
+ assert ! firm.clients.loaded?
1877
+ end
1878
+
1879
+ def test_include_returns_false_for_non_matching_record_to_verify_scoping
1880
+ firm = companies(:first_firm)
1881
+ client = Client.create!(name: "Not Associated")
1882
+
1883
+ assert ! firm.clients.loaded?
1884
+ assert_equal false, firm.clients.include?(client)
1885
+ end
1886
+
1887
+ def test_calling_first_nth_or_last_on_association_should_not_load_association
1888
+ firm = companies(:first_firm)
1889
+ firm.clients.first
1890
+ firm.clients.second
1891
+ firm.clients.last
1892
+ assert !firm.clients.loaded?
1893
+ end
1894
+
1895
+ def test_calling_first_or_last_on_loaded_association_should_not_fetch_with_query
1896
+ firm = companies(:first_firm)
1897
+ firm.clients.load_target
1898
+ assert firm.clients.loaded?
1899
+
1900
+ assert_no_queries(ignore_none: false) do
1901
+ firm.clients.first
1902
+ assert_equal 2, firm.clients.first(2).size
1903
+ firm.clients.last
1904
+ assert_equal 2, firm.clients.last(2).size
1905
+ end
1906
+ end
1907
+
1908
+ def test_calling_first_or_last_on_existing_record_with_build_should_load_association
1909
+ firm = companies(:first_firm)
1910
+ firm.clients.build(name: "Foo")
1911
+ assert !firm.clients.loaded?
1912
+
1913
+ assert_queries 1 do
1914
+ firm.clients.first
1915
+ firm.clients.second
1916
+ firm.clients.last
1917
+ end
1918
+
1919
+ assert firm.clients.loaded?
1920
+ end
1921
+
1922
+ def test_calling_first_nth_or_last_on_existing_record_with_create_should_not_load_association
1923
+ firm = companies(:first_firm)
1924
+ firm.clients.create(name: "Foo")
1925
+ assert !firm.clients.loaded?
1926
+
1927
+ assert_queries 3 do
1928
+ firm.clients.first
1929
+ firm.clients.second
1930
+ firm.clients.last
1931
+ end
1932
+
1933
+ assert !firm.clients.loaded?
1934
+ end
1935
+
1936
+ def test_calling_first_nth_or_last_on_new_record_should_not_run_queries
1937
+ firm = Firm.new
1938
+
1939
+ assert_no_queries do
1940
+ firm.clients.first
1941
+ firm.clients.second
1942
+ firm.clients.last
1943
+ end
1944
+ end
1945
+
1946
+ def test_calling_first_or_last_with_integer_on_association_should_not_load_association
1947
+ firm = companies(:first_firm)
1948
+ firm.clients.create(name: "Foo")
1949
+ assert !firm.clients.loaded?
1950
+
1951
+ assert_queries 2 do
1952
+ firm.clients.first(2)
1953
+ firm.clients.last(2)
1954
+ end
1955
+
1956
+ assert !firm.clients.loaded?
1957
+ end
1958
+
1959
+ def test_calling_many_should_count_instead_of_loading_association
1960
+ firm = companies(:first_firm)
1961
+ assert_queries(1) do
1962
+ firm.clients.many? # use count query
1963
+ end
1964
+ assert !firm.clients.loaded?
1965
+ end
1966
+
1967
+ def test_calling_many_on_loaded_association_should_not_use_query
1968
+ firm = companies(:first_firm)
1969
+ firm.clients.load # force load
1970
+ assert_no_queries { assert firm.clients.many? }
1971
+ end
1972
+
1973
+ def test_calling_many_should_defer_to_collection_if_using_a_block
1974
+ firm = companies(:first_firm)
1975
+ assert_queries(1) do
1976
+ firm.clients.expects(:size).never
1977
+ firm.clients.many? { true }
1978
+ end
1979
+ assert firm.clients.loaded?
1980
+ end
1981
+
1982
+ def test_calling_many_should_return_false_if_none_or_one
1983
+ firm = companies(:another_firm)
1984
+ assert !firm.clients_like_ms.many?
1985
+ assert_equal 0, firm.clients_like_ms.size
1986
+
1987
+ firm = companies(:first_firm)
1988
+ assert !firm.limited_clients.many?
1989
+ assert_equal 1, firm.limited_clients.size
1990
+ end
1991
+
1992
+ def test_calling_many_should_return_true_if_more_than_one
1993
+ firm = companies(:first_firm)
1994
+ assert firm.clients.many?
1995
+ assert_equal 3, firm.clients.size
1996
+ end
1997
+
1998
+ def test_calling_none_should_count_instead_of_loading_association
1999
+ firm = companies(:first_firm)
2000
+ assert_queries(1) do
2001
+ firm.clients.none? # use count query
2002
+ end
2003
+ assert !firm.clients.loaded?
2004
+ end
2005
+
2006
+ def test_calling_none_on_loaded_association_should_not_use_query
2007
+ firm = companies(:first_firm)
2008
+ firm.clients.load # force load
2009
+ assert_no_queries { assert ! firm.clients.none? }
2010
+ end
2011
+
2012
+ def test_calling_none_should_defer_to_collection_if_using_a_block
2013
+ firm = companies(:first_firm)
2014
+ assert_queries(1) do
2015
+ firm.clients.expects(:size).never
2016
+ firm.clients.none? { true }
2017
+ end
2018
+ assert firm.clients.loaded?
2019
+ end
2020
+
2021
+ def test_calling_none_should_return_true_if_none
2022
+ firm = companies(:another_firm)
2023
+ assert firm.clients_like_ms.none?
2024
+ assert_equal 0, firm.clients_like_ms.size
2025
+ end
2026
+
2027
+ def test_calling_none_should_return_false_if_any
2028
+ firm = companies(:first_firm)
2029
+ assert !firm.limited_clients.none?
2030
+ assert_equal 1, firm.limited_clients.size
2031
+ end
2032
+
2033
+ def test_calling_one_should_count_instead_of_loading_association
2034
+ firm = companies(:first_firm)
2035
+ assert_queries(1) do
2036
+ firm.clients.one? # use count query
2037
+ end
2038
+ assert !firm.clients.loaded?
2039
+ end
2040
+
2041
+ def test_calling_one_on_loaded_association_should_not_use_query
2042
+ firm = companies(:first_firm)
2043
+ firm.clients.load # force load
2044
+ assert_no_queries { assert ! firm.clients.one? }
2045
+ end
2046
+
2047
+ def test_calling_one_should_defer_to_collection_if_using_a_block
2048
+ firm = companies(:first_firm)
2049
+ assert_queries(1) do
2050
+ firm.clients.expects(:size).never
2051
+ firm.clients.one? { true }
2052
+ end
2053
+ assert firm.clients.loaded?
2054
+ end
2055
+
2056
+ def test_calling_one_should_return_false_if_zero
2057
+ firm = companies(:another_firm)
2058
+ assert ! firm.clients_like_ms.one?
2059
+ assert_equal 0, firm.clients_like_ms.size
2060
+ end
2061
+
2062
+ def test_calling_one_should_return_true_if_one
2063
+ firm = companies(:first_firm)
2064
+ assert firm.limited_clients.one?
2065
+ assert_equal 1, firm.limited_clients.size
2066
+ end
2067
+
2068
+ def test_calling_one_should_return_false_if_more_than_one
2069
+ firm = companies(:first_firm)
2070
+ assert ! firm.clients.one?
2071
+ assert_equal 3, firm.clients.size
2072
+ end
2073
+
2074
+ def test_joins_with_namespaced_model_should_use_correct_type
2075
+ old = ActiveRecord::Base.store_full_sti_class
2076
+ ActiveRecord::Base.store_full_sti_class = true
2077
+
2078
+ firm = Namespaced::Firm.create(name: "Some Company")
2079
+ firm.clients.create(name: "Some Client")
2080
+
2081
+ stats = Namespaced::Firm.all.merge!(
2082
+ select: "#{Namespaced::Firm.table_name}.id, COUNT(#{Namespaced::Client.table_name}.id) AS num_clients",
2083
+ joins: :clients,
2084
+ group: "#{Namespaced::Firm.table_name}.id"
2085
+ ).find firm.id
2086
+ assert_equal 1, stats.num_clients.to_i
2087
+ ensure
2088
+ ActiveRecord::Base.store_full_sti_class = old
2089
+ end
2090
+
2091
+ def test_association_proxy_transaction_method_starts_transaction_in_association_class
2092
+ Comment.expects(:transaction)
2093
+ Post.first.comments.transaction do
2094
+ # nothing
2095
+ end
2096
+ end
2097
+
2098
+ def test_sending_new_to_association_proxy_should_have_same_effect_as_calling_new
2099
+ client_association = companies(:first_firm).clients
2100
+ assert_equal client_association.new.attributes, client_association.send(:new).attributes
2101
+ end
2102
+
2103
+ def test_creating_using_primary_key
2104
+ firm = Firm.first
2105
+ client = firm.clients_using_primary_key.create!(name: "test")
2106
+ assert_equal firm.name, client.firm_name
2107
+ end
2108
+
2109
+ def test_defining_has_many_association_with_delete_all_dependency_lazily_evaluates_target_class
2110
+ ActiveRecord::Reflection::AssociationReflection.any_instance.expects(:class_name).never
2111
+ class_eval(<<-EOF, __FILE__, __LINE__ + 1)
2112
+ class DeleteAllModel < ActiveRecord::Base
2113
+ has_many :nonentities, :dependent => :delete_all
2114
+ end
2115
+ EOF
2116
+ end
2117
+
2118
+ def test_defining_has_many_association_with_nullify_dependency_lazily_evaluates_target_class
2119
+ ActiveRecord::Reflection::AssociationReflection.any_instance.expects(:class_name).never
2120
+ class_eval(<<-EOF, __FILE__, __LINE__ + 1)
2121
+ class NullifyModel < ActiveRecord::Base
2122
+ has_many :nonentities, :dependent => :nullify
2123
+ end
2124
+ EOF
2125
+ end
2126
+
2127
+ def test_attributes_are_being_set_when_initialized_from_has_many_association_with_where_clause
2128
+ new_comment = posts(:welcome).comments.where(body: "Some content").build
2129
+ assert_equal new_comment.body, "Some content"
2130
+ end
2131
+
2132
+ def test_attributes_are_being_set_when_initialized_from_has_many_association_with_multiple_where_clauses
2133
+ new_comment = posts(:welcome).comments.where(body: "Some content").where(type: "SpecialComment").build
2134
+ assert_equal new_comment.body, "Some content"
2135
+ assert_equal new_comment.type, "SpecialComment"
2136
+ assert_equal new_comment.post_id, posts(:welcome).id
2137
+ end
2138
+
2139
+ def test_include_method_in_has_many_association_should_return_true_for_instance_added_with_build
2140
+ post = Post.new
2141
+ comment = post.comments.build
2142
+ assert_equal true, post.comments.include?(comment)
2143
+ end
2144
+
2145
+ def test_load_target_respects_protected_attributes
2146
+ topic = Topic.create!
2147
+ reply = topic.replies.create(title: "reply 1")
2148
+ reply.approved = false
2149
+ reply.save!
2150
+
2151
+ # Save with a different object instance, so the instance that's still held
2152
+ # in topic.relies doesn't know about the changed attribute.
2153
+ reply2 = Reply.find(reply.id)
2154
+ reply2.approved = true
2155
+ reply2.save!
2156
+
2157
+ # Force loading the collection from the db. This will merge the existing
2158
+ # object (reply) with what gets loaded from the db (which includes the
2159
+ # changed approved attribute). approved is a protected attribute, so if mass
2160
+ # assignment is used, it won't get updated and will still be false.
2161
+ first = topic.replies.to_a.first
2162
+ assert_equal reply.id, first.id
2163
+ assert_equal true, first.approved?
2164
+ end
2165
+
2166
+ def test_to_a_should_dup_target
2167
+ ary = topics(:first).replies.to_a
2168
+ target = topics(:first).replies.target
2169
+
2170
+ assert_not_equal target.object_id, ary.object_id
2171
+ end
2172
+
2173
+ def test_merging_with_custom_attribute_writer
2174
+ bulb = Bulb.new(color: "red")
2175
+ assert_equal "RED!", bulb.color
2176
+
2177
+ car = Car.create!
2178
+ car.bulbs << bulb
2179
+
2180
+ assert_equal "RED!", car.bulbs.to_a.first.color
2181
+ end
2182
+
2183
+ def test_abstract_class_with_polymorphic_has_many
2184
+ post = SubStiPost.create! title: "fooo", body: "baa"
2185
+ tagging = Tagging.create! taggable: post
2186
+ assert_equal [tagging], post.taggings
2187
+ end
2188
+
2189
+ def test_with_polymorphic_has_many_with_custom_columns_name
2190
+ post = Post.create! title: "foo", body: "bar"
2191
+ image = Image.create!
2192
+
2193
+ post.images << image
2194
+
2195
+ assert_equal [image], post.images
2196
+ end
2197
+
2198
+ def test_build_with_polymorphic_has_many_does_not_allow_to_override_type_and_id
2199
+ welcome = posts(:welcome)
2200
+ tagging = welcome.taggings.build(taggable_id: 99, taggable_type: "ShouldNotChange")
2201
+
2202
+ assert_equal welcome.id, tagging.taggable_id
2203
+ assert_equal "Post", tagging.taggable_type
2204
+ end
2205
+
2206
+ def test_build_from_polymorphic_association_sets_inverse_instance
2207
+ post = Post.new
2208
+ tagging = post.taggings.build
2209
+
2210
+ assert_equal post, tagging.taggable
2211
+ end
2212
+
2213
+ def test_dont_call_save_callbacks_twice_on_has_many
2214
+ firm = companies(:first_firm)
2215
+ contract = firm.contracts.create!
2216
+
2217
+ assert_equal 1, contract.hi_count
2218
+ assert_equal 1, contract.bye_count
2219
+ end
2220
+
2221
+ def test_association_attributes_are_available_to_after_initialize
2222
+ car = Car.create(name: "honda")
2223
+ bulb = car.bulbs.build
2224
+
2225
+ assert_equal car.id, bulb.attributes_after_initialize["car_id"]
2226
+ end
2227
+
2228
+ def test_attributes_are_set_when_initialized_from_has_many_null_relationship
2229
+ car = Car.new name: "honda"
2230
+ bulb = car.bulbs.where(name: "headlight").first_or_initialize
2231
+ assert_equal "headlight", bulb.name
2232
+ end
2233
+
2234
+ def test_attributes_are_set_when_initialized_from_polymorphic_has_many_null_relationship
2235
+ post = Post.new title: "title", body: "bar"
2236
+ tag = Tag.create!(name: "foo")
2237
+
2238
+ tagging = post.taggings.where(tag: tag).first_or_initialize
2239
+
2240
+ assert_equal tag.id, tagging.tag_id
2241
+ assert_equal "Post", tagging.taggable_type
2242
+ end
2243
+
2244
+ def test_replace
2245
+ car = Car.create(name: "honda")
2246
+ bulb1 = car.bulbs.create
2247
+ bulb2 = Bulb.create
2248
+
2249
+ assert_equal [bulb1], car.bulbs
2250
+ car.bulbs.replace([bulb2])
2251
+ assert_equal [bulb2], car.bulbs
2252
+ assert_equal [bulb2], car.reload.bulbs
2253
+ end
2254
+
2255
+ def test_replace_returns_target
2256
+ car = Car.create(name: "honda")
2257
+ bulb1 = car.bulbs.create
2258
+ bulb2 = car.bulbs.create
2259
+ bulb3 = Bulb.create
2260
+
2261
+ assert_equal [bulb1, bulb2], car.bulbs
2262
+ result = car.bulbs.replace([bulb3, bulb1])
2263
+ assert_equal [bulb1, bulb3], car.bulbs
2264
+ assert_equal [bulb1, bulb3], result
2265
+ end
2266
+
2267
+ def test_collection_association_with_private_kernel_method
2268
+ firm = companies(:first_firm)
2269
+ assert_equal [accounts(:signals37)], firm.accounts.open
2270
+ end
2271
+
2272
+ test "first_or_initialize adds the record to the association" do
2273
+ firm = Firm.create! name: "omg"
2274
+ client = firm.clients_of_firm.first_or_initialize
2275
+ assert_equal [client], firm.clients_of_firm
2276
+ end
2277
+
2278
+ test "first_or_create adds the record to the association" do
2279
+ firm = Firm.create! name: "omg"
2280
+ firm.clients_of_firm.load_target
2281
+ client = firm.clients_of_firm.first_or_create name: "lol"
2282
+ assert_equal [client], firm.clients_of_firm
2283
+ assert_equal [client], firm.reload.clients_of_firm
2284
+ end
2285
+
2286
+ test "delete_all, when not loaded, doesn't load the records" do
2287
+ post = posts(:welcome)
2288
+
2289
+ assert post.taggings_with_delete_all.count > 0
2290
+ assert !post.taggings_with_delete_all.loaded?
2291
+
2292
+ # 2 queries: one DELETE and another to update the counter cache
2293
+ assert_queries(2) do
2294
+ post.taggings_with_delete_all.delete_all
2295
+ end
2296
+ end
2297
+
2298
+ test "has many associations on new records use null relations" do
2299
+ post = Post.new
2300
+
2301
+ assert_no_queries(ignore_none: false) do
2302
+ assert_equal [], post.comments
2303
+ assert_equal [], post.comments.where(body: "omg")
2304
+ assert_equal [], post.comments.pluck(:body)
2305
+ assert_equal 0, post.comments.sum(:id)
2306
+ assert_equal 0, post.comments.count
2307
+ end
2308
+ end
2309
+
2310
+ test "collection proxy respects default scope" do
2311
+ author = authors(:mary)
2312
+ assert !author.first_posts.exists?
2313
+ end
2314
+
2315
+ test "association with extend option" do
2316
+ post = posts(:welcome)
2317
+ assert_equal "lifo", post.comments_with_extend.author
2318
+ assert_equal "hello", post.comments_with_extend.greeting
2319
+ end
2320
+
2321
+ test "association with extend option with multiple extensions" do
2322
+ post = posts(:welcome)
2323
+ assert_equal "lifo", post.comments_with_extend_2.author
2324
+ assert_equal "hullo", post.comments_with_extend_2.greeting
2325
+ end
2326
+
2327
+ test "extend option affects per association" do
2328
+ post = posts(:welcome)
2329
+ assert_equal "lifo", post.comments_with_extend.author
2330
+ assert_equal "lifo", post.comments_with_extend_2.author
2331
+ assert_equal "hello", post.comments_with_extend.greeting
2332
+ assert_equal "hullo", post.comments_with_extend_2.greeting
2333
+ end
2334
+
2335
+ test "delete record with complex joins" do
2336
+ david = authors(:david)
2337
+
2338
+ post = david.posts.first
2339
+ post.type = "PostWithSpecialCategorization"
2340
+ post.save
2341
+
2342
+ categorization = post.categorizations.first
2343
+ categorization.special = true
2344
+ categorization.save
2345
+
2346
+ assert_not_equal [], david.posts_with_special_categorizations
2347
+ david.posts_with_special_categorizations = []
2348
+ assert_equal [], david.posts_with_special_categorizations
2349
+ end
2350
+
2351
+ test "does not duplicate associations when used with natural primary keys" do
2352
+ speedometer = Speedometer.create!(id: "4")
2353
+ speedometer.minivans.create!(minivan_id: "a-van-red" , name: "a van", color: "red")
2354
+
2355
+ assert_equal 1, speedometer.minivans.to_a.size, "Only one association should be present:\n#{speedometer.minivans.to_a}"
2356
+ assert_equal 1, speedometer.reload.minivans.to_a.size
2357
+ end
2358
+
2359
+ test "can unscope the default scope of the associated model" do
2360
+ car = Car.create!
2361
+ bulb1 = Bulb.create! name: "defaulty", car: car
2362
+ bulb2 = Bulb.create! name: "other", car: car
2363
+
2364
+ assert_equal [bulb1], car.bulbs
2365
+ assert_equal [bulb1, bulb2], car.all_bulbs.sort_by(&:id)
2366
+ end
2367
+
2368
+ test "can unscope and where the default scope of the associated model" do
2369
+ Car.has_many :other_bulbs, -> { unscope(where: [:name]).where(name: "other") }, class_name: "Bulb"
2370
+ car = Car.create!
2371
+ bulb1 = Bulb.create! name: "defaulty", car: car
2372
+ bulb2 = Bulb.create! name: "other", car: car
2373
+
2374
+ assert_equal [bulb1], car.bulbs
2375
+ assert_equal [bulb2], car.other_bulbs
2376
+ end
2377
+
2378
+ test "can rewhere the default scope of the associated model" do
2379
+ Car.has_many :old_bulbs, -> { rewhere(name: "old") }, class_name: "Bulb"
2380
+ car = Car.create!
2381
+ bulb1 = Bulb.create! name: "defaulty", car: car
2382
+ bulb2 = Bulb.create! name: "old", car: car
2383
+
2384
+ assert_equal [bulb1], car.bulbs
2385
+ assert_equal [bulb2], car.old_bulbs
2386
+ end
2387
+
2388
+ test "unscopes the default scope of associated model when used with include" do
2389
+ car = Car.create!
2390
+ bulb = Bulb.create! name: "other", car: car
2391
+
2392
+ assert_equal [bulb], Car.find(car.id).all_bulbs
2393
+ assert_equal [bulb], Car.includes(:all_bulbs).find(car.id).all_bulbs
2394
+ assert_equal [bulb], Car.eager_load(:all_bulbs).find(car.id).all_bulbs
2395
+ end
2396
+
2397
+ test "raises RecordNotDestroyed when replaced child can't be destroyed" do
2398
+ car = Car.create!
2399
+ original_child = FailedBulb.create!(car: car)
2400
+
2401
+ error = assert_raise(ActiveRecord::RecordNotDestroyed) do
2402
+ car.failed_bulbs = [FailedBulb.create!]
2403
+ end
2404
+
2405
+ assert_equal [original_child], car.reload.failed_bulbs
2406
+ assert_equal "Failed to destroy the record", error.message
2407
+ end
2408
+
2409
+ test "updates counter cache when default scope is given" do
2410
+ topic = DefaultRejectedTopic.create approved: true
2411
+
2412
+ assert_difference "topic.reload.replies_count", 1 do
2413
+ topic.approved_replies.create!
2414
+ end
2415
+ end
2416
+
2417
+ test "dangerous association name raises ArgumentError" do
2418
+ [:errors, "errors", :save, "save"].each do |name|
2419
+ assert_raises(ArgumentError, "Association #{name} should not be allowed") do
2420
+ Class.new(ActiveRecord::Base) do
2421
+ has_many name
2422
+ end
2423
+ end
2424
+ end
2425
+ end
2426
+
2427
+ test "passes custom context validation to validate children" do
2428
+ pirate = FamousPirate.new
2429
+ pirate.famous_ships << ship = FamousShip.new
2430
+
2431
+ assert pirate.valid?
2432
+ assert_not pirate.valid?(:conference)
2433
+ assert_equal "can't be blank", ship.errors[:name].first
2434
+ end
2435
+
2436
+ test "association with instance dependent scope" do
2437
+ bob = authors(:bob)
2438
+ Post.create!(title: "signed post by bob", body: "stuff", author: authors(:bob))
2439
+ Post.create!(title: "anonymous post", body: "more stuff", author: authors(:bob))
2440
+ assert_equal ["misc post by bob", "other post by bob",
2441
+ "signed post by bob"], bob.posts_with_signature.map(&:title).sort
2442
+
2443
+ assert_equal [], authors(:david).posts_with_signature.map(&:title)
2444
+ end
2445
+
2446
+ test "associations autosaves when object is already persisted" do
2447
+ bulb = Bulb.create!
2448
+ tyre = Tyre.create!
2449
+
2450
+ car = Car.create! do |c|
2451
+ c.bulbs << bulb
2452
+ c.tyres << tyre
2453
+ end
2454
+
2455
+ assert_equal 1, car.bulbs.count
2456
+ assert_equal 1, car.tyres.count
2457
+ end
2458
+
2459
+ test "associations replace in memory when records have the same id" do
2460
+ bulb = Bulb.create!
2461
+ car = Car.create!(bulbs: [bulb])
2462
+
2463
+ new_bulb = Bulb.find(bulb.id)
2464
+ new_bulb.name = "foo"
2465
+ car.bulbs = [new_bulb]
2466
+
2467
+ assert_equal "foo", car.bulbs.first.name
2468
+ end
2469
+
2470
+ test "in memory replacement executes no queries" do
2471
+ bulb = Bulb.create!
2472
+ car = Car.create!(bulbs: [bulb])
2473
+
2474
+ new_bulb = Bulb.find(bulb.id)
2475
+
2476
+ assert_no_queries do
2477
+ car.bulbs = [new_bulb]
2478
+ end
2479
+ end
2480
+
2481
+ test "in memory replacements do not execute callbacks" do
2482
+ raise_after_add = false
2483
+ klass = Class.new(ActiveRecord::Base) do
2484
+ self.table_name = :cars
2485
+ has_many :bulbs, after_add: proc { raise if raise_after_add }
2486
+
2487
+ def self.name
2488
+ "Car"
2489
+ end
2490
+ end
2491
+ bulb = Bulb.create!
2492
+ car = klass.create!(bulbs: [bulb])
2493
+
2494
+ new_bulb = Bulb.find(bulb.id)
2495
+ raise_after_add = true
2496
+
2497
+ assert_nothing_raised do
2498
+ car.bulbs = [new_bulb]
2499
+ end
2500
+ end
2501
+
2502
+ test "in memory replacements sets inverse instance" do
2503
+ bulb = Bulb.create!
2504
+ car = Car.create!(bulbs: [bulb])
2505
+
2506
+ new_bulb = Bulb.find(bulb.id)
2507
+ car.bulbs = [new_bulb]
2508
+
2509
+ assert_same car, new_bulb.car
2510
+ end
2511
+
2512
+ test "in memory replacement maintains order" do
2513
+ first_bulb = Bulb.create!
2514
+ second_bulb = Bulb.create!
2515
+ car = Car.create!(bulbs: [first_bulb, second_bulb])
2516
+
2517
+ same_bulb = Bulb.find(first_bulb.id)
2518
+ car.bulbs = [second_bulb, same_bulb]
2519
+
2520
+ assert_equal [first_bulb, second_bulb], car.bulbs
2521
+ end
2522
+
2523
+ test "prevent double insertion of new object when the parent association loaded in the after save callback" do
2524
+ reset_callbacks(:save, Bulb) do
2525
+ Bulb.after_save { |record| record.car.bulbs.load }
2526
+
2527
+ car = Car.create!
2528
+ car.bulbs << Bulb.new
2529
+
2530
+ assert_equal 1, car.bulbs.size
2531
+ end
2532
+ end
2533
+
2534
+ test "prevent double firing the before save callback of new object when the parent association saved in the callback" do
2535
+ reset_callbacks(:save, Bulb) do
2536
+ count = 0
2537
+ Bulb.before_save { |record| record.car.save && count += 1 }
2538
+
2539
+ car = Car.create!
2540
+ car.bulbs.create!
2541
+
2542
+ assert_equal 1, count
2543
+ end
2544
+ end
2545
+
2546
+ class AuthorWithErrorDestroyingAssociation < ActiveRecord::Base
2547
+ self.table_name = "authors"
2548
+ has_many :posts_with_error_destroying,
2549
+ class_name: "PostWithErrorDestroying",
2550
+ foreign_key: :author_id,
2551
+ dependent: :destroy
2552
+ end
2553
+
2554
+ class PostWithErrorDestroying < ActiveRecord::Base
2555
+ self.table_name = "posts"
2556
+ self.inheritance_column = nil
2557
+ before_destroy -> { throw :abort }
2558
+ end
2559
+
2560
+ def test_destroy_does_not_raise_when_association_errors_on_destroy
2561
+ assert_no_difference "AuthorWithErrorDestroyingAssociation.count" do
2562
+ author = AuthorWithErrorDestroyingAssociation.first
2563
+
2564
+ assert_not author.destroy
2565
+ end
2566
+ end
2567
+
2568
+ def test_destroy_with_bang_bubbles_errors_from_associations
2569
+ error = assert_raises ActiveRecord::RecordNotDestroyed do
2570
+ AuthorWithErrorDestroyingAssociation.first.destroy!
2571
+ end
2572
+
2573
+ assert_instance_of PostWithErrorDestroying, error.record
2574
+ end
2575
+
2576
+ def test_ids_reader_memoization
2577
+ car = Car.create!(name: "Tofaş")
2578
+ bulb = Bulb.create!(car: car)
2579
+
2580
+ assert_equal [bulb.id], car.bulb_ids
2581
+ assert_no_queries { car.bulb_ids }
2582
+
2583
+ bulb2 = car.bulbs.create!
2584
+
2585
+ assert_equal [bulb.id, bulb2.id], car.bulb_ids
2586
+ assert_no_queries { car.bulb_ids }
2587
+ end
2588
+
2589
+ def test_loading_association_in_validate_callback_doesnt_affect_persistence
2590
+ reset_callbacks(:validation, Bulb) do
2591
+ Bulb.after_validation { |record| record.car.bulbs.load }
2592
+
2593
+ car = Car.create!(name: "Car")
2594
+ bulb = car.bulbs.create!
2595
+
2596
+ assert_equal [bulb], car.bulbs
2597
+ end
2598
+ end
2599
+
2600
+ private
2601
+
2602
+ def force_signal37_to_load_all_clients_of_firm
2603
+ companies(:first_firm).clients_of_firm.load_target
2604
+ end
2605
+
2606
+ def reset_callbacks(kind, klass)
2607
+ old_callbacks = {}
2608
+ old_callbacks[klass] = klass.send("_#{kind}_callbacks").dup
2609
+ klass.subclasses.each do |subclass|
2610
+ old_callbacks[subclass] = subclass.send("_#{kind}_callbacks").dup
2611
+ end
2612
+ yield
2613
+ ensure
2614
+ klass.send("_#{kind}_callbacks=", old_callbacks[klass])
2615
+ klass.subclasses.each do |subclass|
2616
+ subclass.send("_#{kind}_callbacks=", old_callbacks[subclass])
2617
+ end
2618
+ end
2619
+ end