Hi! This is Vipul bringing you the latest from this week’s changes in the Rails codebase.
Previously support was added to Rails::Dom::Testing
for HTML5. This may cause issues if we still want to rely on HTML4 based testing.
This change adds a new configuration option config.dom_testing_default_html_version
to allow users to configure the HTML version 4/5 to use when parsing HTML in test helpers.
Support filtering tests by line ranges
This change allows new syntax to filter tests by line ranges. For example, the following command runs tests from line 10 to 20.
$ rails test test/models/user_test.rb:10-20
Support NULLS NOT DISTINCT in Postgres 15+
This change adds full support NULLS [NOT] DISTINCT
for PostgreSQL 15+ indexes.
Previous work was done to allow the index to be created in a migration, but it was not supported in schema.rb
.
Additionally, the matching for NULLS [NOT] DISTINCT
was not in the correct order, which could have resulted in inconsistent schema detection.
Improve performance of JSON HTML entity escaping
John has been making various speed improvements to .to_json
.
This latest change improves the performance of HTML entity escaping by ~2x.
Overall these changes put the performance of .to_json
to be around ~4.5 faster than Rails 7.0.
Allow escaping of literal colons in ActionRecord::Sanitization#replace_named_bind_variables
This commit adds ability to allow escaping of literal colon characters in sanitize_sql_*
methods when named bind variables are used. For example:
sanitize_sql_array(["TO_TIMESTAMP(:date, 'YYYY/MM/DD HH12\\:MI\\:SS')", date: "foo"])
# => "TO_TIMESTAMP('foo', 'YYYY/MM/DD HH12:MI:SS')"
Omit webdrivers gem from Gemfile template
As of Selenium 4.6, the Selenium Manager is capable of managing Chrome Driver installations and integrations.
This make the requirement on webdrivers
gem to be obsolete. This commit makes changes to omit webdrivers
gem dependency from Gemfile
template so that newly generated Apps won’t need it.
Adds Arel::FactoryMethods#cast(node, type)
CAST(field as type)
is a widely supported SQL function. This PR adds native Arel support for this named function with a cast(field, type)
helper.
product_table = Product.arel_table
product_table.cast(product_table[:position], "integer")
# => CAST("products"."position" as integer)
Save screenshot path on system test failure
Lots of CI tools support showing a system spec failure screenshot in their UI.
This Pull Request changes ActionDispatch::SystemTesting::TestHelpers::ScreenshotHelper
to save the screenshot path in the test metadata on failure,
which can be used by CI tools to show the screenshot.
You can view the whole list of changes here.
We had 27 contributors to the Rails codebase this past week!
Until next time!
Subscribe to get these updates mailed to you.