Friday, November 15, 2024

Rails 8 demo, Rails World re-edited videos, NotificationAssertions and more!

Posted by vipulnsward

Hey everyone, Happy Friday!

Vipul here with the latest updates for This Week in Rails. Let’s dive in!

Rails 8: The Demo
In case you missed it, Rails 8 was released last week. A new demo from DHH is now up Rails 8: The Demo showcasing its usage. The video covers getting started with Rails 8 by building a basic blog, adding a WYSIWYG editor, putting it behind authentication, making it available as PWA, and deploying to production. In just 30 minutes!

Rails World re-edited videos!
All Rails World videos have been re-edited and are up on YouTube! They also now have Japanese, Brazilian Portuguese, and Spanish subtitles thanks to Happy Scribe (a transcription platform built on Rails).

Add ActiveSupport::Testing::NotificationAssertions test helper module
With this addition, we can now use various test helper methods for notification assertions:

assert_notification("post.submitted", title: "Cool Post") do
  post.submit(title: "Cool Post") # => emits matching notification
end

assert_notifications_count("post.submitted", 1) do
  post.submit(title: "Cool Post") 
end

assert_no_notifications("post.submitted") do
  post.destroy
end

notifications = capture_notifications("post.submitted") do 
  post.submit(title: "Cool Post") # => emits matching notification
end

Put back the quiet assets config in development
This config was removed during Sprockets removal. It is still supported by propshaft and without this config the terminal is cluttered with assets request log. This change bring back this config to silence these logs in development by default.

Allow path regex in SilenceRequest middleware
Rails::Rack::SilenceRequest middleware now supports regex in path filtering. For example

config.middleware.insert_before Rails::Rack::Logger,
                                Rails::Rack::SilenceRequest, path: /up$/

will silence logs from paths ending in “up”.

Allow hidden_field(_tag) to accept a custom autocomplete value
Previously a change introduced an enforced autocomplete=”off” to all hidden inputs generated by Rails to fix a Firefox bug.

But it’s also a legitimate use-case to specify an autocomplete with a value such as username and a value on a hidden input. This hints to the browser that (in this example) the username of a password reset form is what we’ve provided as the value and the password manager can store it as such.

This commit only sets autocomplete=”off” if another autocomplete value isn’t provided.

Parallel tests with :number_of_processors uses cgroups-aware usable processor count
Parallel tests with :number_of_processors uses cgroups-aware usable processor count, which is now correctly available for use via Concurrent.available_processor_count.

Ensure normalized attribute queries are consistent for nil and normalized nil
This change ensures that normalized attribute queries are consistent for nil and normalized nil. Ex:

class Aircraft < ApplicationRecord
  normalizes :name, with: -> name { name.presence&.titlecase }
end

# With this change, these queries are now consistent:
Aircraft.where(name: nil).to_sql  === Aircraft.where(name: "").to_sql

Fix regression when calling sum with a grouped calculation
This change fixes a regression with sum when performing a grouped calculation. For example User.group(:friendly).sum no longer worked, which is now fixed.

Don’t add bin/thrust if thruster is not in Gemfile
Running app:update after upgrading to Rails 8.0.0 results in bin/thrust being added even though thruster is not in the Gemfile.

This fixes it by checking if thruster is in the Gemfile to set the --skip-thruster option when running the generator in the app:update command.

You can view the whole list of changes here. We had 37 contributors to the Rails codebase this past week!

Until next time!

Subscribe to get these updates mailed to you.