rails 4.0.0 → 4.2.11.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (190) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +30 -23
  3. data/guides/CHANGELOG.md +108 -6
  4. data/guides/Rakefile +21 -6
  5. data/guides/assets/images/akshaysurve.jpg +0 -0
  6. data/guides/assets/images/edge_badge.png +0 -0
  7. data/guides/assets/images/feature_tile.gif +0 -0
  8. data/guides/assets/images/footer_tile.gif +0 -0
  9. data/guides/assets/images/fxn.png +0 -0
  10. data/guides/assets/images/getting_started/article_with_comments.png +0 -0
  11. data/guides/assets/images/getting_started/challenge.png +0 -0
  12. data/guides/assets/images/getting_started/confirm_dialog.png +0 -0
  13. data/guides/assets/images/getting_started/forbidden_attributes_for_new_article.png +0 -0
  14. data/guides/assets/images/getting_started/form_with_errors.png +0 -0
  15. data/guides/assets/images/getting_started/index_action_with_edit_link.png +0 -0
  16. data/guides/assets/images/getting_started/new_article.png +0 -0
  17. data/guides/assets/images/getting_started/rails_welcome.png +0 -0
  18. data/guides/assets/images/getting_started/routing_error_no_controller.png +0 -0
  19. data/guides/assets/images/getting_started/routing_error_no_route_matches.png +0 -0
  20. data/guides/assets/images/getting_started/show_action_for_articles.png +0 -0
  21. data/guides/assets/images/getting_started/template_is_missing_articles_new.png +0 -0
  22. data/guides/assets/images/getting_started/unknown_action_create_for_articles.png +0 -0
  23. data/guides/assets/images/getting_started/unknown_action_new_for_articles.png +0 -0
  24. data/guides/assets/images/header_tile.gif +0 -0
  25. data/guides/assets/images/icons/README +1 -1
  26. data/guides/assets/images/icons/callouts/11.png +0 -0
  27. data/guides/assets/images/icons/callouts/12.png +0 -0
  28. data/guides/assets/images/icons/callouts/13.png +0 -0
  29. data/guides/assets/images/icons/callouts/15.png +0 -0
  30. data/guides/assets/images/icons/caution.png +0 -0
  31. data/guides/assets/images/icons/example.png +0 -0
  32. data/guides/assets/images/radar.png +0 -0
  33. data/guides/assets/images/rails4_features.png +0 -0
  34. data/guides/assets/images/rails_guides_kindle_cover.jpg +0 -0
  35. data/guides/assets/images/vijaydev.jpg +0 -0
  36. data/guides/assets/javascripts/guides.js +36 -34
  37. data/guides/assets/stylesheets/main.css +6 -2
  38. data/guides/assets/stylesheets/print.css +1 -1
  39. data/guides/bug_report_templates/action_controller_gem.rb +47 -0
  40. data/guides/bug_report_templates/action_controller_master.rb +54 -0
  41. data/guides/bug_report_templates/active_record_gem.rb +5 -2
  42. data/guides/bug_report_templates/active_record_master.rb +3 -2
  43. data/guides/bug_report_templates/generic_gem.rb +15 -0
  44. data/guides/bug_report_templates/generic_master.rb +26 -0
  45. data/guides/rails_guides.rb +23 -4
  46. data/guides/rails_guides/generator.rb +1 -1
  47. data/guides/rails_guides/helpers.rb +4 -2
  48. data/guides/rails_guides/levenshtein.rb +27 -21
  49. data/guides/rails_guides/markdown.rb +11 -7
  50. data/guides/rails_guides/markdown/renderer.rb +1 -1
  51. data/guides/source/2_2_release_notes.md +3 -3
  52. data/guides/source/2_3_release_notes.md +12 -12
  53. data/guides/source/3_0_release_notes.md +10 -13
  54. data/guides/source/3_1_release_notes.md +7 -4
  55. data/guides/source/3_2_release_notes.md +17 -14
  56. data/guides/source/4_0_release_notes.md +110 -54
  57. data/guides/source/4_1_release_notes.md +730 -0
  58. data/guides/source/4_2_release_notes.md +877 -0
  59. data/guides/source/_license.html.erb +1 -1
  60. data/guides/source/_welcome.html.erb +6 -2
  61. data/guides/source/action_controller_overview.md +223 -57
  62. data/guides/source/action_mailer_basics.md +129 -76
  63. data/guides/source/action_view_overview.md +247 -246
  64. data/guides/source/active_job_basics.md +339 -0
  65. data/guides/source/active_model_basics.md +374 -20
  66. data/guides/source/active_record_basics.md +46 -45
  67. data/guides/source/active_record_callbacks.md +83 -28
  68. data/guides/source/{migrations.md → active_record_migrations.md} +191 -275
  69. data/guides/source/active_record_postgresql.md +433 -0
  70. data/guides/source/active_record_querying.md +382 -300
  71. data/guides/source/active_record_validations.md +64 -55
  72. data/guides/source/active_support_core_extensions.md +229 -187
  73. data/guides/source/active_support_instrumentation.md +23 -22
  74. data/guides/source/api_documentation_guidelines.md +167 -15
  75. data/guides/source/asset_pipeline.md +768 -294
  76. data/guides/source/association_basics.md +188 -96
  77. data/guides/source/autoloading_and_reloading_constants.md +1311 -0
  78. data/guides/source/caching_with_rails.md +45 -11
  79. data/guides/source/command_line.md +96 -65
  80. data/guides/source/configuring.md +404 -70
  81. data/guides/source/contributing_to_ruby_on_rails.md +270 -130
  82. data/guides/source/credits.html.erb +7 -3
  83. data/guides/source/debugging_rails_applications.md +471 -284
  84. data/guides/source/development_dependencies_install.md +115 -21
  85. data/guides/source/documents.yaml +31 -9
  86. data/guides/source/engines.md +737 -291
  87. data/guides/source/form_helpers.md +137 -89
  88. data/guides/source/generators.md +60 -28
  89. data/guides/source/getting_started.md +1007 -596
  90. data/guides/source/i18n.md +178 -96
  91. data/guides/source/index.html.erb +2 -1
  92. data/guides/source/initialization.md +248 -104
  93. data/guides/source/kindle/toc.html.erb +1 -1
  94. data/guides/source/layout.html.erb +14 -22
  95. data/guides/source/layouts_and_rendering.md +78 -46
  96. data/guides/source/maintenance_policy.md +78 -0
  97. data/guides/source/nested_model_forms.md +10 -7
  98. data/guides/source/plugins.md +66 -57
  99. data/guides/source/rails_application_templates.md +49 -12
  100. data/guides/source/rails_on_rack.md +50 -60
  101. data/guides/source/routing.md +190 -139
  102. data/guides/source/ruby_on_rails_guides_guidelines.md +12 -13
  103. data/guides/source/security.md +134 -83
  104. data/guides/source/testing.md +322 -200
  105. data/guides/source/upgrading_ruby_on_rails.md +834 -37
  106. data/guides/source/working_with_javascript_in_rails.md +36 -26
  107. data/guides/w3c_validator.rb +2 -0
  108. metadata +93 -116
  109. data/guides/assets/images/getting_started/forbidden_attributes_for_new_post.png +0 -0
  110. data/guides/assets/images/getting_started/new_post.png +0 -0
  111. data/guides/assets/images/getting_started/post_with_comments.png +0 -0
  112. data/guides/assets/images/getting_started/show_action_for_posts.png +0 -0
  113. data/guides/assets/images/getting_started/template_is_missing_posts_new.png +0 -0
  114. data/guides/assets/images/getting_started/undefined_method_post_path.png +0 -0
  115. data/guides/assets/images/getting_started/unknown_action_create_for_posts.png +0 -0
  116. data/guides/assets/images/getting_started/unknown_action_new_for_posts.png +0 -0
  117. data/guides/assets/images/jaimeiniesta.jpg +0 -0
  118. data/guides/code/getting_started/Gemfile +0 -43
  119. data/guides/code/getting_started/Gemfile.lock +0 -150
  120. data/guides/code/getting_started/README.rdoc +0 -28
  121. data/guides/code/getting_started/Rakefile +0 -6
  122. data/guides/code/getting_started/app/assets/javascripts/application.js +0 -16
  123. data/guides/code/getting_started/app/assets/javascripts/comments.js.coffee +0 -3
  124. data/guides/code/getting_started/app/assets/javascripts/posts.js.coffee +0 -3
  125. data/guides/code/getting_started/app/assets/javascripts/welcome.js.coffee +0 -3
  126. data/guides/code/getting_started/app/assets/stylesheets/application.css +0 -13
  127. data/guides/code/getting_started/app/assets/stylesheets/comments.css.scss +0 -3
  128. data/guides/code/getting_started/app/assets/stylesheets/posts.css.scss +0 -3
  129. data/guides/code/getting_started/app/assets/stylesheets/welcome.css.scss +0 -3
  130. data/guides/code/getting_started/app/controllers/application_controller.rb +0 -5
  131. data/guides/code/getting_started/app/controllers/comments_controller.rb +0 -17
  132. data/guides/code/getting_started/app/controllers/posts_controller.rb +0 -47
  133. data/guides/code/getting_started/app/controllers/welcome_controller.rb +0 -4
  134. data/guides/code/getting_started/app/helpers/application_helper.rb +0 -2
  135. data/guides/code/getting_started/app/helpers/comments_helper.rb +0 -2
  136. data/guides/code/getting_started/app/helpers/posts_helper.rb +0 -2
  137. data/guides/code/getting_started/app/helpers/welcome_helper.rb +0 -2
  138. data/guides/code/getting_started/app/models/comment.rb +0 -3
  139. data/guides/code/getting_started/app/models/post.rb +0 -7
  140. data/guides/code/getting_started/app/views/comments/_comment.html.erb +0 -15
  141. data/guides/code/getting_started/app/views/comments/_form.html.erb +0 -13
  142. data/guides/code/getting_started/app/views/layouts/application.html.erb +0 -14
  143. data/guides/code/getting_started/app/views/posts/_form.html.erb +0 -27
  144. data/guides/code/getting_started/app/views/posts/edit.html.erb +0 -5
  145. data/guides/code/getting_started/app/views/posts/index.html.erb +0 -21
  146. data/guides/code/getting_started/app/views/posts/new.html.erb +0 -5
  147. data/guides/code/getting_started/app/views/posts/show.html.erb +0 -18
  148. data/guides/code/getting_started/app/views/welcome/index.html.erb +0 -3
  149. data/guides/code/getting_started/bin/bundle +0 -4
  150. data/guides/code/getting_started/bin/rails +0 -4
  151. data/guides/code/getting_started/bin/rake +0 -4
  152. data/guides/code/getting_started/config.ru +0 -4
  153. data/guides/code/getting_started/config/application.rb +0 -18
  154. data/guides/code/getting_started/config/boot.rb +0 -4
  155. data/guides/code/getting_started/config/database.yml +0 -25
  156. data/guides/code/getting_started/config/environment.rb +0 -5
  157. data/guides/code/getting_started/config/environments/development.rb +0 -30
  158. data/guides/code/getting_started/config/environments/production.rb +0 -80
  159. data/guides/code/getting_started/config/environments/test.rb +0 -36
  160. data/guides/code/getting_started/config/initializers/backtrace_silencers.rb +0 -7
  161. data/guides/code/getting_started/config/initializers/filter_parameter_logging.rb +0 -4
  162. data/guides/code/getting_started/config/initializers/inflections.rb +0 -16
  163. data/guides/code/getting_started/config/initializers/locale.rb +0 -9
  164. data/guides/code/getting_started/config/initializers/mime_types.rb +0 -5
  165. data/guides/code/getting_started/config/initializers/secret_token.rb +0 -12
  166. data/guides/code/getting_started/config/initializers/session_store.rb +0 -3
  167. data/guides/code/getting_started/config/initializers/wrap_parameters.rb +0 -14
  168. data/guides/code/getting_started/config/locales/en.yml +0 -23
  169. data/guides/code/getting_started/config/routes.rb +0 -7
  170. data/guides/code/getting_started/db/migrate/20130122042648_create_posts.rb +0 -10
  171. data/guides/code/getting_started/db/migrate/20130122045842_create_comments.rb +0 -11
  172. data/guides/code/getting_started/db/schema.rb +0 -33
  173. data/guides/code/getting_started/db/seeds.rb +0 -7
  174. data/guides/code/getting_started/public/404.html +0 -58
  175. data/guides/code/getting_started/public/422.html +0 -58
  176. data/guides/code/getting_started/public/500.html +0 -57
  177. data/guides/code/getting_started/public/favicon.ico +0 -0
  178. data/guides/code/getting_started/public/robots.txt +0 -5
  179. data/guides/code/getting_started/test/controllers/comments_controller_test.rb +0 -7
  180. data/guides/code/getting_started/test/controllers/posts_controller_test.rb +0 -7
  181. data/guides/code/getting_started/test/controllers/welcome_controller_test.rb +0 -9
  182. data/guides/code/getting_started/test/fixtures/comments.yml +0 -11
  183. data/guides/code/getting_started/test/fixtures/posts.yml +0 -9
  184. data/guides/code/getting_started/test/helpers/comments_helper_test.rb +0 -4
  185. data/guides/code/getting_started/test/helpers/posts_helper_test.rb +0 -4
  186. data/guides/code/getting_started/test/helpers/welcome_helper_test.rb +0 -4
  187. data/guides/code/getting_started/test/models/comment_test.rb +0 -7
  188. data/guides/code/getting_started/test/models/post_test.rb +0 -7
  189. data/guides/code/getting_started/test/test_helper.rb +0 -15
  190. data/guides/source/kindle/KINDLE.md +0 -26
@@ -0,0 +1,730 @@
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 learn about various bug
12
+ fixes and changes, please refer to the change logs or check out the [list of
13
+ commits](https://github.com/rails/rails/commits/4-1-stable) in the main Rails
14
+ 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 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#class-ActionMailer::Base-label-Previewing+emails)
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 a `: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 overridden by chained conditions.
469
+
470
+ Before this change when you defined a `default_scope` in a model
471
+ it was overridden 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
+ revertible. ([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
+ Active Model
565
+ ------------
566
+
567
+ Please refer to the
568
+ [Changelog](https://github.com/rails/rails/blob/4-1-stable/activemodel/CHANGELOG.md)
569
+ for detailed changes.
570
+
571
+ ### Deprecations
572
+
573
+ * Deprecate `Validator#setup`. This should be done manually now in the
574
+ validator's constructor. ([Commit](https://github.com/rails/rails/commit/7d84c3a2f7ede0e8d04540e9c0640de7378e9b3a))
575
+
576
+ ### Notable changes
577
+
578
+ * Added new API methods `reset_changes` and `changes_applied` to
579
+ `ActiveModel::Dirty` that control changes state.
580
+
581
+ * Ability to specify multiple contexts when defining a
582
+ validation. ([Pull Request](https://github.com/rails/rails/pull/13754))
583
+
584
+ * `attribute_changed?` now accepts a hash to check if the attribute was changed
585
+ `:from` and/or `:to` a given
586
+ value. ([Pull Request](https://github.com/rails/rails/pull/13131))
587
+
588
+
589
+ Active Support
590
+ --------------
591
+
592
+ Please refer to the
593
+ [Changelog](https://github.com/rails/rails/blob/4-1-stable/activesupport/CHANGELOG.md)
594
+ for detailed changes.
595
+
596
+
597
+ ### Removals
598
+
599
+ * Removed `MultiJSON` dependency. As a result, `ActiveSupport::JSON.decode`
600
+ 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))
601
+
602
+ * Removed support for the `encode_json` hook used for encoding custom objects into
603
+ JSON. This feature has been extracted into the [activesupport-json_encoder](https://github.com/rails/activesupport-json_encoder)
604
+ gem.
605
+ ([Related Pull Request](https://github.com/rails/rails/pull/12183) /
606
+ [More Details](upgrading_ruby_on_rails.html#changes-in-json-handling))
607
+
608
+ * Removed deprecated `ActiveSupport::JSON::Variable` with no replacement.
609
+
610
+ * Removed deprecated `String#encoding_aware?` core extensions (`core_ext/string/encoding`).
611
+
612
+ * Removed deprecated `Module#local_constant_names` in favor of `Module#local_constants`.
613
+
614
+ * Removed deprecated `DateTime.local_offset` in favor of `DateTime.civil_from_format`.
615
+
616
+ * Removed deprecated `Logger` core extensions (`core_ext/logger.rb`).
617
+
618
+ * Removed deprecated `Time#time_with_datetime_fallback`, `Time#utc_time` and
619
+ `Time#local_time` in favor of `Time#utc` and `Time#local`.
620
+
621
+ * Removed deprecated `Hash#diff` with no replacement.
622
+
623
+ * Removed deprecated `Date#to_time_in_current_zone` in favor of `Date#in_time_zone`.
624
+
625
+ * Removed deprecated `Proc#bind` with no replacement.
626
+
627
+ * Removed deprecated `Array#uniq_by` and `Array#uniq_by!`, use native
628
+ `Array#uniq` and `Array#uniq!` instead.
629
+
630
+ * Removed deprecated `ActiveSupport::BasicObject`, use
631
+ `ActiveSupport::ProxyObject` instead.
632
+
633
+ * Removed deprecated `BufferedLogger`, use `ActiveSupport::Logger` instead.
634
+
635
+ * Removed deprecated `assert_present` and `assert_blank` methods, use `assert
636
+ object.blank?` and `assert object.present?` instead.
637
+
638
+ * Remove deprecated `#filter` method for filter objects, use the corresponding
639
+ method instead (e.g. `#before` for a before filter).
640
+
641
+ * Removed 'cow' => 'kine' irregular inflection from default
642
+ inflections. ([Commit](https://github.com/rails/rails/commit/c300dca9963bda78b8f358dbcb59cabcdc5e1dc9))
643
+
644
+ ### Deprecations
645
+
646
+ * Deprecated `Numeric#{ago,until,since,from_now}`, the user is expected to
647
+ explicitly convert the value into an AS::Duration, i.e. `5.ago` => `5.seconds.ago`
648
+ ([Pull Request](https://github.com/rails/rails/pull/12389))
649
+
650
+ * Deprecated the require path `active_support/core_ext/object/to_json`. Require
651
+ `active_support/core_ext/object/json` instead. ([Pull Request](https://github.com/rails/rails/pull/12203))
652
+
653
+ * Deprecated `ActiveSupport::JSON::Encoding::CircularReferenceError`. This feature
654
+ has been extracted into the [activesupport-json_encoder](https://github.com/rails/activesupport-json_encoder)
655
+ gem.
656
+ ([Pull Request](https://github.com/rails/rails/pull/12785) /
657
+ [More Details](upgrading_ruby_on_rails.html#changes-in-json-handling))
658
+
659
+ * Deprecated `ActiveSupport.encode_big_decimal_as_string` option. This feature has
660
+ been extracted into the [activesupport-json_encoder](https://github.com/rails/activesupport-json_encoder)
661
+ gem.
662
+ ([Pull Request](https://github.com/rails/rails/pull/13060) /
663
+ [More Details](upgrading_ruby_on_rails.html#changes-in-json-handling))
664
+
665
+ * Deprecate custom `BigDecimal`
666
+ serialization. ([Pull Request](https://github.com/rails/rails/pull/13911))
667
+
668
+ ### Notable changes
669
+
670
+ * `ActiveSupport`'s JSON encoder has been rewritten to take advantage of the
671
+ JSON gem rather than doing custom encoding in pure-Ruby.
672
+ ([Pull Request](https://github.com/rails/rails/pull/12183) /
673
+ [More Details](upgrading_ruby_on_rails.html#changes-in-json-handling))
674
+
675
+ * Improved compatibility with the JSON gem.
676
+ ([Pull Request](https://github.com/rails/rails/pull/12862) /
677
+ [More Details](upgrading_ruby_on_rails.html#changes-in-json-handling))
678
+
679
+ * Added `ActiveSupport::Testing::TimeHelpers#travel` and `#travel_to`. These
680
+ methods change current time to the given time or duration by stubbing
681
+ `Time.now` and `Date.today`.
682
+
683
+ * Added `ActiveSupport::Testing::TimeHelpers#travel_back`. This method returns
684
+ the current time to the original state, by removing the stubs added by `travel`
685
+ and `travel_to`. ([Pull Request](https://github.com/rails/rails/pull/13884))
686
+
687
+ * Added `Numeric#in_milliseconds`, like `1.hour.in_milliseconds`, so we can feed
688
+ them to JavaScript functions like
689
+ `getTime()`. ([Commit](https://github.com/rails/rails/commit/423249504a2b468d7a273cbe6accf4f21cb0e643))
690
+
691
+ * Added `Date#middle_of_day`, `DateTime#middle_of_day` and `Time#middle_of_day`
692
+ methods. Also added `midday`, `noon`, `at_midday`, `at_noon` and
693
+ `at_middle_of_day` as
694
+ aliases. ([Pull Request](https://github.com/rails/rails/pull/10879))
695
+
696
+ * Added `Date#all_week/month/quarter/year` for generating date
697
+ ranges. ([Pull Request](https://github.com/rails/rails/pull/9685))
698
+
699
+ * Added `Time.zone.yesterday` and
700
+ `Time.zone.tomorrow`. ([Pull Request](https://github.com/rails/rails/pull/12822))
701
+
702
+ * Added `String#remove(pattern)` as a short-hand for the common pattern of
703
+ `String#gsub(pattern,'')`. ([Commit](https://github.com/rails/rails/commit/5da23a3f921f0a4a3139495d2779ab0d3bd4cb5f))
704
+
705
+ * Added `Hash#compact` and `Hash#compact!` for removing items with nil value
706
+ from hash. ([Pull Request](https://github.com/rails/rails/pull/13632))
707
+
708
+ * `blank?` and `present?` commit to return
709
+ singletons. ([Commit](https://github.com/rails/rails/commit/126dc47665c65cd129967cbd8a5926dddd0aa514))
710
+
711
+ * Default the new `I18n.enforce_available_locales` config to `true`, meaning
712
+ `I18n` will make sure that all locales passed to it must be declared in the
713
+ `available_locales`
714
+ list. ([Pull Request](https://github.com/rails/rails/pull/13341))
715
+
716
+ * Introduce `Module#concerning`: a natural, low-ceremony way to separate
717
+ responsibilities within a
718
+ class. ([Commit](https://github.com/rails/rails/commit/1eee0ca6de975b42524105a59e0521d18b38ab81))
719
+
720
+ * Added `Object#presence_in` to simplify value whitelisting.
721
+ ([Commit](https://github.com/rails/rails/commit/4edca106daacc5a159289eae255207d160f22396))
722
+
723
+
724
+ Credits
725
+ -------
726
+
727
+ See the
728
+ [full list of contributors to Rails](http://contributors.rubyonrails.org/) for
729
+ the many people who spent many hours making Rails, the stable and robust
730
+ framework it is. Kudos to all of them.