rails 4.1.4 → 5.2.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (284) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +33 -19
  3. metadata +65 -311
  4. data/guides/CHANGELOG.md +0 -41
  5. data/guides/Rakefile +0 -77
  6. data/guides/assets/images/akshaysurve.jpg +0 -0
  7. data/guides/assets/images/belongs_to.png +0 -0
  8. data/guides/assets/images/book_icon.gif +0 -0
  9. data/guides/assets/images/bullet.gif +0 -0
  10. data/guides/assets/images/chapters_icon.gif +0 -0
  11. data/guides/assets/images/check_bullet.gif +0 -0
  12. data/guides/assets/images/credits_pic_blank.gif +0 -0
  13. data/guides/assets/images/csrf.png +0 -0
  14. data/guides/assets/images/edge_badge.png +0 -0
  15. data/guides/assets/images/favicon.ico +0 -0
  16. data/guides/assets/images/feature_tile.gif +0 -0
  17. data/guides/assets/images/footer_tile.gif +0 -0
  18. data/guides/assets/images/fxn.png +0 -0
  19. data/guides/assets/images/getting_started/article_with_comments.png +0 -0
  20. data/guides/assets/images/getting_started/challenge.png +0 -0
  21. data/guides/assets/images/getting_started/confirm_dialog.png +0 -0
  22. data/guides/assets/images/getting_started/forbidden_attributes_for_new_article.png +0 -0
  23. data/guides/assets/images/getting_started/form_with_errors.png +0 -0
  24. data/guides/assets/images/getting_started/index_action_with_edit_link.png +0 -0
  25. data/guides/assets/images/getting_started/new_article.png +0 -0
  26. data/guides/assets/images/getting_started/rails_welcome.png +0 -0
  27. data/guides/assets/images/getting_started/routing_error_no_controller.png +0 -0
  28. data/guides/assets/images/getting_started/routing_error_no_route_matches.png +0 -0
  29. data/guides/assets/images/getting_started/show_action_for_articles.png +0 -0
  30. data/guides/assets/images/getting_started/template_is_missing_articles_new.png +0 -0
  31. data/guides/assets/images/getting_started/unknown_action_create_for_articles.png +0 -0
  32. data/guides/assets/images/getting_started/unknown_action_new_for_articles.png +0 -0
  33. data/guides/assets/images/grey_bullet.gif +0 -0
  34. data/guides/assets/images/habtm.png +0 -0
  35. data/guides/assets/images/has_many.png +0 -0
  36. data/guides/assets/images/has_many_through.png +0 -0
  37. data/guides/assets/images/has_one.png +0 -0
  38. data/guides/assets/images/has_one_through.png +0 -0
  39. data/guides/assets/images/header_backdrop.png +0 -0
  40. data/guides/assets/images/header_tile.gif +0 -0
  41. data/guides/assets/images/i18n/demo_html_safe.png +0 -0
  42. data/guides/assets/images/i18n/demo_localized_pirate.png +0 -0
  43. data/guides/assets/images/i18n/demo_translated_en.png +0 -0
  44. data/guides/assets/images/i18n/demo_translated_pirate.png +0 -0
  45. data/guides/assets/images/i18n/demo_translation_missing.png +0 -0
  46. data/guides/assets/images/i18n/demo_untranslated.png +0 -0
  47. data/guides/assets/images/icons/README +0 -5
  48. data/guides/assets/images/icons/callouts/1.png +0 -0
  49. data/guides/assets/images/icons/callouts/10.png +0 -0
  50. data/guides/assets/images/icons/callouts/11.png +0 -0
  51. data/guides/assets/images/icons/callouts/12.png +0 -0
  52. data/guides/assets/images/icons/callouts/13.png +0 -0
  53. data/guides/assets/images/icons/callouts/14.png +0 -0
  54. data/guides/assets/images/icons/callouts/15.png +0 -0
  55. data/guides/assets/images/icons/callouts/2.png +0 -0
  56. data/guides/assets/images/icons/callouts/3.png +0 -0
  57. data/guides/assets/images/icons/callouts/4.png +0 -0
  58. data/guides/assets/images/icons/callouts/5.png +0 -0
  59. data/guides/assets/images/icons/callouts/6.png +0 -0
  60. data/guides/assets/images/icons/callouts/7.png +0 -0
  61. data/guides/assets/images/icons/callouts/8.png +0 -0
  62. data/guides/assets/images/icons/callouts/9.png +0 -0
  63. data/guides/assets/images/icons/caution.png +0 -0
  64. data/guides/assets/images/icons/example.png +0 -0
  65. data/guides/assets/images/icons/home.png +0 -0
  66. data/guides/assets/images/icons/important.png +0 -0
  67. data/guides/assets/images/icons/next.png +0 -0
  68. data/guides/assets/images/icons/note.png +0 -0
  69. data/guides/assets/images/icons/prev.png +0 -0
  70. data/guides/assets/images/icons/tip.png +0 -0
  71. data/guides/assets/images/icons/up.png +0 -0
  72. data/guides/assets/images/icons/warning.png +0 -0
  73. data/guides/assets/images/nav_arrow.gif +0 -0
  74. data/guides/assets/images/oscardelben.jpg +0 -0
  75. data/guides/assets/images/polymorphic.png +0 -0
  76. data/guides/assets/images/radar.png +0 -0
  77. data/guides/assets/images/rails4_features.png +0 -0
  78. data/guides/assets/images/rails_guides_kindle_cover.jpg +0 -0
  79. data/guides/assets/images/rails_guides_logo.gif +0 -0
  80. data/guides/assets/images/rails_logo_remix.gif +0 -0
  81. data/guides/assets/images/session_fixation.png +0 -0
  82. data/guides/assets/images/tab_grey.gif +0 -0
  83. data/guides/assets/images/tab_info.gif +0 -0
  84. data/guides/assets/images/tab_note.gif +0 -0
  85. data/guides/assets/images/tab_red.gif +0 -0
  86. data/guides/assets/images/tab_yellow.gif +0 -0
  87. data/guides/assets/images/tab_yellow.png +0 -0
  88. data/guides/assets/images/vijaydev.jpg +0 -0
  89. data/guides/assets/javascripts/guides.js +0 -53
  90. data/guides/assets/javascripts/jquery.min.js +0 -4
  91. data/guides/assets/javascripts/responsive-tables.js +0 -43
  92. data/guides/assets/javascripts/syntaxhighlighter/shBrushAS3.js +0 -59
  93. data/guides/assets/javascripts/syntaxhighlighter/shBrushAppleScript.js +0 -75
  94. data/guides/assets/javascripts/syntaxhighlighter/shBrushBash.js +0 -59
  95. data/guides/assets/javascripts/syntaxhighlighter/shBrushCSharp.js +0 -65
  96. data/guides/assets/javascripts/syntaxhighlighter/shBrushColdFusion.js +0 -100
  97. data/guides/assets/javascripts/syntaxhighlighter/shBrushCpp.js +0 -97
  98. data/guides/assets/javascripts/syntaxhighlighter/shBrushCss.js +0 -91
  99. data/guides/assets/javascripts/syntaxhighlighter/shBrushDelphi.js +0 -55
  100. data/guides/assets/javascripts/syntaxhighlighter/shBrushDiff.js +0 -41
  101. data/guides/assets/javascripts/syntaxhighlighter/shBrushErlang.js +0 -52
  102. data/guides/assets/javascripts/syntaxhighlighter/shBrushGroovy.js +0 -67
  103. data/guides/assets/javascripts/syntaxhighlighter/shBrushJScript.js +0 -52
  104. data/guides/assets/javascripts/syntaxhighlighter/shBrushJava.js +0 -57
  105. data/guides/assets/javascripts/syntaxhighlighter/shBrushJavaFX.js +0 -58
  106. data/guides/assets/javascripts/syntaxhighlighter/shBrushPerl.js +0 -72
  107. data/guides/assets/javascripts/syntaxhighlighter/shBrushPhp.js +0 -88
  108. data/guides/assets/javascripts/syntaxhighlighter/shBrushPlain.js +0 -33
  109. data/guides/assets/javascripts/syntaxhighlighter/shBrushPowerShell.js +0 -74
  110. data/guides/assets/javascripts/syntaxhighlighter/shBrushPython.js +0 -64
  111. data/guides/assets/javascripts/syntaxhighlighter/shBrushRuby.js +0 -55
  112. data/guides/assets/javascripts/syntaxhighlighter/shBrushSass.js +0 -94
  113. data/guides/assets/javascripts/syntaxhighlighter/shBrushScala.js +0 -51
  114. data/guides/assets/javascripts/syntaxhighlighter/shBrushSql.js +0 -66
  115. data/guides/assets/javascripts/syntaxhighlighter/shBrushVb.js +0 -56
  116. data/guides/assets/javascripts/syntaxhighlighter/shBrushXml.js +0 -69
  117. data/guides/assets/javascripts/syntaxhighlighter/shCore.js +0 -17
  118. data/guides/assets/stylesheets/fixes.css +0 -16
  119. data/guides/assets/stylesheets/kindle.css +0 -11
  120. data/guides/assets/stylesheets/main.css +0 -710
  121. data/guides/assets/stylesheets/print.css +0 -52
  122. data/guides/assets/stylesheets/reset.css +0 -43
  123. data/guides/assets/stylesheets/responsive-tables.css +0 -50
  124. data/guides/assets/stylesheets/style.css +0 -13
  125. data/guides/assets/stylesheets/syntaxhighlighter/shCore.css +0 -226
  126. data/guides/assets/stylesheets/syntaxhighlighter/shCoreDefault.css +0 -328
  127. data/guides/assets/stylesheets/syntaxhighlighter/shCoreDjango.css +0 -331
  128. data/guides/assets/stylesheets/syntaxhighlighter/shCoreEclipse.css +0 -339
  129. data/guides/assets/stylesheets/syntaxhighlighter/shCoreEmacs.css +0 -324
  130. data/guides/assets/stylesheets/syntaxhighlighter/shCoreFadeToGrey.css +0 -328
  131. data/guides/assets/stylesheets/syntaxhighlighter/shCoreMDUltra.css +0 -324
  132. data/guides/assets/stylesheets/syntaxhighlighter/shCoreMidnight.css +0 -324
  133. data/guides/assets/stylesheets/syntaxhighlighter/shCoreRDark.css +0 -324
  134. data/guides/assets/stylesheets/syntaxhighlighter/shThemeDefault.css +0 -117
  135. data/guides/assets/stylesheets/syntaxhighlighter/shThemeDjango.css +0 -120
  136. data/guides/assets/stylesheets/syntaxhighlighter/shThemeEclipse.css +0 -128
  137. data/guides/assets/stylesheets/syntaxhighlighter/shThemeEmacs.css +0 -113
  138. data/guides/assets/stylesheets/syntaxhighlighter/shThemeFadeToGrey.css +0 -117
  139. data/guides/assets/stylesheets/syntaxhighlighter/shThemeMDUltra.css +0 -113
  140. data/guides/assets/stylesheets/syntaxhighlighter/shThemeMidnight.css +0 -113
  141. data/guides/assets/stylesheets/syntaxhighlighter/shThemeRDark.css +0 -113
  142. data/guides/assets/stylesheets/syntaxhighlighter/shThemeRailsGuides.css +0 -116
  143. data/guides/bug_report_templates/action_controller_gem.rb +0 -47
  144. data/guides/bug_report_templates/action_controller_master.rb +0 -53
  145. data/guides/bug_report_templates/active_record_gem.rb +0 -40
  146. data/guides/bug_report_templates/active_record_master.rb +0 -49
  147. data/guides/code/getting_started/Gemfile +0 -40
  148. data/guides/code/getting_started/Gemfile.lock +0 -125
  149. data/guides/code/getting_started/README.rdoc +0 -28
  150. data/guides/code/getting_started/Rakefile +0 -6
  151. data/guides/code/getting_started/app/assets/javascripts/application.js +0 -15
  152. data/guides/code/getting_started/app/assets/javascripts/comments.js.coffee +0 -3
  153. data/guides/code/getting_started/app/assets/javascripts/posts.js.coffee +0 -3
  154. data/guides/code/getting_started/app/assets/javascripts/welcome.js.coffee +0 -3
  155. data/guides/code/getting_started/app/assets/stylesheets/application.css +0 -13
  156. data/guides/code/getting_started/app/assets/stylesheets/comments.css.scss +0 -3
  157. data/guides/code/getting_started/app/assets/stylesheets/posts.css.scss +0 -3
  158. data/guides/code/getting_started/app/assets/stylesheets/welcome.css.scss +0 -3
  159. data/guides/code/getting_started/app/controllers/application_controller.rb +0 -5
  160. data/guides/code/getting_started/app/controllers/comments_controller.rb +0 -23
  161. data/guides/code/getting_started/app/controllers/posts_controller.rb +0 -53
  162. data/guides/code/getting_started/app/controllers/welcome_controller.rb +0 -4
  163. data/guides/code/getting_started/app/helpers/application_helper.rb +0 -2
  164. data/guides/code/getting_started/app/helpers/comments_helper.rb +0 -2
  165. data/guides/code/getting_started/app/helpers/posts_helper.rb +0 -2
  166. data/guides/code/getting_started/app/helpers/welcome_helper.rb +0 -2
  167. data/guides/code/getting_started/app/models/comment.rb +0 -3
  168. data/guides/code/getting_started/app/models/post.rb +0 -7
  169. data/guides/code/getting_started/app/views/comments/_comment.html.erb +0 -15
  170. data/guides/code/getting_started/app/views/comments/_form.html.erb +0 -13
  171. data/guides/code/getting_started/app/views/layouts/application.html.erb +0 -14
  172. data/guides/code/getting_started/app/views/posts/_form.html.erb +0 -27
  173. data/guides/code/getting_started/app/views/posts/edit.html.erb +0 -5
  174. data/guides/code/getting_started/app/views/posts/index.html.erb +0 -21
  175. data/guides/code/getting_started/app/views/posts/new.html.erb +0 -5
  176. data/guides/code/getting_started/app/views/posts/show.html.erb +0 -18
  177. data/guides/code/getting_started/app/views/welcome/index.html.erb +0 -4
  178. data/guides/code/getting_started/bin/bundle +0 -4
  179. data/guides/code/getting_started/bin/rails +0 -4
  180. data/guides/code/getting_started/bin/rake +0 -4
  181. data/guides/code/getting_started/config/application.rb +0 -18
  182. data/guides/code/getting_started/config/boot.rb +0 -4
  183. data/guides/code/getting_started/config/database.yml +0 -25
  184. data/guides/code/getting_started/config/environment.rb +0 -5
  185. data/guides/code/getting_started/config/environments/development.rb +0 -30
  186. data/guides/code/getting_started/config/environments/production.rb +0 -80
  187. data/guides/code/getting_started/config/environments/test.rb +0 -36
  188. data/guides/code/getting_started/config/initializers/backtrace_silencers.rb +0 -7
  189. data/guides/code/getting_started/config/initializers/filter_parameter_logging.rb +0 -4
  190. data/guides/code/getting_started/config/initializers/inflections.rb +0 -16
  191. data/guides/code/getting_started/config/initializers/locale.rb +0 -9
  192. data/guides/code/getting_started/config/initializers/mime_types.rb +0 -5
  193. data/guides/code/getting_started/config/initializers/secret_token.rb +0 -12
  194. data/guides/code/getting_started/config/initializers/session_store.rb +0 -3
  195. data/guides/code/getting_started/config/initializers/wrap_parameters.rb +0 -14
  196. data/guides/code/getting_started/config/locales/en.yml +0 -23
  197. data/guides/code/getting_started/config/routes.rb +0 -7
  198. data/guides/code/getting_started/config.ru +0 -4
  199. data/guides/code/getting_started/db/migrate/20130122042648_create_posts.rb +0 -10
  200. data/guides/code/getting_started/db/migrate/20130122045842_create_comments.rb +0 -11
  201. data/guides/code/getting_started/db/schema.rb +0 -33
  202. data/guides/code/getting_started/db/seeds.rb +0 -7
  203. data/guides/code/getting_started/public/404.html +0 -60
  204. data/guides/code/getting_started/public/422.html +0 -60
  205. data/guides/code/getting_started/public/500.html +0 -59
  206. data/guides/code/getting_started/public/favicon.ico +0 -0
  207. data/guides/code/getting_started/public/robots.txt +0 -5
  208. data/guides/code/getting_started/test/controllers/comments_controller_test.rb +0 -7
  209. data/guides/code/getting_started/test/controllers/posts_controller_test.rb +0 -7
  210. data/guides/code/getting_started/test/controllers/welcome_controller_test.rb +0 -9
  211. data/guides/code/getting_started/test/fixtures/comments.yml +0 -11
  212. data/guides/code/getting_started/test/fixtures/posts.yml +0 -9
  213. data/guides/code/getting_started/test/helpers/comments_helper_test.rb +0 -4
  214. data/guides/code/getting_started/test/helpers/posts_helper_test.rb +0 -4
  215. data/guides/code/getting_started/test/helpers/welcome_helper_test.rb +0 -4
  216. data/guides/code/getting_started/test/models/comment_test.rb +0 -7
  217. data/guides/code/getting_started/test/models/post_test.rb +0 -7
  218. data/guides/code/getting_started/test/test_helper.rb +0 -12
  219. data/guides/rails_guides/generator.rb +0 -248
  220. data/guides/rails_guides/helpers.rb +0 -53
  221. data/guides/rails_guides/indexer.rb +0 -68
  222. data/guides/rails_guides/kindle.rb +0 -119
  223. data/guides/rails_guides/levenshtein.rb +0 -31
  224. data/guides/rails_guides/markdown/renderer.rb +0 -82
  225. data/guides/rails_guides/markdown.rb +0 -163
  226. data/guides/rails_guides.rb +0 -63
  227. data/guides/source/2_2_release_notes.md +0 -435
  228. data/guides/source/2_3_release_notes.md +0 -621
  229. data/guides/source/3_0_release_notes.md +0 -611
  230. data/guides/source/3_1_release_notes.md +0 -556
  231. data/guides/source/3_2_release_notes.md +0 -565
  232. data/guides/source/4_0_release_notes.md +0 -276
  233. data/guides/source/4_1_release_notes.md +0 -731
  234. data/guides/source/_license.html.erb +0 -2
  235. data/guides/source/_welcome.html.erb +0 -25
  236. data/guides/source/action_controller_overview.md +0 -1175
  237. data/guides/source/action_mailer_basics.md +0 -689
  238. data/guides/source/action_view_overview.md +0 -1610
  239. data/guides/source/active_model_basics.md +0 -200
  240. data/guides/source/active_record_basics.md +0 -373
  241. data/guides/source/active_record_callbacks.md +0 -410
  242. data/guides/source/active_record_querying.md +0 -1773
  243. data/guides/source/active_record_validations.md +0 -1169
  244. data/guides/source/active_support_core_extensions.md +0 -3864
  245. data/guides/source/active_support_instrumentation.md +0 -496
  246. data/guides/source/api_documentation_guidelines.md +0 -315
  247. data/guides/source/asset_pipeline.md +0 -1163
  248. data/guides/source/association_basics.md +0 -2229
  249. data/guides/source/caching_with_rails.md +0 -354
  250. data/guides/source/command_line.md +0 -603
  251. data/guides/source/configuring.md +0 -942
  252. data/guides/source/contributing_to_ruby_on_rails.md +0 -544
  253. data/guides/source/credits.html.erb +0 -80
  254. data/guides/source/debugging_rails_applications.md +0 -707
  255. data/guides/source/development_dependencies_install.md +0 -278
  256. data/guides/source/documents.yaml +0 -193
  257. data/guides/source/engines.md +0 -1391
  258. data/guides/source/form_helpers.md +0 -1001
  259. data/guides/source/generators.md +0 -663
  260. data/guides/source/getting_started.md +0 -1947
  261. data/guides/source/i18n.md +0 -1043
  262. data/guides/source/index.html.erb +0 -27
  263. data/guides/source/initialization.md +0 -657
  264. data/guides/source/kindle/copyright.html.erb +0 -1
  265. data/guides/source/kindle/layout.html.erb +0 -27
  266. data/guides/source/kindle/rails_guides.opf.erb +0 -52
  267. data/guides/source/kindle/toc.html.erb +0 -24
  268. data/guides/source/kindle/toc.ncx.erb +0 -64
  269. data/guides/source/kindle/welcome.html.erb +0 -5
  270. data/guides/source/layout.html.erb +0 -146
  271. data/guides/source/layouts_and_rendering.md +0 -1226
  272. data/guides/source/maintenance_policy.md +0 -56
  273. data/guides/source/migrations.md +0 -1109
  274. data/guides/source/nested_model_forms.md +0 -225
  275. data/guides/source/plugins.md +0 -444
  276. data/guides/source/rails_application_templates.md +0 -248
  277. data/guides/source/rails_on_rack.md +0 -333
  278. data/guides/source/routing.md +0 -1115
  279. data/guides/source/ruby_on_rails_guides_guidelines.md +0 -128
  280. data/guides/source/security.md +0 -1018
  281. data/guides/source/testing.md +0 -1052
  282. data/guides/source/upgrading_ruby_on_rails.md +0 -899
  283. data/guides/source/working_with_javascript_in_rails.md +0 -405
  284. data/guides/w3c_validator.rb +0 -95
@@ -1,731 +0,0 @@
1
- Ruby on Rails 4.1 Release Notes
2
- ===============================
3
-
4
- Highlights in Rails 4.1:
5
-
6
- * Spring application preloader
7
- * `config/secrets.yml`
8
- * Action Pack variants
9
- * Action Mailer previews
10
-
11
- These release notes cover only the major changes. To know about various bug
12
- fixes and changes, please refer to the change logs or check out the
13
- [list of commits](https://github.com/rails/rails/commits/master) in the main
14
- Rails repository on GitHub.
15
-
16
- --------------------------------------------------------------------------------
17
-
18
- Upgrading to Rails 4.1
19
- ----------------------
20
-
21
- If you're upgrading an existing application, it's a great idea to have good test
22
- coverage before going in. You should also first upgrade to Rails 4.0 in case you
23
- haven't and make sure your application still runs as expected before attempting
24
- an update to Rails 4.1. A list of things to watch out for when upgrading is
25
- available in the
26
- [Upgrading Ruby on Rails](upgrading_ruby_on_rails.html#upgrading-from-rails-4-0-to-rails-4-1)
27
- guide.
28
-
29
-
30
- Major Features
31
- --------------
32
-
33
- ### Spring Application Preloader
34
-
35
- Spring is a Rails application preloader. It speeds up development by keeping
36
- your application running in the background so you don't need to boot it every
37
- time you run a test, rake task or migration.
38
-
39
- New Rails 4.1 applications will ship with "springified" binstubs. This means
40
- that `bin/rails` and `bin/rake` will automatically take advantage of preloaded
41
- spring environments.
42
-
43
- **Running rake tasks:**
44
-
45
- ```
46
- bin/rake test:models
47
- ```
48
-
49
- **Running a Rails command:**
50
-
51
- ```
52
- bin/rails console
53
- ```
54
-
55
- **Spring introspection:**
56
-
57
- ```
58
- $ bin/spring status
59
- Spring is running:
60
-
61
- 1182 spring server | my_app | started 29 mins ago
62
- 3656 spring app | my_app | started 23 secs ago | test mode
63
- 3746 spring app | my_app | started 10 secs ago | development mode
64
- ```
65
-
66
- Have a look at the
67
- [Spring README](https://github.com/rails/spring/blob/master/README.md) to
68
- see all available features.
69
-
70
- See the [Upgrading Ruby on Rails](upgrading_ruby_on_rails.html#spring)
71
- guide on how to migrate existing applications to use this feature.
72
-
73
- ### `config/secrets.yml`
74
-
75
- Rails 4.1 generates a new `secrets.yml` file in the `config` folder. By default,
76
- this file contains the application's `secret_key_base`, but it could also be
77
- used to store other secrets such as access keys for external APIs.
78
-
79
- The secrets added to this file are accessible via `Rails.application.secrets`.
80
- For example, with the following `config/secrets.yml`:
81
-
82
- ```yaml
83
- development:
84
- secret_key_base: 3b7cd727ee24e8444053437c36cc66c3
85
- some_api_key: SOMEKEY
86
- ```
87
-
88
- `Rails.application.secrets.some_api_key` returns `SOMEKEY` in the development
89
- environment.
90
-
91
- See the [Upgrading Ruby on Rails](upgrading_ruby_on_rails.html#config-secrets-yml)
92
- guide on how to migrate existing applications to use this feature.
93
-
94
- ### Action Pack Variants
95
-
96
- We often want to render different HTML/JSON/XML templates for phones,
97
- tablets, and desktop browsers. Variants make it easy.
98
-
99
- The request variant is a specialization of the request format, like `:tablet`,
100
- `:phone`, or `:desktop`.
101
-
102
- You can set the variant in a `before_action`:
103
-
104
- ```ruby
105
- request.variant = :tablet if request.user_agent =~ /iPad/
106
- ```
107
-
108
- Respond to variants in the action just like you respond to formats:
109
-
110
- ```ruby
111
- respond_to do |format|
112
- format.html do |html|
113
- html.tablet # renders app/views/projects/show.html+tablet.erb
114
- html.phone { extra_setup; render ... }
115
- end
116
- end
117
- ```
118
-
119
- Provide separate templates for each format and variant:
120
-
121
- ```
122
- app/views/projects/show.html.erb
123
- app/views/projects/show.html+tablet.erb
124
- app/views/projects/show.html+phone.erb
125
- ```
126
-
127
- You can also simplify the variants definition using the inline syntax:
128
-
129
- ```ruby
130
- respond_to do |format|
131
- format.js { render "trash" }
132
- format.html.phone { redirect_to progress_path }
133
- format.html.none { render "trash" }
134
- end
135
- ```
136
-
137
- ### Action Mailer Previews
138
-
139
- Action Mailer previews provide a way to visually see how emails look by visiting
140
- a special URL that renders them.
141
-
142
- You implement a preview class whose methods return the mail object you'd like
143
- to check:
144
-
145
- ```ruby
146
- class NotifierPreview < ActionMailer::Preview
147
- def welcome
148
- Notifier.welcome(User.first)
149
- end
150
- end
151
- ```
152
-
153
- The preview is available in http://localhost:3000/rails/mailers/notifier/welcome,
154
- and a list of them in http://localhost:3000/rails/mailers.
155
-
156
- By default, these preview classes live in `test/mailers/previews`.
157
- This can be configured using the `preview_path` option.
158
-
159
- See its
160
- [documentation](http://api.rubyonrails.org/v4.1.0/classes/ActionMailer/Base.html)
161
- for a detailed write up.
162
-
163
- ### Active Record enums
164
-
165
- Declare an enum attribute where the values map to integers in the database, but
166
- can be queried by name.
167
-
168
- ```ruby
169
- class Conversation < ActiveRecord::Base
170
- enum status: [ :active, :archived ]
171
- end
172
-
173
- conversation.archived!
174
- conversation.active? # => false
175
- conversation.status # => "archived"
176
-
177
- Conversation.archived # => Relation for all archived Conversations
178
-
179
- Conversation.statuses # => { "active" => 0, "archived" => 1 }
180
- ```
181
-
182
- See its
183
- [documentation](http://api.rubyonrails.org/v4.1.0/classes/ActiveRecord/Enum.html)
184
- for a detailed write up.
185
-
186
- ### Message Verifiers
187
-
188
- Message verifiers can be used to generate and verify signed messages. This can
189
- be useful to safely transport sensitive data like remember-me tokens and
190
- friends.
191
-
192
- The method `Rails.application.message_verifier` returns a new message verifier
193
- that signs messages with a key derived from secret_key_base and the given
194
- message verifier name:
195
-
196
- ```ruby
197
- signed_token = Rails.application.message_verifier(:remember_me).generate(token)
198
- Rails.application.message_verifier(:remember_me).verify(signed_token) # => token
199
-
200
- Rails.application.message_verifier(:remember_me).verify(tampered_token)
201
- # raises ActiveSupport::MessageVerifier::InvalidSignature
202
- ```
203
-
204
- ### Module#concerning
205
-
206
- A natural, low-ceremony way to separate responsibilities within a class:
207
-
208
- ```ruby
209
- class Todo < ActiveRecord::Base
210
- concerning :EventTracking do
211
- included do
212
- has_many :events
213
- end
214
-
215
- def latest_event
216
- ...
217
- end
218
-
219
- private
220
- def some_internal_method
221
- ...
222
- end
223
- end
224
- end
225
- ```
226
-
227
- This example is equivalent to defining a `EventTracking` module inline,
228
- extending it with `ActiveSupport::Concern`, then mixing it in to the
229
- `Todo` class.
230
-
231
- See its
232
- [documentation](http://api.rubyonrails.org/v4.1.0/classes/Module/Concerning.html)
233
- for a detailed write up and the intended use cases.
234
-
235
- ### CSRF protection from remote `<script>` tags
236
-
237
- Cross-site request forgery (CSRF) protection now covers GET requests with
238
- JavaScript responses, too. That prevents a third-party site from referencing
239
- your JavaScript URL and attempting to run it to extract sensitive data.
240
-
241
- This means any of your tests that hit `.js` URLs will now fail CSRF protection
242
- unless they use `xhr`. Upgrade your tests to be explicit about expecting
243
- XmlHttpRequests. Instead of `post :create, format: :js`, switch to the explicit
244
- `xhr :post, :create, format: :js`.
245
-
246
-
247
- Railties
248
- --------
249
-
250
- Please refer to the
251
- [Changelog](https://github.com/rails/rails/blob/4-1-stable/railties/CHANGELOG.md)
252
- for detailed changes.
253
-
254
- ### Removals
255
-
256
- * Removed `update:application_controller` rake task.
257
-
258
- * Removed deprecated `Rails.application.railties.engines`.
259
-
260
- * Removed deprecated `threadsafe!` from Rails Config.
261
-
262
- * Removed deprecated `ActiveRecord::Generators::ActiveModel#update_attributes` in
263
- favor of `ActiveRecord::Generators::ActiveModel#update`.
264
-
265
- * Removed deprecated `config.whiny_nils` option.
266
-
267
- * Removed deprecated rake tasks for running tests: `rake test:uncommitted` and
268
- `rake test:recent`.
269
-
270
- ### Notable changes
271
-
272
- * The [Spring application
273
- preloader](https://github.com/rails/spring) is now installed
274
- by default for new applications. It uses the development group of
275
- the Gemfile, so will not be installed in
276
- production. ([Pull Request](https://github.com/rails/rails/pull/12958))
277
-
278
- * `BACKTRACE` environment variable to show unfiltered backtraces for test
279
- failures. ([Commit](https://github.com/rails/rails/commit/84eac5dab8b0fe9ee20b51250e52ad7bfea36553))
280
-
281
- * Exposed `MiddlewareStack#unshift` to environment
282
- configuration. ([Pull Request](https://github.com/rails/rails/pull/12479))
283
-
284
- * Added `Application#message_verifier` method to return a message
285
- verifier. ([Pull Request](https://github.com/rails/rails/pull/12995))
286
-
287
- * The `test_help.rb` file which is required by the default generated test
288
- helper will automatically keep your test database up-to-date with
289
- `db/schema.rb` (or `db/structure.sql`). It raises an error if
290
- reloading the schema does not resolve all pending migrations. Opt out
291
- with `config.active_record.maintain_test_schema = false`. ([Pull
292
- Request](https://github.com/rails/rails/pull/13528))
293
-
294
- * Introduce `Rails.gem_version` as a convenience method to return
295
- `Gem::Version.new(Rails.version)`, suggesting a more reliable way to perform
296
- version comparison. ([Pull Request](https://github.com/rails/rails/pull/14103))
297
-
298
-
299
- Action Pack
300
- -----------
301
-
302
- Please refer to the
303
- [Changelog](https://github.com/rails/rails/blob/4-1-stable/actionpack/CHANGELOG.md)
304
- for detailed changes.
305
-
306
- ### Removals
307
-
308
- * Removed deprecated Rails application fallback for integration testing, set
309
- `ActionDispatch.test_app` instead.
310
-
311
- * Removed deprecated `page_cache_extension` config.
312
-
313
- * Removed deprecated `ActionController::RecordIdentifier`, use
314
- `ActionView::RecordIdentifier` instead.
315
-
316
- * Removed deprecated constants from Action Controller:
317
-
318
- | Removed | Successor |
319
- |:-----------------------------------|:--------------------------------|
320
- | ActionController::AbstractRequest | ActionDispatch::Request |
321
- | ActionController::Request | ActionDispatch::Request |
322
- | ActionController::AbstractResponse | ActionDispatch::Response |
323
- | ActionController::Response | ActionDispatch::Response |
324
- | ActionController::Routing | ActionDispatch::Routing |
325
- | ActionController::Integration | ActionDispatch::Integration |
326
- | ActionController::IntegrationTest | ActionDispatch::IntegrationTest |
327
-
328
- ### Notable changes
329
-
330
- * `protect_from_forgery` also prevents cross-origin `<script>` tags.
331
- Update your tests to use `xhr :get, :foo, format: :js` instead of
332
- `get :foo, format: :js`.
333
- ([Pull Request](https://github.com/rails/rails/pull/13345))
334
-
335
- * `#url_for` takes a hash with options inside an
336
- array. ([Pull Request](https://github.com/rails/rails/pull/9599))
337
-
338
- * Added `session#fetch` method fetch behaves similarly to
339
- [Hash#fetch](http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-fetch),
340
- with the exception that the returned value is always saved into the
341
- session. ([Pull Request](https://github.com/rails/rails/pull/12692))
342
-
343
- * Separated Action View completely from Action
344
- Pack. ([Pull Request](https://github.com/rails/rails/pull/11032))
345
-
346
- * Log which keys were affected by deep
347
- munge. ([Pull Request](https://github.com/rails/rails/pull/13813))
348
-
349
- * New config option `config.action_dispatch.perform_deep_munge` to opt out of
350
- params "deep munging" that was used to address security vulnerability
351
- CVE-2013-0155. ([Pull Request](https://github.com/rails/rails/pull/13188))
352
-
353
- * New config option `config.action_dispatch.cookies_serializer` for specifying a
354
- serializer for the signed and encrypted cookie jars. (Pull Requests
355
- [1](https://github.com/rails/rails/pull/13692),
356
- [2](https://github.com/rails/rails/pull/13945) /
357
- [More Details](upgrading_ruby_on_rails.html#cookies-serializer))
358
-
359
- * Added `render :plain`, `render :html` and `render
360
- :body`. ([Pull Request](https://github.com/rails/rails/pull/14062) /
361
- [More Details](upgrading_ruby_on_rails.html#rendering-content-from-string))
362
-
363
-
364
- Action Mailer
365
- -------------
366
-
367
- Please refer to the
368
- [Changelog](https://github.com/rails/rails/blob/4-1-stable/actionmailer/CHANGELOG.md)
369
- for detailed changes.
370
-
371
- ### Notable changes
372
-
373
- * Added mailer previews feature based on 37 Signals mail_view
374
- gem. ([Commit](https://github.com/rails/rails/commit/d6dec7fcb6b8fddf8c170182d4fe64ecfc7b2261))
375
-
376
- * Instrument the generation of Action Mailer messages. The time it takes to
377
- generate a message is written to the log. ([Pull Request](https://github.com/rails/rails/pull/12556))
378
-
379
-
380
- Active Record
381
- -------------
382
-
383
- Please refer to the
384
- [Changelog](https://github.com/rails/rails/blob/4-1-stable/activerecord/CHANGELOG.md)
385
- for detailed changes.
386
-
387
- ### Removals
388
-
389
- * Removed deprecated nil-passing to the following `SchemaCache` methods:
390
- `primary_keys`, `tables`, `columns` and `columns_hash`.
391
-
392
- * Removed deprecated block filter from `ActiveRecord::Migrator#migrate`.
393
-
394
- * Removed deprecated String constructor from `ActiveRecord::Migrator`.
395
-
396
- * Removed deprecated `scope` use without passing a callable object.
397
-
398
- * Removed deprecated `transaction_joinable=` in favor of `begin_transaction`
399
- with `d:joinable` option.
400
-
401
- * Removed deprecated `decrement_open_transactions`.
402
-
403
- * Removed deprecated `increment_open_transactions`.
404
-
405
- * Removed deprecated `PostgreSQLAdapter#outside_transaction?`
406
- method. You can use `#transaction_open?` instead.
407
-
408
- * Removed deprecated `ActiveRecord::Fixtures.find_table_name` in favor of
409
- `ActiveRecord::Fixtures.default_fixture_model_name`.
410
-
411
- * Removed deprecated `columns_for_remove` from `SchemaStatements`.
412
-
413
- * Removed deprecated `SchemaStatements#distinct`.
414
-
415
- * Moved deprecated `ActiveRecord::TestCase` into the Rails test
416
- suite. The class is no longer public and is only used for internal
417
- Rails tests.
418
-
419
- * Removed support for deprecated option `:restrict` for `:dependent`
420
- in associations.
421
-
422
- * Removed support for deprecated `:delete_sql`, `:insert_sql`, `:finder_sql`
423
- and `:counter_sql` options in associations.
424
-
425
- * Removed deprecated method `type_cast_code` from Column.
426
-
427
- * Removed deprecated `ActiveRecord::Base#connection` method.
428
- Make sure to access it via the class.
429
-
430
- * Removed deprecation warning for `auto_explain_threshold_in_seconds`.
431
-
432
- * Removed deprecated `:distinct` option from `Relation#count`.
433
-
434
- * Removed deprecated methods `partial_updates`, `partial_updates?` and
435
- `partial_updates=`.
436
-
437
- * Removed deprecated method `scoped`.
438
-
439
- * Removed deprecated method `default_scopes?`.
440
-
441
- * Remove implicit join references that were deprecated in 4.0.
442
-
443
- * Removed `activerecord-deprecated_finders` as a dependency.
444
- Please see [the gem README](https://github.com/rails/activerecord-deprecated_finders#active-record-deprecated-finders)
445
- for more info.
446
-
447
- * Removed usage of `implicit_readonly`. Please use `readonly` method
448
- explicitly to mark records as
449
- `readonly`. ([Pull Request](https://github.com/rails/rails/pull/10769))
450
-
451
- ### Deprecations
452
-
453
- * Deprecated `quoted_locking_column` method, which isn't used anywhere.
454
-
455
- * Deprecated `ConnectionAdapters::SchemaStatements#distinct`,
456
- as it is no longer used by internals. ([Pull Request](https://github.com/rails/rails/pull/10556))
457
-
458
- * Deprecated `rake db:test:*` tasks as the test database is now
459
- automatically maintained. See railties release notes. ([Pull
460
- Request](https://github.com/rails/rails/pull/13528))
461
-
462
- * Deprecate unused `ActiveRecord::Base.symbolized_base_class`
463
- and `ActiveRecord::Base.symbolized_sti_name` without
464
- replacement. [Commit](https://github.com/rails/rails/commit/97e7ca48c139ea5cce2fa9b4be631946252a1ebd)
465
-
466
- ### Notable changes
467
-
468
- * Default scopes are no longer overriden by chained conditions.
469
-
470
- Before this change when you defined a `default_scope` in a model
471
- it was overriden by chained conditions in the same field. Now it
472
- is merged like any other scope. [More Details](upgrading_ruby_on_rails.html#changes-on-default-scopes).
473
-
474
- * Added `ActiveRecord::Base.to_param` for convenient "pretty" URLs derived from
475
- a model's attribute or
476
- method. ([Pull Request](https://github.com/rails/rails/pull/12891))
477
-
478
- * Added `ActiveRecord::Base.no_touching`, which allows ignoring touch on
479
- models. ([Pull Request](https://github.com/rails/rails/pull/12772))
480
-
481
- * Unify boolean type casting for `MysqlAdapter` and `Mysql2Adapter`.
482
- `type_cast` will return `1` for `true` and `0` for `false`. ([Pull Request](https://github.com/rails/rails/pull/12425))
483
-
484
- * `.unscope` now removes conditions specified in
485
- `default_scope`. ([Commit](https://github.com/rails/rails/commit/94924dc32baf78f13e289172534c2e71c9c8cade))
486
-
487
- * Added `ActiveRecord::QueryMethods#rewhere` which will overwrite an existing,
488
- named where condition. ([Commit](https://github.com/rails/rails/commit/f950b2699f97749ef706c6939a84dfc85f0b05f2))
489
-
490
- * Extended `ActiveRecord::Base#cache_key` to take an optional list of timestamp
491
- attributes of which the highest will be used. ([Commit](https://github.com/rails/rails/commit/e94e97ca796c0759d8fcb8f946a3bbc60252d329))
492
-
493
- * Added `ActiveRecord::Base#enum` for declaring enum attributes where the values
494
- map to integers in the database, but can be queried by
495
- name. ([Commit](https://github.com/rails/rails/commit/db41eb8a6ea88b854bf5cd11070ea4245e1639c5))
496
-
497
- * Type cast json values on write, so that the value is consistent with reading
498
- from the database. ([Pull Request](https://github.com/rails/rails/pull/12643))
499
-
500
- * Type cast hstore values on write, so that the value is consistent
501
- with reading from the database. ([Commit](https://github.com/rails/rails/commit/5ac2341fab689344991b2a4817bd2bc8b3edac9d))
502
-
503
- * Make `next_migration_number` accessible for third party
504
- generators. ([Pull Request](https://github.com/rails/rails/pull/12407))
505
-
506
- * Calling `update_attributes` will now throw an `ArgumentError` whenever it
507
- gets a `nil` argument. More specifically, it will throw an error if the
508
- argument that it gets passed does not respond to to
509
- `stringify_keys`. ([Pull Request](https://github.com/rails/rails/pull/9860))
510
-
511
- * `CollectionAssociation#first`/`#last` (e.g. `has_many`) use a `LIMIT`ed
512
- query to fetch results rather than loading the entire
513
- collection. ([Pull Request](https://github.com/rails/rails/pull/12137))
514
-
515
- * `inspect` on Active Record model classes does not initiate a new
516
- connection. This means that calling `inspect`, when the database is missing,
517
- will no longer raise an exception. ([Pull Request](https://github.com/rails/rails/pull/11014))
518
-
519
- * Removed column restrictions for `count`, let the database raise if the SQL is
520
- invalid. ([Pull Request](https://github.com/rails/rails/pull/10710))
521
-
522
- * Rails now automatically detects inverse associations. If you do not set the
523
- `:inverse_of` option on the association, then Active Record will guess the
524
- inverse association based on heuristics. ([Pull Request](https://github.com/rails/rails/pull/10886))
525
-
526
- * Handle aliased attributes in ActiveRecord::Relation. When using symbol keys,
527
- ActiveRecord will now translate aliased attribute names to the actual column
528
- name used in the database. ([Pull Request](https://github.com/rails/rails/pull/7839))
529
-
530
- * The ERB in fixture files is no longer evaluated in the context of the main
531
- object. Helper methods used by multiple fixtures should be defined on modules
532
- included in `ActiveRecord::FixtureSet.context_class`. ([Pull Request](https://github.com/rails/rails/pull/13022))
533
-
534
- * Don't create or drop the test database if RAILS_ENV is specified
535
- explicitly. ([Pull Request](https://github.com/rails/rails/pull/13629))
536
-
537
- * `Relation` no longer has mutator methods like `#map!` and `#delete_if`. Convert
538
- to an `Array` by calling `#to_a` before using these methods. ([Pull Request](https://github.com/rails/rails/pull/13314))
539
-
540
- * `find_in_batches`, `find_each`, `Result#each` and `Enumerable#index_by` now
541
- return an `Enumerator` that can calculate its
542
- size. ([Pull Request](https://github.com/rails/rails/pull/13938))
543
-
544
- * `scope`, `enum` and Associations now raise on "dangerous" name
545
- conflicts. ([Pull Request](https://github.com/rails/rails/pull/13450),
546
- [Pull Request](https://github.com/rails/rails/pull/13896))
547
-
548
- * `second` through `fifth` methods act like the `first`
549
- finder. ([Pull Request](https://github.com/rails/rails/pull/13757))
550
-
551
- * Make `touch` fire the `after_commit` and `after_rollback`
552
- callbacks. ([Pull Request](https://github.com/rails/rails/pull/12031))
553
-
554
- * Enable partial indexes for `sqlite >= 3.8.0`.
555
- ([Pull Request](https://github.com/rails/rails/pull/13350))
556
-
557
- * Make `change_column_null`
558
- revertable. ([Commit](https://github.com/rails/rails/commit/724509a9d5322ff502aefa90dd282ba33a281a96))
559
-
560
- * Added a flag to disable schema dump after migration. This is set to `false`
561
- by default in the production environment for new applications.
562
- ([Pull Request](https://github.com/rails/rails/pull/13948))
563
-
564
-
565
- Active Model
566
- ------------
567
-
568
- Please refer to the
569
- [Changelog](https://github.com/rails/rails/blob/4-1-stable/activemodel/CHANGELOG.md)
570
- for detailed changes.
571
-
572
- ### Deprecations
573
-
574
- * Deprecate `Validator#setup`. This should be done manually now in the
575
- validator's constructor. ([Commit](https://github.com/rails/rails/commit/7d84c3a2f7ede0e8d04540e9c0640de7378e9b3a))
576
-
577
- ### Notable changes
578
-
579
- * Added new API methods `reset_changes` and `changes_applied` to
580
- `ActiveModel::Dirty` that control changes state.
581
-
582
- * Ability to specify multiple contexts when defining a
583
- validation. ([Pull Request](https://github.com/rails/rails/pull/13754))
584
-
585
- * `attribute_changed?` now accepts a hash to check if the attribute was changed
586
- `:from` and/or `:to` a given
587
- value. ([Pull Request](https://github.com/rails/rails/pull/13131))
588
-
589
-
590
- Active Support
591
- --------------
592
-
593
- Please refer to the
594
- [Changelog](https://github.com/rails/rails/blob/4-1-stable/activesupport/CHANGELOG.md)
595
- for detailed changes.
596
-
597
-
598
- ### Removals
599
-
600
- * Removed `MultiJSON` dependency. As a result, `ActiveSupport::JSON.decode`
601
- no longer accepts an options hash for `MultiJSON`. ([Pull Request](https://github.com/rails/rails/pull/10576) / [More Details](upgrading_ruby_on_rails.html#changes-in-json-handling))
602
-
603
- * Removed support for the `encode_json` hook used for encoding custom objects into
604
- JSON. This feature has been extracted into the [activesupport-json_encoder](https://github.com/rails/activesupport-json_encoder)
605
- gem.
606
- ([Related Pull Request](https://github.com/rails/rails/pull/12183) /
607
- [More Details](upgrading_ruby_on_rails.html#changes-in-json-handling))
608
-
609
- * Removed deprecated `ActiveSupport::JSON::Variable` with no replacement.
610
-
611
- * Removed deprecated `String#encoding_aware?` core extensions (`core_ext/string/encoding`).
612
-
613
- * Removed deprecated `Module#local_constant_names` in favor of `Module#local_constants`.
614
-
615
- * Removed deprecated `DateTime.local_offset` in favor of `DateTime.civil_from_format`.
616
-
617
- * Removed deprecated `Logger` core extensions (`core_ext/logger.rb`).
618
-
619
- * Removed deprecated `Time#time_with_datetime_fallback`, `Time#utc_time` and
620
- `Time#local_time` in favor of `Time#utc` and `Time#local`.
621
-
622
- * Removed deprecated `Hash#diff` with no replacement.
623
-
624
- * Removed deprecated `Date#to_time_in_current_zone` in favor of `Date#in_time_zone`.
625
-
626
- * Removed deprecated `Proc#bind` with no replacement.
627
-
628
- * Removed deprecated `Array#uniq_by` and `Array#uniq_by!`, use native
629
- `Array#uniq` and `Array#uniq!` instead.
630
-
631
- * Removed deprecated `ActiveSupport::BasicObject`, use
632
- `ActiveSupport::ProxyObject` instead.
633
-
634
- * Removed deprecated `BufferedLogger`, use `ActiveSupport::Logger` instead.
635
-
636
- * Removed deprecated `assert_present` and `assert_blank` methods, use `assert
637
- object.blank?` and `assert object.present?` instead.
638
-
639
- * Remove deprecated `#filter` method for filter objects, use the corresponding
640
- method instead (e.g. `#before` for a before filter).
641
-
642
- * Removed 'cow' => 'kine' irregular inflection from default
643
- inflections. ([Commit](https://github.com/rails/rails/commit/c300dca9963bda78b8f358dbcb59cabcdc5e1dc9))
644
-
645
- ### Deprecations
646
-
647
- * Deprecated `Numeric#{ago,until,since,from_now}`, the user is expected to
648
- explicitly convert the value into an AS::Duration, i.e. `5.ago` => `5.seconds.ago`
649
- ([Pull Request](https://github.com/rails/rails/pull/12389))
650
-
651
- * Deprecated the require path `active_support/core_ext/object/to_json`. Require
652
- `active_support/core_ext/object/json` instead. ([Pull Request](https://github.com/rails/rails/pull/12203))
653
-
654
- * Deprecated `ActiveSupport::JSON::Encoding::CircularReferenceError`. This feature
655
- has been extracted into the [activesupport-json_encoder](https://github.com/rails/activesupport-json_encoder)
656
- gem.
657
- ([Pull Request](https://github.com/rails/rails/pull/12785) /
658
- [More Details](upgrading_ruby_on_rails.html#changes-in-json-handling))
659
-
660
- * Deprecated `ActiveSupport.encode_big_decimal_as_string` option. This feature has
661
- been extracted into the [activesupport-json_encoder](https://github.com/rails/activesupport-json_encoder)
662
- gem.
663
- ([Pull Request](https://github.com/rails/rails/pull/13060) /
664
- [More Details](upgrading_ruby_on_rails.html#changes-in-json-handling))
665
-
666
- * Deprecate custom `BigDecimal`
667
- serialization. ([Pull Request](https://github.com/rails/rails/pull/13911))
668
-
669
- ### Notable changes
670
-
671
- * `ActiveSupport`'s JSON encoder has been rewritten to take advantage of the
672
- JSON gem rather than doing custom encoding in pure-Ruby.
673
- ([Pull Request](https://github.com/rails/rails/pull/12183) /
674
- [More Details](upgrading_ruby_on_rails.html#changes-in-json-handling))
675
-
676
- * Improved compatibility with the JSON gem.
677
- ([Pull Request](https://github.com/rails/rails/pull/12862) /
678
- [More Details](upgrading_ruby_on_rails.html#changes-in-json-handling))
679
-
680
- * Added `ActiveSupport::Testing::TimeHelpers#travel` and `#travel_to`. These
681
- methods change current time to the given time or duration by stubbing
682
- `Time.now` and `Date.today`.
683
-
684
- * Added `ActiveSupport::Testing::TimeHelpers#travel_back`. This method returns
685
- the current time to the original state, by removing the stubs added by `travel`
686
- and `travel_to`. ([Pull Request](https://github.com/rails/rails/pull/13884))
687
-
688
- * Added `Numeric#in_milliseconds`, like `1.hour.in_milliseconds`, so we can feed
689
- them to JavaScript functions like
690
- `getTime()`. ([Commit](https://github.com/rails/rails/commit/423249504a2b468d7a273cbe6accf4f21cb0e643))
691
-
692
- * Added `Date#middle_of_day`, `DateTime#middle_of_day` and `Time#middle_of_day`
693
- methods. Also added `midday`, `noon`, `at_midday`, `at_noon` and
694
- `at_middle_of_day` as
695
- aliases. ([Pull Request](https://github.com/rails/rails/pull/10879))
696
-
697
- * Added `Date#all_week/month/quarter/year` for generating date
698
- ranges. ([Pull Request](https://github.com/rails/rails/pull/9685))
699
-
700
- * Added `Time.zone.yesterday` and
701
- `Time.zone.tomorrow`. ([Pull Request](https://github.com/rails/rails/pull/12822))
702
-
703
- * Added `String#remove(pattern)` as a short-hand for the common pattern of
704
- `String#gsub(pattern,'')`. ([Commit](https://github.com/rails/rails/commit/5da23a3f921f0a4a3139495d2779ab0d3bd4cb5f))
705
-
706
- * Added `Hash#compact` and `Hash#compact!` for removing items with nil value
707
- from hash. ([Pull Request](https://github.com/rails/rails/pull/13632))
708
-
709
- * `blank?` and `present?` commit to return
710
- singletons. ([Commit](https://github.com/rails/rails/commit/126dc47665c65cd129967cbd8a5926dddd0aa514))
711
-
712
- * Default the new `I18n.enforce_available_locales` config to `true`, meaning
713
- `I18n` will make sure that all locales passed to it must be declared in the
714
- `available_locales`
715
- list. ([Pull Request](https://github.com/rails/rails/pull/13341))
716
-
717
- * Introduce `Module#concerning`: a natural, low-ceremony way to separate
718
- responsibilities within a
719
- class. ([Commit](https://github.com/rails/rails/commit/1eee0ca6de975b42524105a59e0521d18b38ab81))
720
-
721
- * Added `Object#presence_in` to simplify value whitelisting.
722
- ([Commit](https://github.com/rails/rails/commit/4edca106daacc5a159289eae255207d160f22396))
723
-
724
-
725
- Credits
726
- -------
727
-
728
- See the
729
- [full list of contributors to Rails](http://contributors.rubyonrails.org/) for
730
- the many people who spent many hours making Rails, the stable and robust
731
- framework it is. Kudos to all of them.