This Week in Rails: Mailer preprocessing and new ERB handler

Steampunk! It’s all the rage with the kids these days.

Honestly, I was going to work this better into the lead but then I ran out of… ssssstea… 🤓

Anyway friendo! Here’s what Kasper dug up from this week in Rails.

This Week’s Rails Contributors

This week we got 33 committers: welcome or hello again! Either way, you all seem to be on the right track 😉

Action Mailer Preprocessing

Incoming! Mailers can now use params allowing for easier preprocessing with before_action akin to Action Controller. To enable call mailers like this: InvitationMailer.with(invitee: person).account_invitation.deliver_later

See the pull request for a considerable A/B example.

Rails uses Erubi for ERB handling

For many years Rails has used Erubis to handle ERB templates, but it’s been deprecated in favor of Erubi. Being 1/6 shorter to type is far from the only thing Erubi has going for it, so dip into the pull request for the full list 😄

One more thing

Steampunk! It’s hip, it’s wholesome and for the whole family.

Wrapping up

That’s it from This Week in Rails! There were many other great contributions, too numerous to list here, but feel free to check them out!

See ya!

New Action Pack caching gems released

Hi everyone,

I’m happy to announce that new versions of the caching gems extracted from Rails 4.0 have been released.

Action Pack Page Caching (v1.1.0)

CHANGES since 1.0.2

  • Support for Rails 5.0
  • Support for setting page_cache_directory at the controller instance level
  • Support for setting page_cache_directory using a proc, symbol or callable object

To see the full list of changes, check out all the commits on GitHub.

SHA-1

If you’d like to verify that your gem is the same as the one I’ve uploaded, please use this SHA-1 hash.

$ shasum actionpack-page_caching-1.1.0.gem
b9626f7afeb1d69267d1fd6b7255a30be7c33d29  actionpack-page_caching-1.1.0.gem

Action Pack Action Caching (v1.2.0)

CHANGES since 1.1.1

  • Support for Rails 5.0
  • Respect Accept header when caching actions
  • Standardise behavior of options :layout and :cache_path when passed a proc, symbol or callable object

To see the full list of changes, check out all the commits on GitHub.

SHA-1

If you’d like to verify that your gem is the same as the one I’ve uploaded, please use this SHA-1 hash.

$ shasum actionpack-action_caching-1.2.0.gem
308c3acf35c0bdbf15e5c63b64aeda0ec817a269  actionpack-action_caching-1.2.0.gem

Many thanks to the numerous people who have contributed PRs and reported bugs.

This Week in Rails: DB adapters, Git, Action Cable and more!

Hello everyone! This is Roque bringing the latest news from the Rails community.

Remember, today is the last day to submit your RailsConf proposal. You have until 11:59 p.m. MST!

Now, let’s get started!

This Week’s Rails Contributors

This week 33 people contributed to Rails. We also got 4 first time contributors. Welcome aboard folks and keep it going!

SQL Server adapter released for Rails 5

The 5.0.x version of the adapter is only for the latest 5.0 version of Rails. If you need the adapter for an older version of Rails, just install the latest version of the adapter that matches your Rails version (3.2.x to 4.1.x).

Git repo in new Rails projects

New projects will now be generated with a Git repo by default. Please use the option --skip-git if you choose to skip it.

Foreign Key Support for SQLite

Adds foreign key support for SQLite 3.6.19 (or greater) in create statements.

Improved

Improve the AS::NumericWithFormat#to_s memory allocation

Thanks to some good profiling, ActiveSupport::NumericWithFormat#to_s should behave better and not allocate too many objects. 🔎

Fixed

Add channel prefix support to Action Cable Redis adapter

Without channel prefix in Redis, apps using the same Redis server could have their communication compromised. You can now set the option channel_prefix in your cable.yml file. Please check the PR for details.

Make all Rails commands work in engines

The following commands are now working in engines: server, console, dbconsole and runner.

Generate migrations at custom path

New database migrations will be generated at the path set by config.paths["db/migrate"] if the option is defined.

Fix Module#parent_name on a frozen module

The method would throw a runtime error when called for a frozen module.

Wrapping up

That’s it from This Week in Rails! There were many other great contributions, too numerous to list here, but feel free to check them out!

Until next week!

This Week in Rails: Time, Duration fixes and more

Happy new year (yet again) ! And a Friday the 13th 👻

This is Vipul, bringing you the latest from just the second week of the year, which is shaping to be really busy.

Thanks to all the 27 contributors, in particular to the 4 people who contributed for the first time. Keep up the good work!

Here are the most relevant changes to Rails master for this week.

Improved

Constant look-up would no longer fall back to top-level constant since Ruby 2.5

Since top-level constant lookup has been removed on Ruby 2.5, Rails takes care of relevant changes on its side, so that we rely on properly scoped constants, instead of relying on fallback lookup.

Fixed

Fix pool_from_any_process to use most recent specification

If a process is forked more than once, the Active Record connection pool was grabbing the oldest connection specification for a process, and not the most recent one.

This issue is not seen for single processes, but if you are forking the process multiple times, the wrong specification will be returned and incorrect connection will be used.

This change fixes the issue by reversing the list of specification names so we can grab the most recent one rather than the oldest.

Make time travel work with subclasses of Time/Date/Datetime

Previously when using time travel methods, travel_to, etc, and calling now on a subclass of e.g. Time, it would return an instance of Time instead of returning an instance of the subclass.

This change fixes the way we return the instance, so that we always return using the correct class.

Fix inconsistent parsing of Durations with both months and years

Previously the following code may fail or succeed depending on the current time.

ActiveSupport::Duration.parse(2.months.iso8601) == 2.months  
ActiveSupport::Duration.parse(3.years.iso8601) == 3.years

This change fixes the inconsistent parsing so that this comparison no longer fails.

Removed

Deprecate reflection class_name option to accept a class

The idea of class_name as an option of reflection is that passing a string would allow us to lazy autoload the class.

Using the class directly, with something like

belongs_to :client, class_name: Customer

is eagerloading models more than necessary and creating possible circular dependencies.

This option is now deprecated, pass strings of the class names instead.

Wrapping up

That’s it from Vipul . I hope you enjoyed this issue. 

If you haven’t already, start working on those RailsConf proposals, you have only 6 days left to submit a good talk!

This Week in Rails: Starting the year with over 100 commits

Happy new year! How was your holiday break? Did you receive nice presents? In case you missed it, Ruby 2.4.0 was released on Christmas day so if you haven’t done it yet… rbenv install 2.4.0 right now!

The first week of 2017 has seen more than 100 commits to rails/rails. Congratulations to all the 32 contributors, in particular to the 8 people who contributed for the first time. Keep up the good work!

Here are the most relevant changes to rails master for this week.

New

Allow to set custom content type for email attachments

With Action Mailer it’s now easy to specify the content type of your attachments. E.g.: mail(body: "\<h1\>Hello\</h1\>", content_type: "text/html").

Added option to ActiveRecord::CounterCache methods

You can now ask Active Record to update specific timestamp columns when incrementing, decrementing, resetting, or updating counter caches.

Default Rails.env to development when missing

If your app does not set RAILS_ENV or RACK_ENV then the value of Rails.env will fall back to development rather than just being an empty string.

Improved

Improve Array#sum with Ruby refinements

Array#sum was defined in Rails with a monkey-patch. Ruby 2.0 introduced refinements for better encapsulation. This is the first PR where they are being used in rails/rails.

Ensure Rails 4.2 works with Ruby 2.4

Some tests and code have been fixed and backported to 4-2-stable so that running Rails 4.2 on Ruby 2.4 will not raise any error. 

Change return value of duplicable?

In Ruby 2.4, NilClass, FalseClass, TrueClass, Symbol and Numeric all support dup. For consistency, duplicable? will now return true for all these classes.

Fixed

Serialize JSON attribute value nil as SQL NULL

The way in which a nil JSON payload is stored in a database was inadvertently changed in Rails 5.0. This fix maps nil to SQL NULL, exactly as how it was in Rails 4.x.

Fix generator command for nested namespaced rails engines

If the name of your Rails engine has a hyphen then this PR (fixing the path of namespaced controllers) is for you! 

Update cookies helper on all HTTP requests

This fixes a regression by which cookies were only updated on GET requests. Now we will update the helper for all requests.

Removed

Remove support for MySQL

MySQL 5.0 reached “end of life” more than five years ago. Rails now requires at least version 5.1.10.

Remove previously deprecated code

By now, you should have already dropped any reference to Rake’s db:test:clone, Configuration’s serve_static_files and static_cache_control and ActiveRecord’s uniq, uniq!, uniq_value, insert_sql, update_sql, delete_sql.

Wrapping up

That’s it from Claudio. I hope you enjoyed this issue. And now… let me go back to writing my RailsConf proposal… I only have 14 days left to submit a good talk!

See you all in Phoenix at the end of April!

[ANN] Rails 5.0.1 has been released!

Hi everyone,

I am happy to announce that Rails 5.0.1 has been released.

CHANGES since 5.0.0

To view the changes for each gem, please read the changelogs on GitHub:

Full listing

To see the full list of changes, check out all the commits on GitHub.

SHA-1

If you’d like to verify that your gem is the same as the one I’ve uploaded, please use these SHA-1 hashes.

Here are the checksums for 5.0.1:

$ shasum *-5.0.1.gem
51a4112d989f9658c995ac0ef93a9d8dc9e7d1ff  actioncable-5.0.1.gem
839aa492e3d81568b9d5c4c9f2974a3964e12025  actionmailer-5.0.1.gem
240394cb1422317a6d2e4cfa057d2c5bf6c96c5a  actionpack-5.0.1.gem
c52c66c8c6a7f8af8e4912a9e4d1711eb8f8daff  actionview-5.0.1.gem
223ff0c1235c6d139707b623790eb00b39ef6c84  activejob-5.0.1.gem
9aeabd9d02f982c010bd59c3db9774d95494177b  activemodel-5.0.1.gem
ad285d6723c2d51df852b372b20b4f8a061ccbf6  activerecord-5.0.1.gem
5c546eca785ea25624b5a80f0304fbac9f2efe44  activesupport-5.0.1.gem
f9c5beee8106f3266937248058f676a7d0d8b44e  rails-5.0.1.gem
a8c264bccbad342e8e781a3fffab98466f3e4852  railties-5.0.1.gem

As always, huge thanks to the many contributors who helped with this release.

This Week in Rails: yarn, webpack, BIGINT PKs and more!

Hello everyone, this is Godfrey reporting from Portland, OR. This week has been a mix bag for me – on one hand, Portland had a pretty miserable week due to the storm; on the other hand, a lot of exciting changes landed in Rails. Does that make things even? I guess we’ll go through the changes and you can decide for yourself!

“Yarn is good. Yarn works.”

Last week, we mentioned that Rails 5.1 is gaining a –yarn  option. This option is now promoted to be the default: every new Rails app will be set up to use yarn out-of-the-box. It’s also worth noting that yarn packages are now installed into the vendor/node_modules directory.

Basic webpack integration

While we are talking about JavaScript, the asset bundling side of things is also getting some love. Rails 5.1 will gain first-class support for webpack via the –webpack option. This is still a pretty early spike, so definitely try it out and help improve it.

Change default primary keys to BIGINTs

Friends don’t let friends use INT as a primary key – your app might hit Webscale™ before you know it, resulting in much sadness when your primary key column overflows. To help put you on the right path, Rails 5.1 will default to using BIGINTs for primary key columns in MySQL and PostgreSQL.

New

Introduce ActiveRecord::NotNullViolation error

As of this pull request, if your model failed to save due to a NOT NULL constraint, Rails will raise a NotNullViolation error (instead of a generic StatementInvalid error) so you could rescue the error and handle it appropriately.

Improved

Speeding up RSpec integration tests by 40%

This patch fixes an issue where templates are needlessly recompiled between integration test, resulting in a significant speedup.

Fixed

Idempotent after_commit callbacks

Previously, certain race conditions could cause your after_commit callbacks to fire more often than expected. This patch attempts to more accurately track the work that actually happened in the database to ensure your hooks are triggered only when appropriate.

Allow variales named block in templates

Have you tried using variables named block  in your templates? If you did, you might have seen a pretty strange error from Rails. Not anymore! With this patch, you would be able to do that without issues.

Exclude singleton classes from subclasses and descendants

A change in Ruby 2.3.0unexpectedly changed the behavior of Active Support’s Class#subclasses and Class#descendants  methods to include singleton classes. This patch restores the previous behavior and made things consistent across different versions of Ruby (again).

Wrapping up

That’s it from This Week in Rails! There were many other great contributions, so please feel free to check them out yourself!

Until next week!

[ANN] Rails 5.0.1.rc2 has been released!

Hi everyone,

I am happy to announce that Rails 5.0.1.rc2 has been released.

If no further regressions are found, expect the final release on Wednesday, December 14, 2016. If you find one, please open an issue on GitHub and mention me (@matthewd) on it, so that we can fix it before the final release.

CHANGES since 5.0.0

To view the changes for each gem, please read the changelogs on GitHub:

Full listing

To see the full list of changes, check out all the commits on GitHub.

SHA-1

If you’d like to verify that your gem is the same as the one I’ve uploaded, please use these SHA-1 hashes.

Here are the checksums for 5.0.1.rc2:

$ shasum *-5.0.1.rc2.gem
52c2dffc42e386aacf28f1033edd975804770bef  actioncable-5.0.1.rc2.gem
0bf7faf211a7d9413432c59a4700bea3b3a41975  actionmailer-5.0.1.rc2.gem
127a122087e941eb245f500dc000779fb85916c6  actionpack-5.0.1.rc2.gem
3622fcb6e46d1ff48c2a2c3e773ecad769c776e0  actionview-5.0.1.rc2.gem
0bf2518768da054b18b871d48107e3afe79e552f  activejob-5.0.1.rc2.gem
ff3e0ef08053bc439f71387410415bf2ddc937b8  activemodel-5.0.1.rc2.gem
7eba5d1214a24e8e0b0e32eaf0560a69b2d6a702  activerecord-5.0.1.rc2.gem
2e601cabcf09057b4322a0069ffb07df38955aa4  activesupport-5.0.1.rc2.gem
b9653fa0724a30cb9ffbb23e39340a0166916bd0  rails-5.0.1.rc2.gem
60c06b55dd5977d0c25f407e39f7325b150cd994  railties-5.0.1.rc2.gem

As always, huge thanks to the many contributors who helped with this release.

This Week in Rails: jQuery no longer part of Rails and more!

Hello everyone!

Prathamesh and Greg here, bringing you all the latest from This Week in Rails…..
Which is actually “Past 2 weeks in Rails” because we missed to send last week’s issue due to illness. But we are back now, so let’s see what happened in the Rails world since the last issue.

This week’s Rails contributors

The past 2 weeks 38 awesome people contributed to Rails. Want to be part of the show? Head to the issues list and make a contribution!

jQuery is no longer a dependency of Rails

The Rails javascript helpers has been rewritten in a new gem called rails-ujs and they use vanilla javascript, so jQuery is not a dependency of Rails anymore.

Rails 5.0.1.rc1 has been released!

The first release candidate for 5.0.1 has been released and if no issues found, the final will be release on the 6th of December.

Improved

form_with helper to unify form_tag and form_for

The form_for and form_tag helpers serve a very similar use-case so they been unified with the new form_with helper.

Make the second argument to attribute optional

A default for the cast_type option of the attribute method has been added to enable calling this method with just the attribute name.

Active Record connections improvement

Active Record distributed the connection to previously blocked threads on when it cleared the reloadable connections, but with this change the same happens on disconnect too.

Use gen_random_uuid() for PostgreSQL >= 9.4

With this change, Active Record uses the recommended UUID function depending on the underlying PostgreSQL server’s version, while maintaining uuid_generate_v4() in older migrations.

New

Add Yarn support in new apps using –yarn option by Liceth · Pull Request #26836 · rails/rails · GitHub

yarn, the javascript package manager is supported in Rails now! You can pass the –yarn option when you generate a new rails app and Rails will create the necessary config files and run yarn install after bundle install automatically.

Introduce reload\_ reader for singular associations

This patch introduced _Model#reload__ to bring back force reloading of the association reader.

Fixed

update_all and delete_all is fixed when chained with left_joins

These batch methods didn’t use the left outer joins before, but with this fix they behave properly now.

Fix a force ssl redirection bug

This PR fixes a bug with the force ssl redirection when the session_store is disabled.

Wrapping up

That’s it from This Week in Rails! There were many other great contributions, too numerous to list here, but feel free to check them out!

Until next week!

[ANN] Rails 5.0.1.rc1 has been released!

Hi everyone,

I am happy to announce that Rails 5.0.1.rc1 has been released.

If no regressions are found, expect the final release on Tuesday, December 6, 2016. If you find one, please open an issue on GitHub and mention me (@matthewd) on it, so that we can fix it before the final release.

CHANGES since 5.0.0

To view the changes for each gem, please read the changelogs on GitHub:

Full listing

To see the full list of changes, check out all the commits on GitHub.

SHA-1

If you’d like to verify that your gem is the same as the one I’ve uploaded, please use these SHA-1 hashes.

Here are the checksums for 5.0.1.rc1:

$ shasum *-5.0.1.rc1.gem
f912b040b65f335c93ae888eb3317a8b161abbb1  actioncable-5.0.1.rc1.gem
2f6190125148b61871fd01323798cfbfbf267723  actionmailer-5.0.1.rc1.gem
161e6e15206028d76c8f2d4822c8783f16ac46ec  actionpack-5.0.1.rc1.gem
09f86171dfdb6d60146b3028cd71b5760e8c2432  actionview-5.0.1.rc1.gem
8506ea383e722304614f89e3757bf2546d5c6d8f  activejob-5.0.1.rc1.gem
25c3f96faee14dcbc3d91a465ad6b3866fd19cfb  activemodel-5.0.1.rc1.gem
2e01ee70c2e3b49885ae9b1a845d33327c7010e8  activerecord-5.0.1.rc1.gem
02412998c47a1ca8d1b7459976b98414aa535916  activesupport-5.0.1.rc1.gem
cae7d263e8128fab14b72d32ad6e82e436fd58bc  rails-5.0.1.rc1.gem
5193a647536cd700b13c18e6de6a4382ead7c6e0  railties-5.0.1.rc1.gem

As always, huge thanks to the many contributors who helped with this release.