Por Carlos Brando em 20 de Novembro de 2008
Quando usávamos o método assert_difference com múltiplas expressões e um erro ocorria era difícil de saber qual das expressões não teve seu valor alterado, já que a mensagem de erro não informava isto.
No Rails 2.2 a mensagem devolvida pelo método informará exatamente qual expressão não passou no teste. Por exemplo:
assert_difference ['Post.count', 'current_user.posts.count'] do
Post.create(params)
end
O [...]
Por Carlos Brando em 31 de Outubro de 2008
As classes Time, Date, DateTime e TimeWithZone receberam três novos métodos muito convenientes. Os métodos today?, past? e future? foram introduzidos em todas as classes que trabalham com datas e horas para facilitar nossa vida em algumas situações.
Acredito que não seja necessário explicar o funcionamento de cada um. Então vejamos os métodos em ação:
date = [...]
Por Carlos Brando em 26 de Outubro de 2008
Um novo inflector foi incluído no Rails, e particularmente acho este é muito útil. O parameterize transforma um texto qualquer em um formato ideal para o uso em URLs. Por exemplo:
class User
def to_param
“#{id}-#{name.parameterize}”
end
end
@user = User.find(1)
# => #<User id: 1, name: “Carlos E. Brando”>
link_to @user.name, user_path
# => <a [...]
Por Carlos Brando em 06 de Outubro de 2008
Todas as mensagens de log que continham uma indicação do tempo que determinado processo levou para ser executado, foram alteradas para exibir o tempo em milisegundos.
Por exemplo, a mensagem:
Completed in 0.10000 (4 reqs/sec) | Rendering: 0.04000 (40%) | DB: 0.00400 (4%) | 200 OK [http://example.com]
Agora será exibida da seguinte forma:
Completed in 100ms (View: 40, DB: [...]
Por Carlos Brando em 03 de Outubro de 2008
O método each_with_object do Ruby 1.9 foi adicionado ao Rails, caso você ainda não esteja usando a nova versão do Ruby. Este método é bem interessante, pois ele funciona como o conhecido método each, com um pequeno diferencial. Cada iteração além de receber um elemento da coleção, recebe também um objeto que chamamos de memo.
Por [...]
Por Carlos Brando em 29 de Setembro de 2008
No exemplo abaixo estou renderizando uma partial, e não estou informando qual variável ela deve usar para preencher o conteúdo. Hoje o Rails encara que como tenho uma variável de instância com o mesmo nome, implicitamente é esta que deve ser usada.
@customer = Customer.new(”Carlos Brando”)
render :partial => “customer”
Isto funciona mas é um pouco arriscado. A [...]
Por Carlos Brando em 26 de Setembro de 2008
A classe Rails::SecretKeyGenerator, usada para gerar chaves secretas aleatórias como as usadas para armazenar a sessão do usuário em cookies, está sendo marcada para ser removida do Rails (Deprecate).
Em seu lugar o Rails passará a usar a classe ActiveSupport::SecureRandom que foi feita para o Ruby 1.9. A biblioteca SecureRandom faz a mesma coisa que a [...]
Por Carlos Brando em 22 de Setembro de 2008
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 [...]
Por Carlos Brando em 20 de Setembro de 2008
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, [...]
Por Carlos Brando em 16 de Setembro de 2008
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 [...]
Por Carlos Brando em 12 de Setembro de 2008
Talvez alguns não conheçam o método File.atomic_write. Ele serve para escrever arquivos de forma atômica. Isto pode ser muito útil em situações onde você não quer que outros processos ou threads vejam um arquivo escrito pela metade.
File.atomic_write(”important.file”) do |file|
file.write(”hello”)
end
O que este método faz é criar um arquivo temporário enquanto você escreve nele, e [...]
Por Carlos Brando em 06 de Setembro de 2008
Já falei da classe Memoizable no passado. Dois novos métodos foram adicionados à ela. Os métodos unmemoize_all e memoize_all.
class Person < ActiveRecord::Base
def age
um_calculo_muito_complexo
end
memoize :age
end
@person = Person.first
# Para desligar o cache do método age
@person.unmemoize_all
# Para ligar novamente o cache do método age apenas
@person.memoize_all
Estes métodos permitem que [...]
Por Carlos Brando em 03 de Setembro de 2008
Se você desejar permitir ou restringir a carga de dependências durante o ciclo de um requisição, pode fazer uso de um novo parâmetro de configuração.
config.dependency_loading = true
# ou
config.dependency_loading = false
Se dependency_loading for alterado para true (verdadeiro) ele permitirá que novas classes sejam carregadas durante uma requisição. Alterando para false (falso) este comportamento será desativado.
Se você [...]
Por Carlos Brando em 24 de Julho de 2008
Conforme expliquei no artigo anterior, teremos suporte a I18n no Ruby on Rails a partir da próxima versão. E eu prometi escrever um artigo mostrando como funcionaria esta nova implementação, o problema é que demorei e já teve gente se adiantando…
Então só vou mostrar o caminho das pedras.
Antes de começar
Preciso deixar claro uma coisa. Quando [...]
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 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 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 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 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 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 [...]
Por Carlos Brando em 03 de Junho de 2008
Nem bem saiu o Rails 2.1 e já foi encontrado um erro sério. Entre no irb e tente rodar isto:
Date.new(2008, 5, 31).end_of_quarter
ERRO!
Por que? A implementação do método end_of_quarter foi feita da maneira errada, ele avança até o último mês do trimestre e depois pega último dia. O problema é que ele apenas avança o mês, [...]
Por Carlos Brando em 31 de Maio de 2008
Uma alteração simples, mas interessante. Até agora o Rails tem usado muito a sigla UTC, mas quando se executa o método to_s do objeto TimeZone ele mostrará GMT e não UTC. Isto se dá porque a sigla GMT é mais familiar para o usuário final.
Se você olhar no painel de controle do Windows, onde você [...]