aboutsummaryrefslogtreecommitdiffstats
path: root/guides/source/5_1_release_notes.md
diff options
context:
space:
mode:
Diffstat (limited to 'guides/source/5_1_release_notes.md')
-rw-r--r--guides/source/5_1_release_notes.md158
1 files changed, 158 insertions, 0 deletions
diff --git a/guides/source/5_1_release_notes.md b/guides/source/5_1_release_notes.md
index f195922dca..f3c8f1f155 100644
--- a/guides/source/5_1_release_notes.md
+++ b/guides/source/5_1_release_notes.md
@@ -33,22 +33,180 @@ Major Features
[Pull Request](https://github.com/rails/rails/pull/26836)
+Rails 5.1 will allow managing JavaScript dependencies
+from NPM via Yarn.This will make it easy to use libraries like React, VueJS
+or any other library from NPM world. The Yarn support is integrated with
+the asset pipeline so that all dependencies will work seamlessly with the
+Rails 5.1 app.
+
+### Optional Webpack support
+
+Rails apps can use Webpack easily now using the [Webpacker](https://github.com/rails/webpacker)
+gem. New Rails 5.1 app can be generated using `--webpack` switch to enable Webpack integration.
+
+This is fully compatible with the asset pipeline, which you can continue to use for
+images, fonts, sounds, whatever. You can even have some JavaScript on the asset pipeline
+and some done via Webpack. It’s all managed via Yarn that’s on by default.
+
+### jQuery no longer a default dependency
+
+jQuery was required by default in earlier versions of Rails to provide features like
+`data-remote`, `data-confirm` and other parts of Rails UJS. It is no longer required,
+as the `rails-ujs` is now written using plain vanilla JavaScript.
+
+You can still use jQuery if needed, but it is no longer required by default.
+
### System tests
[Pull Request](https://github.com/rails/rails/pull/26703)
+Rails 5.1 has support for writing Capybara tests baked in in the form of
+System tests. Now you don't have to worry about configuring Capybara and
+database cleaning strategies for such tests. Rails 5.1 provides a wrapper
+for running such tests in chrome with additional features such as failure
+screenshots.
+
### Encrypted secrets
[Pull Request](https://github.com/rails/rails/pull/28038)
+Rails will now allow management of application secrets in a secure way
+built on top of [sekrets](https://github.com/ahoward/sekrets) gem.
+
+Run `bin/rails secrets:setup` to setup a new encrypted secrets file. It will
+generate a master key which needs to be stored outside of the repository and it will
+allow checking in the actual secrets in the revision control.
+
+The secrets will be decrypted in production either using `RAILS_MASTER_KEY` from
+the ENV or injected key file.
+
### Parameterized mailers
[Pull Request](https://github.com/rails/rails/pull/27825)
+Allows specifying common params used for all methods in a mailer class
+to share instance variables, headers and other common setup.
+
+``` ruby
+class InvitationsMailer < ApplicationMailer
+
+ before_action { @inviter, @invitee = params[:inviter], params[:invitee] }
+ before_action { @account = params[:inviter].account }
+
+ def account_invitation
+ mail subject: "#{@inviter.name} invited you to their Basecamp (#{@account.name})"
+ end
+
+ def project_invitation
+ @project = params[:project]
+ @summarizer = ProjectInvitationSummarizer.new(@project.bucket)
+
+ mail subject: "#{@inviter.name.familiar} added you to a project in Basecamp (#{@account.name})"
+ end
+end
+
+InvitationsMailer.with(inviter: person_a, invitee: person_b).account_invitation.deliver_later
+```
+
### Direct & resolved routes
[Pull Request](https://github.com/rails/rails/pull/23138)
+Rails 5.1 has added two new methods - `resolve` and `direct` to the routing
+DSL.
+
+The `resolve` method allows customizing polymorphic mapping of models.
+
+``` ruby
+resource :basket
+
+resolve(class: "Basket") { [:basket] }
+```
+
+``` erb
+<%= form_for @basket do |form| %>
+ <!-- basket form -->
+<% end %>
+```
+
+This will generate the singular URL `/basket` instead of usual `/baskets/:id`.
+
+The `direct` method allows creation of custom URL helpers.
+
+``` ruby
+direct(:homepage) { "http://www.rubyonrails.org" }
+
+>> homepage_url
+=> "http://www.rubyonrails.org"
+```
+
+The return value of the block must be a valid argument for the `url_for`
+method. So you can pass a valid string URL, or a hash, or an array, or an
+Active Model instance or an Active Model class.
+
+``` ruby
+direct :commentable do |model|
+ [ model, anchor: model.dom_id ]
+end
+
+direct :main do
+ { controller: 'pages', action: 'index', subdomain: 'www' }
+end
+```
+
+### Unification of form_for and form_tag into form_with
+
+[Pull Request](https://github.com/rails/rails/pull/26976)
+
+Before Rails 5.1, there were two interfaces for handling HTML forms,
+`form_for` for model instances and `form_tag` for custom URLs.
+
+Rails 5.1 combines both of these interfaces with `form_with` and
+can generate form tags based on URLs, scopes or models.
+
+``` erb
+# Using just a URL:
+
+<%= form_with url: posts_path do |form| %>
+ <%= form.text_field :title %>
+<% end %>
+
+# =>
+<form action="/posts" method="post" data-remote="true">
+ <input type="text" name="title">
+</form>
+
+# Adding a scope prefixes the input field names:
+
+<%= form_with scope: :post, url: posts_path do |form| %>
+ <%= form.text_field :title %>
+<% end %>
+# =>
+<form action="/posts" method="post" data-remote="true">
+ <input type="text" name="post[title]">
+</form>
+
+# Using a model infers both the URL and scope:
+
+<%= form_with model: Post.new do |form| %>
+ <%= form.text_field :title %>
+<% end %>
+# =>
+<form action="/posts" method="post" data-remote="true">
+ <input type="text" name="post[title]">
+</form>
+
+# An existing model makes an update form and fills out field values:
+
+<%= form_with model: Post.first do |form| %>
+ <%= form.text_field :title %>
+<% end %>
+# =>
+<form action="/posts/1" method="post" data-remote="true">
+ <input type="hidden" name="_method" value="patch">
+ <input type="text" name="post[title]" value="<the title of the post>">
+</form>
+```
Railties
--------