Welcome to This week in Rails, your weekly inside scoop of interesting commits, pull requests and more from Rails.
This week is super-ultra-special in Railsland, because it considers the annual RailsConf that just happened in Chicago. I was really fortunate to be able to go this year, so I'll try my best to bring some highlight from the conference to all my lovely readers. (Thank you for everyone who said hi, it was really nice meeting you all!)
DHH pronounced the death of TDD onstage at Railsconf, and this is a follow-up blog post to his keynote. I encourage you to catch the full keynote and blogpost to try and understand his argument behind the controversial soundbite.
Along with the usual dosage of puns and trolling, Aaron Patterson presented what he has been working on for the last few years – an epic refactoring of Active Record to support cached prepared statements. Check out his previous blog post on the same topic as welll.
(Note: The commit I linked simply realigned master with the adequaterecord branch. See here for a better diff of the actual changes.)
This week's #1 contributor is once again, @rafaelfranca. (Rafael was recognized as one of the 2014 Ruby Heroes at RailsConf for his contributions to Rails!) Please join me in thanking all these awesome people who dedicated their time (even during RailsConf!) to help improve the framework we love <3 <3 <3
A small refactoring to speed up URI escaping, backed by hard numbers – science™! (Contrary to what some popular urban myth might lead you to believe, the Rails core team cares deeply about performance, as you can see here.)
This fixed an obscure that is triggered with the combination of setting the cookie jar format to :hybrid (a new feature in 4.1) and upgrading to secret_key_base (from secret_token) at the same time. You should hold off on doing either one of these upgrades until 4.1.1 comes out.
An odd case where Array and Active Record both defines a method called select!. (Note: select! is a private API that you should not use in your applications, see my explanation in a related issue for details.)