Por Carlos Brando em 18 de Julho de 2008
Performance é coisa séria, e um dos métodos mais usados para aumentar a velocidade de execução em códigos é o uso de cache. Quem nunca fez algo assim?
class Person < ActiveRecord::Base
def age
@age ||= um_calculo_muito_complexo
end
end
Na próxima versão do Rails teremos uma forma mais elegante de fazer isto usando [...]
Por Carlos Brando em 17 de Julho de 2008
Agora que todos já sabem o que é uma rota singular, posso comentar uma novidade no Edge Rails.
Atualmente o helper polymorphic_url não está tratando singleton resources corretamente.
Um novo patch foi incluído no Rails para permitir que especifiquemos um singular resource usando símbolos, assim como fazemos com namespaces. Exemplo:
# este código
polymorphic_url([:admin, @user, :blog, @post])
# é a [...]
Por Carlos Brando em 15 de Julho de 2008
Traduzido do post “Living on the Edge (or what’s new in Edge Rails) #3“, porque não percebi esta alteração e não quero deixar de documentar.
O script/server agora verifica a disponibilidade do Thin e o usa. Muito conveniente se vocês estiver usando Thin no seu ambiente de produção (e quiser rodar o mesmo em desenvolvimento). Você [...]
Por Carlos Brando em 15 de Julho de 2008
Ao realizar buscas no banco de dados, por vezes temos de fazer uso da opção :joins afim de melhorar a performance de nosso aplicativo, em outros casos precisamos simplesmente recuperar algum tipo de informação que depende do resultado de duas tabelas.
Por exemplo, se desejássemos recuperar todos os usuários do sistema que compraram itens da cor [...]
Por Carlos Brando em 10 de Julho de 2008
No código abaixo estamos usando uma partial com uma coleção de dados:
render :partial => “admin_person”, :collection => @winners
Dentro da partial podemos usar então a variável admin_person para acessar os itens da coleção. Mas temos de concordar que este nome de variável é meio ruim.
Na próxima versão do Rails teremos a opção de personalizar o nome [...]
Por Carlos Brando em 09 de Julho de 2008
O método validates_length_of faz parte dos muitos métodos de validação contidos no ActiveRecord. Este método em particular serve para garantir que o valor gravado em uma determinada coluna no banco de dados terá um tamanho máximo, mínimo, exato, ou até mesmo se está em um intervalo de valores.
Mas o termo “tamanho” é relativo. Hoje quando [...]
Por Carlos Brando em 07 de Julho de 2008
Quando se usa o comando rake db:migrate:down VERSION=alguma_versão, os registros na tabela schema_migrations não estão sendo atualizados.
Isto significa que após usar o comando rake db:migrate:down ou up se você rodar o comando rake db:migrate algumas migrations podem não ser executadas. Vamos simular isto para ficar fácil de entender o problema:
$ ./script/generate migration test_migration
[...]
Por Carlos Brando em 04 de Julho de 2008
Esta alteração trata-se na verdade de uma correção de um bug no método rename_column. Para entender qual era o problema precisamos de um cenário como exemplo. Primeiro criamos um migration:
create_table “users”, :force => true do |t|
t.column :name, :string, :default => ”
end
Ok, agora criamos um segundo migration onde vamos renomear a coluna name da [...]
Por Carlos Brando em 03 de Julho de 2008
Já faz um certo tempo que Pratik Naik está tentando colocar este patch no Rails e parece que finalmente conseguiu.
No arquivo config/initializers/inflections.rb você tem a opção de acrescentar novas inflexões para pluralização, singularização e outros:
Inflector.inflections do |inflect|
inflect.plural /^(ox)$/i, ‘\1en’
inflect.singular /^(ox)en/i, ‘\1′
inflect.irregular ‘person’, ‘people’
inflect.uncountable %w( fish sheep )
end
Na [...]
Por Carlos Brando em 02 de Julho de 2008
Que David Heinemeier Hansson (DHH) gosta de inventar coisas no Rails não é segredo para ninguém, mas algumas vezes ele meio que exagera um pouco. Veja por exemplo esta última adição que ele fez.
No objeto Array hoje já temos o método first e last, então porque não ter também os métodos second, third, fourth e [...]
Por Carlos Brando em 01 de Julho de 2008
Jeremy Kemper está tentando deixar o Rails mais rápido, tanto que a novidade do último post surgiu depois que ele começou esta empreitada. Quem estiver interessado em acompanhar o que ele anda fazendo, pode acompanhar o fork do Rails que ele criou no GitHub para este trabalho.
Uma das coisas que ele andou melhorando foi o [...]
Por Carlos Brando em 30 de Junho de 2008
Eu ainda não consegui testar direito esta nova funcionalidade, mas para a próxima versão do Rails teremos um novo generator para testes de performace.
Ao executar no terminal o seguinte comando:
[carlosbrando:edge]$ ./script/generate performance_test Login
exists test/performance/
create test/performance/login_test.rb
Será criado um arquivo chamado test/performance/login_test.rb. Veja [...]
Por Carlos Brando em 27 de Junho de 2008
Uma nova opção foi incluída aos métodos de cálculos do ActiveRecord (count, sum, average, minimum e maximum).
Ao fazer uso da opção :from, podemos sobrecarregar o nome da tabela na query gerada pelo ActiveRecord, o que não parece muito útil em um primeiro momento. Mas algo interessante que esta opção nos permite fazer é forçar o [...]
Por Carlos Brando em 26 de Junho de 2008
No último podcast falamos que o DHH agora só quer saber de novidades, e realmente, toda vez que vejo um commit dele no Rails já vou correndo saber do que se trata, porque na maioria das vezes é algo novo.
Desta vez ele adicionou uma nova forma de se declarar testes, usando declarações test/do. Veja:
test “verify [...]
Por Carlos Brando em 24 de Junho de 2008
O método merge_conditions do ActiveRecord agora é um método público. O que significa que ele estará presente em todas os seus Models.
Este método faz exatamente o que o nome diz, você pode informar várias conditions separadas em seus parâmetros e ele junta tudo em uma condition só. Por exemplo:
class Post < ActiveRecord::Base
end
a = { :author [...]
Por Carlos Brando em 23 de Junho de 2008
O método link_to recebeu uma atualização que permite seu uso com blocos. Isto é interessante para os casos onde temos textos muito longos no hyperlink. Por exemplo, se hoje fazemos assim:
<%= link_to “<strong>#{@profile.name}</strong> — <span>Check it out!!</span>”, @profile %>
Agora podemos fazer assim, que teremos o mesmo resultado:
<% link_to(@profile) do %>
<strong><%= @profile.name %></strong> — [...]
Por Carlos Brando em 23 de Junho de 2008
Lembra-se de quando falei da nova opção :validate para associações belongs_to?
A principio o padrão seria true, então só usaríamos esta novidade quando desejássemos desligar as validações. Mas isto foi alterado.
Agora o padrão é false, ou seja, todas as validações em associações belongs_to estarão desligadas como padrão e para ligarmos devemos usar a expressão :validate => [...]
Por Carlos Brando em 20 de Junho de 2008
Eu já falei sobre este método many? há alguns dias atrás. Este método recebeu uma nova implementação permitindo que ele aceite blocos também, que funciona exatamente como o método any?.
Vamos aos exemplos:
>> x = %w{ a b c b c }
# => ["a", "b", "c", "b", "c"]
>> x.many?
# => true
>> x.many? { |y| y == [...]
Por Carlos Brando em 20 de Junho de 2008
Foi adicionado ao Edge Rails uma nova opção para associações. Se incluirmos a opção :validate => false na associação o ActiveRecord salvará os dados do objeto pai, sem validar os objetos associados. Exemplo:
class AuditLog < ActiveRecord::Base
belongs_to :developer, :validate => false
end
log = AuditLog.create(:developer_id => 0 , :message => “”)
log.developer = Developer.new
puts log.developer.valid?
# => false
puts [...]
Por Carlos Brando em 16 de Junho de 2008
Se você tem o costume de evitar repetições em suas views criando helpers, com certeza já usou o método concat. Se você nunca usou este método, saiba que ele é como o puts para uma view.
A implementação atual do método recebe dois parâmetros, uma string com o texto que será exibido na view e um [...]
Por Carlos Brando em 14 de Junho de 2008
Um novo método foi adicionado ao módulo Enumerable: many?. E como o nome mesmo diz, ele verifica se a coleção possui mais de um objeto, ou em outras palavras se tem muitos objetos associados.
Este método é um alias para collection.size > 1. Vamos ver alguns exemplos:
>> [].many?
# => false
>> [ 1 ].many?
# => false
>> [ [...]
Por Carlos Brando em 13 de Junho de 2008
Um novo método foi acrescentado à classe Object. O método present? é o equivalente a !Object#blank?.
Em outras palavras um objeto está presente se ele não for vazio. Mas o que é um objeto vazio?
class EmptyTrue
def empty?() true; end
end
a = EmptyTrue.new
b = nil
c = false
d = ”
e = ‘ ‘
g = ” [...]
Por Carlos Brando em 12 de Junho de 2008
No Rails 2.1, gems passaram a poder ser usadas como plugins em nossos projetos. Para isto bastava criar uma pasta chamada rails dentro do projeto do gem e incluir um arquivo init.rb.
Isto acrescentou um leque de novidades como config.gem e rake:gems. Mas isto nos faz pensar, já que agora eu posso carregar gems dentro da [...]
Por Carlos Brando em 06 de Junho de 2008
Hoje de manhõ eu falei desta nova classe no Rails, e comentei que estavam querendo mudar o seu nome. Pois bem, isto aconteceu mesmo!
Agora a classe se chama StringInquirer. Além disso ela também foi incluída no namespace ActiveSupport.
Vejam o mesmo exemplo usado no artigo anterior, mas adaptado para funcionar com estas alterações:
class Cliente
def [...]
Por Carlos Brando em 06 de Junho de 2008
David acabou de incluir uma novidade interessante no Rails, a classe StringQuestioneer (alguns estão tentando mudar este nome para StringInquirer, mas por enquanto é StringQuestioneer mesmo).
Para entender como funciona, vou ter de explicar usando alguns exemplos. Vamos criar uma classe chamada Cliente que contém um método que retorna o status do cliente:
class Cliente
def [...]