πŸ„ This week in Rails πŸ„: MariaDB, Action Cable, and more!

Hello everyone!

Jon here bringing you This Week in Rails from the sunny surf town of Biarritz, France πŸ‡«πŸ‡·β˜€οΈ

Ready to jump in and catch a few waves of updates?

Grab your surfboard and let’s go!

This Week’s Rails Contributors πŸ†

Please share some aloha 🌸 for the 27 daring riders who contributed to Rails (and world happiness) this week, including 4 committers who caught their first wave 😍😎! You can, too! Check out the current issues if you’d like to paddle out, make new friends and join the fun πŸ’™

MariaDB support comes to Rails 5! πŸŽ‰

Thanks to Jeremy Daer, Ryuta Kamizono, Vipul A M and Ian Gilfillan, Active Record is now fully compatible with MariaDB β€οΈπŸ’›πŸ’šπŸ’œβ€¦ click on our heroes’ names to open the commits and see what went down behind the scenes!

MariaDB is a community-developed open source fork of MySQL. Notable users include Wikipedia, Facebook, Google and, yes, Basecamp 3! Here is a good Wikipedia article about MariaDB and MySQL history. Game on!

🌊 Improved 🌊

Run Action Cable callbacks through the worker pool

Everybody out of the pool! 🏊 It was getting crowded in the water, but luckily our experienced Baywatch lifeguards Matthew, Sean and Jeremy πŸ‹ were on hand to, er, pool their efforts to ensure your database connections are managed automatically when Action Cable is involved! Synchronized water ballet, anyone?

Fewer string allocations in number helpers

No Strings are better than NoSQL, right? Ankit noticed that the number_to_delimited and number_to_rounded helper methods were creating duplicate strings. Check out the pull request to see how he improved it using derailed_benchmarks to check object allocations 🍰

Speed up and handle max_time edge cases

Rails has the need for speed πŸ’¨ and surfers Blake and Xavier managed a crowd-pleasing acceleration maneuver in AS::FileUpdateChecker using a single loop memoization rather than multiple loops, benchmarked using benchmark-ips. It’s good stuff; see the PR for more! 🍦

Speed up attribute_changed? in ActiveModel::Dirty

Faster than relocating to San Francisco ✈️ (and much more fun), sun-drenched rider Lihan was able to speed up attribute_changed? by setting the default options parameter to nil instead of a hash, and checking the result with benchmark-ips 😎

🌴 Fixed 🌴

Disallow #deliver_later after local message modifications

Lifeguard Jeremy came across a common, hard-to-detect 🐞 in the water: Local message changes weren’t being enqueued with the delivery job when using #deliver_later. This now raises a friendly exception to make sure your message modifications are made in either (a) the mailer method or (b) using a custom Active Job. Nice catch! 🌊

Revert Hash#transform_keys to always return a Hash

While surfing Mongoid’s test suite, an error alerted our champion Emily πŸ„πŸΎ to a change of behavior in ActiveSupport#symbolize_keys: Rails 4.1 returned a Hash but 4.2/5.0 returned self.class. This launched an interesting discussion on the merits of expected behavior versus matching Ruby’s behavior. Have a look! 🍎

🌞 Wrapping Up 🌞

That’s all for This Week on the Beach with Railsβ„’ 🌴. There were many more improvements (and great waves) than we have room to cover here, so don’t hesitate to jump in and check them out yourself… the water’s warm and the locals are friendly! πŸ‘£πŸΎ

See you next week! πŸπŸŒπŸ‰πŸ‡