Em dezembro do ano passado o branch master do Rails foi alterado para a versão 4.0.0.beta e o lançamento da versão 4.0 foi agendado preliminarmente para o final de 2012. Está se tornando cada vez mais claro o que deve estar presente no Rails 4.0.
Em uma apresentação em Boston, o contribuidor do Rails Prem Sichanugrist mostrou uma visão geral das mudanças previstas, e as principais funcionalidades foram abordadas em notas preliminares de lançamento:
- Suporte a Ruby 1.9.3 somente;
- Parâmetros fortes;
- API de filas;
- Melhorias em caching.
David Heinemeier Hansson (DHH) anunciou, ano passado, a decisão de descontinuar o suporte ao Ruby 1.8; portanto a mudança não será surpresa, além de colocar um ponto final na história desta versão.
Os parâmetros fortes oferecem uma forma de se lidar com o mass-assignment (atribuição em lote) no controlador; até a versão anterior, essa preocupação estava no modelo. A nova abordagem torna mais fácil filtrar os parâmetros, e deixa mais claro quais parâmetros são permitidos. Adicionalmente, os parâmetros podem ser marcados como obrigatórios e seguir um fluxo de raise/rescue, podendo resultar em um '400 Bad Request'. Parâmetros fortes já podem ser utilizados com o Rails 3.2.8, com o auxílio de um plugin.
O ActiveSupport::Queue herda da fila padrão do Ruby e executa os jobs da fila em uma thread em segundo plano. Um job é basicamente um objeto que implementa o método run. Para facilitar os testes, o sistema de filas é configurável e pode ser alterado para tratar jobs de forma síncrona.
O Cache Digests é um novo plugin que torna esquemas de cache multicamadas mais fáceis de se manter:
Com esse plugin, todas as chamadas a #cache na view irão automaticamente anexar um resumo (digest) desse template e de todas suas dependências. Assim, deixará de ser necessário incrementar manualmente versões nos templates específicos com que se está trabalhando, ou ter que se preocupar com as dependências que outros templates tenham com as mudanças em andamento.
O Rails 4 também suportará o método PATCH do HTTP/1.1:
Várias aplicações que estendem o HTTP exigem uma funcionalidade para realizar uma modificação parcial sobre o recurso. O método PUT atualmente só permite a substituição completa do documento. A RFC 5789 adiciona um novo método HTTP, chamado PATCH, para modificar um recurso HTTP existente.
O PATCH, assim como o PUT, mapeará para o método de atualização, de forma que não haja quebra de compatibilidade. Veja a discussão no sistema de acompanhamento de pendências do Rails para maiores informações sobre a motivação e as consequências dessa mudança.
Outras funcionalidades e melhorias incluem um cache para dumps de schemas, suporte a arrays do PostgreSQL, além dos Routing Concerns para limpeza de rotas duplicadas e atualizações ao ActiveRecord::Relation.
Como de costume, novos lançamentos também tornam algumas funcionalidades obsoletas. O esboço das notas de lançamento contém uma lista detalhada de componentes ou métodos marcados como obsoletos. Alguns foram simplesmente movidos para gems individuais, como a ActiveRecord::SessionStore ou a ActiveResource.
Prem Sichanugrist descreveu a política de obsolência em sua apresentação: assim que o Rails 4.0 for lançado, o Rails 3.1 terá seu fim decretado, e o uso de algumas funcionalidades do Rails 3.2 gerarão avisos de obsolência. Essas funcionalidades obsoletas serão removidas no release 4.1 do Rails. A abordagem torna de baixo risco a migração do Rails 3.2 para o 4.0.