Artigos com a Tag ‘ActiveSupport’

Rails 2.2: Alterada a mensagem do método assert_difference

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 [...]

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 = [...]

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 [...]

Edge Rails: Benchmarking reports em milisegundos

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: [...]

Edge Rails: Novo método each_with_object

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 [...]

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 [...]

Edge Rails: Troca de biblioteca geradora de chaves secretas

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 [...]

Edge Rails: Correção do bug do Time#end_of_quarter

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 [...]

Edge Rails: Pluralização na Internacionalização

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, [...]

Edge Rails: camelize(:lower)

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 [...]

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 [...]

Edge Rails: Mais novidades na classe Memoizable

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 [...]

Edge Rails: Ligando e desligando carga de dependências

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ê [...]

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 [...]

Edge Rails: Introduzindo Memoizable para cache de atributos

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 [...]

Edge Rails: Crie regras para o String#humanize

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 [...]

Edge Rails: Array#second até Array#tenth

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 [...]

Edge Rails: Nova sintax para testes

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 [...]

Edge Rails: Enumerable#many? agora aceita blocos

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 == [...]

Edge Rails: Novo método Enumerable#many?

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

>> [ [...]

Edge Rails: Novo método Object#present?

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 = ” [...]

Edge Rails: StringQuestioneer renomeado para StringInquirer

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 [...]

Edge Rails: StringQuestioneer

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 [...]

Edge Rails: Erro ao usar o método end_of_quarter

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, [...]

Edge Rails: UTC ou GMT?

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ê [...]

Propaganda:

Últimos Artigos

Rails 2.2: Alterada a mensagem do método assert_difference 20/11/2008
Carlos Brando

Rails 2.2: Alterada a mensagem do método assert_difference

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 val[...] Leia Mais »