Ontem eu mencionei aqui no blog que o helper country_select foi removido do Rails e virou um plugin. Eu não tinha entendido muito bem, mas o Rafael Mueller me ajudou a esclarecer o assunto.
O problema todo é que Taiwan segundo a norma ISO 3166, se chama na verdade “Taiwan, Province of China”. E foi exatamente assim que Michael Koziarski deixou no método.
Então, Jamis Buck questionou se não seria possível deixar apenas “Taiwan”, já que o “Province of China” parece ser politicamente agressivo. No GitHub iniciou-se então uma série de comentários que foram entrando cada vez mais em questões politicas e deixando o técnico totalmente de lado.
Mas, Michael Koziarski foi categórico em afirmar que essas questões politicas estão muito além do que poderíamos resolver com uma simples alteração no código. E se aceitasse esta alteração, logo outras seriam solicitadas para países como Kosovo, Ossétia do Sul, Abecásia, Transnístria e uma longa lista.
A melhor solução, ou pelo menos a que geraria menos controvérsias, foi remover o helper do Rails e disponibiliza-lo na forma de um plugin. Desta forma qualquer um poderia facilmente criar um fork e montar sua própria lista da forma como mais lhe agradar.
Foi uma ótima forma de resolver o conflito.
Apenas uma correção: No último post mencionei que gravariamos no banco de dados apenas a sigla do nome do país. Isto não é verdade, continuaremos gravando o nome inteiro do país, mas com a nova nomenclatura.
Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.
Lembra-se destes dois artigos?
- Edge Rails: Usando a opção :accessible para fazer atribuições em massa no ActiveRecord
- Edge Rails: Fazendo uso da opção accessible em formulários
Pois bem, esqueça. Esta funcionalidade foi removida do Rails, pois não estava totalmente completa e não daria tempo de terminar tudo até o lançamento do Rails 2.2.
Provavelmente ela deve voltar no futuro, mas dificilmente a tempo do próximo release.
Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.
O helper country_select foi removido do Rails. Para quem não se lembra, este método retorna uma lista com todos os países do mundo.
O motivo deste método ter sido removido do Rails é que aparentemente ele será atualizado para utilizar a norma ISO 3166 para os nomes dos países. Em outras palavras, ao invés de gravar no seu banco de dados o nome completo do país, você passaria a gravar apenas a sigla BR (ou BRA, isto vai depender da escolha feita pelo core team) para Brasil, por exemplo.
Esta alteração ainda não foi implementada, mas de acordo com Michael Koziarski algumas pessoas estão se sentido ofendidas por causa disto. Honestamente eu devo estar por fora de alguma coisa, mas não entendi o porque disso.
De qualquer forma o helper foi removido, mas um plugin foi criado para os que desejarem tê-lo de volta. Para instalar:
Quando tiver mais informações sobre isto eu volto a comentar.
Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.
Um dos primeiros posts desta série pré-Rails 2.2 foi sobre um bug no método end_of_quarter. Na época enviei um patch para o core team com a correção do erro e só agora, meses depois, o patch foi aceito e implementado ao Rails.
O erro só ocorria ao usar o método com a data de 31 de maio, julho ou agosto.
Time.local(2008,5,31,0,0,0).end_of_quarter
Este bug é do tipo perigoso, pois só ocorre em casos muito específicos e passa batido na maioria dos testes. Mas tudo bem, agora está resolvido.
Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.
Já falei anteriormente sobre o novo recurso de internacionalização que teremos no Rails 2.2. Muita coisa está sendo feita para deixar esta implementação o melhor possível, já que ela é de interesse de muita gente que usa o framework para desenvolver software para países que não usam o inglês como língua nativa.
No arquivo de localização, podemos internacionalizar frases do nosso aplicativo que dependem de um número ou quantidade, por exemplo:
"1 segundo"
"{{count}} segundos"
Quando estiver usando o método distance_in_words do Rails, quero que ele use o plural de forma correta quando o tempo for maior que um segundo. A alteração aqui é que anteriormente usaríamos a chave many para definir valores maiores que 1. Mas agora usaremos a chave other.
Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.
Quando uma migration está em execução e um erro ocorre, tudo que já foi executado será aplicado ao banco de dados, mas tudo que estiver após o erro, não será aplicado. Além disso a migration será marcada como concluída. Isto pode dar uma certa dor de cabeça para corrigir.
Mas, se o banco de dados que você estiver usando tiver suporte a DDL rollbacks em transações, então ele pode fazer uso deste recurso para desfazer tudo que foi feito antes do erro. O problema é que nem todos os bancos de dados possuem este recurso. O MySQL, por exemplo não possui.
Mas o PostgreSQL, SQL Server e outros bancos possuem.
Neste caso o código do Rails foi atualizado para permitir o uso de transações em migrations quando você estiver usando estes bancos de dados. Embora o Rails permita este recurso, o adapter do banco deve estar preparado para isto. Até o momento somente o do PostgreSQL parece estar.
Quase ia esquecendo de mencionar que este patch tem participação do meu amigo e companheiro da Surgeworks: Rodrigo Kochenburger.
Se você estiver usando o Edge Rails em seu projeto, tente executar o seguinte comando para criar um novo modelo:
Note que estou informando que meus comentários terão uma referência a tabela posts. Ou em outras palavras que meus comentários pertencem (belongs_to) a um post. Agora veja o arquivo app/models/comment.rb gerado pelo script:
end
O relacionamento com a tabela posts já foi incluído automaticamente no modelo. Este é um novo recurso que encontraremos no Rails 2.2.
Por padrão o método camelize do Rails é usado para converter string para o formato UpperCamelCase. Mas também podemos converter para o formato lowerCamelCase se usarmos o argumento :lower. Porém, tente executar o código abaixo no terminal de um projeto Rails (menor ou igual ao 2.1.1):
'Capital'.camelize(:lower)
# => "Capital"
Como você pode ver, a letra ‘C’ no ínicio da palavra não retornou minúscula como deveria. Isto foi corrigido. Veja o retorno do mesmo trecho de código, agora executado no Rails 2.2:
'Capital'.camelize(:lower)
# => "capital"
Os métodos *_polymorphic_url e *_polymorphic_path, muito usados para gerar URLs a partir de registros do banco de dados, receberam um novo parâmetro opcional. Agora, além dos parâmetros normais eles também aceitam um hash de opções, tornando possível gerar rotas com parâmetros adicionais na url.
Vamos aos famosos exemplos, com o método equivalente nos comentários:
edit_polymorphic_url(@article, :param1 => '10')
# => edit_article_url(@article, :param1 => '10')
polymorphic_url(@article, :param1 => '10')
# => article_url(@article, :param1 => '10')
polymorphic_url(@article, :format => :pdf, :param1 => '10')
# => formatted_article_url(@article, :pdf, :param1 => '10')
Eu escrevi sobres este métodos quando eles foram lançados. Para relembrar clique aqui.
Muito provavelmente você já conhece o método cycle. Ele é muito usado para alternar as cores de linhas em um tabela, alterando a propriedade class de cada row.
@items = [1,2,3,4]
item
Um novo método foi criado para auxiliar o uso do método cycle em tabelas mais complexas ou outros tipos de design onde se faça necessário recuperar a string corrente desde a última execução do método cycle. Veja um exemplo similar ao mostrado acima usando o novo método current_cycle:
@items = [1,2,3,4]