Por Carlos Brando em 19 de Maio de 2008
O método caches_action agora também aceita a opção :if, permitindo o uso de condicionais para especificar quando uma action pode ir para o cache. Por exemplo:
caches_action :index, :if => Proc.new { |c| !c.request.format.json? }
No exemplo acima, a action index só irá para o cache se não foi acessada via um request JSON.
Por Carlos Brando em 16 de Maio de 2008
Novo método para a classe AbstractAdapter: table_exists?. Seu uso é muito simples:
>> ActiveRecord::Base.connection.table_exists?(”users”)
=> true
Por Carlos Brando em 15 de Maio de 2008
Agora para saber qual action foi chamada durante a execução de sua view ficou mais fácil, basta usar o método action_name:
<%= action_name %>
O retorno será o mesmo que pegar o params[:action], mas de uma forma mais elegante.
Por Carlos Brando em 13 de Maio de 2008
No Rails 2.1 você poderá definir em que arquivo estão suas rotas incluindo a seguinte linha no seu arquivo environment.rb:
config.routes_configuration_file
Isto pode ser útil em um cenário onde você tem dois front-ends separados que usam os mesmos módulos, bibliotecas e plugins.
Por exemplo, getsatisfaction.com e api.getsatisfaction.com compartilham os mesmos modelos, mas não os controllers, helpers e views. [...]
Por Carlos Brando em 13 de Maio de 2008
Também já quebrei a cabeça por causa disto. O problema é que durante os testes você nunca podia confirmar se uma mensagem foi armazenada no flash, porque ela era limpa pelo Rails antes de cair no seu script de teste.
No Rails 2.1 este problema foi resolvido. Agora você pode incluir linhas como esta em seus [...]
Por Carlos Brando em 13 de Maio de 2008
Lembra do método label_tag?
Agora ele aceita a opção :for, veja um exemplo:
label(:post, :title, nil, :for => “my_for”)
Isto vai retornar algo assim:
<label for=”my_for”>Title</label>
Hmm… não entendi para que isto…
Por Carlos Brando em 12 de Maio de 2008
Já estamos acostumados com o método ActiveRecord::Base.new que aceita o uso de blocos na criação de um novo registro. Agora podemos fazer o mesmo com o método create:
# Criando um objeto, usando um bloco para informar seus atributos.
User.create(:first_name => ‘Jamie’) do |u|
u.is_admin = false
end
Também podemos usar o mesmo método para criar vários objetos [...]
Por Carlos Brando em 12 de Maio de 2008
Criar migrations ficou muito mais sexy depois do lançamento do Rails 2.0, mas alterar uma tabela usando migrations continuou sendo da forma antiga, nada sexy.
No Rails 2.1 (que já está para sair) alterar uma tabela também será sexy, com o novo método change_table. Veja um exemplo:
change_table :videos do |t|
t.timestamps # adiciona as colunas [...]
Por Carlos Brando em 09 de Maio de 2008
A inclusão do Memcache-Client no ActiveSupport::Cache facilitou muito as coisas, mas também removeu a flexibilidade, não deixando personalizar mais nada além do IP do servidor do memcached.
Jonathan Weiss criou um patch, que foi incluído no Rails, incluindo opções extras, como estas:
ActiveSupport::Cache.lookup_store :mem_cache_store, “localhost”
ActiveSupport::Cache.lookup_store :mem_cache_store, “localhost”, ‘192.168.1.1′, :namespace => ‘foo’
ou
config.action_controller.fragment_cache_store = :mem_cache_store, ‘localhost’, {:compression => true, [...]
Por Carlos Brando em 09 de Maio de 2008
Hoje se você tentar usar o método change_column com :null => true em uma coluna que foi criada usando :null => false, simplesmente sua coluna não vai sofrer nenhuma alteração. BUG.
No Rails 2.1 isto já estará corrigido.
Por Carlos Brando em 08 de Maio de 2008
Esta é quentinha. Acabou de sair…
No Rails 2.1 teremos mais um script para facilitar nossa vida:
script/dbconsole
Ele faz a mesma coisa que o script/console mas para o banco de dados. Em outras palavras ele entra no cliente de linha de comandos do banco de dados. Veja o resultado do meu teste:
Como você pode ver estou usando [...]
Por Carlos Brando em 07 de Maio de 2008
Uma coisa muito chata de se fazer hoje no Rails é testar helpers. Eu mesmo já sofri um bocado para garantir 100% de cobertura, criando testes para alguns helpers.
Isto deve ficar mais simples no Rails 2.1 com a nova classe ActionView::TestCase. Vamos pegar o código abaixo como exemplo:
module PeopleHelper
def title(text)
[...]
Por Carlos Brando em 06 de Maio de 2008
O Active Resource usa HTTP para acessar APIs RESTful e por isto está suscetível a problemas de lentidão ou servidores fora do ar. Em alguns casos, suas chamadas ao Active Resource podem expirar (timeout). Agora você pode controlar o tempo de expiração com a propriedade timeout.
class Person < ActiveResource::Base
self.site = “http://api.people.com:3000/”
self.timeout [...]
Por Carlos Brando em 05 de Maio de 2008
O adaptador de MySQL do ActiveRecord ficou um pouco mais esperto na hora de criar ou alterar colunas no banco de dados usando inteiros. De acordo com a opção :limit, ele define se a coluna será um smallint, int ou bigint. Veja um trecho do código que faz isto:
case limit
when 0..3
“smallint(#{limit})”
when 4..8
[...]
Por Carlos Brando em 03 de Maio de 2008
Novo método para a classe Time. O retorno do método current depende do config.time_zone, se ele foi especificado antes, o método retornará um Time.zone.now, caso contrário será um Time.now.
# o retorno depende do config.time_zone
Time.current
Os métodos since e ago também terão seus retornos alterados, devolvendo um TimeWithZone caso o config.time_zone tiver sido especificado.
Isto torna o método [...]
Por Carlos Brando em 02 de Maio de 2008
No Rails 2.1 o método caches_page aceitará uma opção para condicionar seu uso (:if). Veja um exemplo:
# forma atual
caches_page :index
# No Rails 2.1 você poderá usar a opção :if
caches_page :index, :if => Proc.new { |c| !c.request.format.json? }
Por Carlos Brando em 01 de Maio de 2008
Ufa… finalmente terminei de analisar todas as alterações quer foram realizadas no Rails através do Trac. Agora estou indo para as que estão no GitHub e LightHouse, e já estou beeemm atrasado, já que tem quase 100 alterações que preciso conferir.
Talvez a alteração que precisava sair mais rápido é a do rails:freeze:edge, que precisava agora [...]
Por Carlos Brando em 01 de Maio de 2008
Hoje no Rails não é possível congelar o Rails em seu projeto pela versão, mas somente podemos fazer isto pela revisão. Claro que podemos verificar qual foi a última revisão antes do lançamento da versão, mas isto é trabalho extra.
No Rails 2.1, poderemos congelar um release específico com o comando abaixo:
rake rails:freeze:edge RELEASE=1.2.0
Por Carlos Brando em 01 de Maio de 2008
DHH acabou de confirmar que do Rails 2.1 está saindo… falta muito pouco para isto.
É muito provável que saia no fim desta semana ou na próxima… vamos esperar para ver.
Quer saber o que tem de novo nesta versão? Você está no lugar certo!
Por Carlos Brando em 30 de Abril de 2008
Foi incluído no Rails o atalho Rails.public_path para recuperar o caminho do diretório “public” do projeto. Com isto também fica fácil alterar o caminho se for necessário.
Rails.public_path
Por Carlos Brando em 30 de Abril de 2008
Hoje quando usamos o método sum do ActiveRecord para calcular a soma de uma determinada coluna para todos os registros de uma tabela, e nenhum registro corresponde às condições expostas na execução do método, o retorno padrão é nil.
Isto vai mudar no Rails 2.1, onde o retorno padrão (quando nenhum registro é encontrado) será 0. [...]
Por Carlos Brando em 29 de Abril de 2008
Todos já devem conhecer o meu plugin Custom Resource Name. Acho que ele pode estar com seus dias contados…
Já faz algum tempo que um desenvolvedor chamado Ivan Vega me procurou por email para montar um patch para o Rails baseando-se no meu plugin. Na verdade ele já tinha um código parecido e queria adaptar [...]
Por Carlos Brando em 29 de Abril de 2008
Rails agora aceita POSTs de conteúdo JSON. Por exemplo, você pode enviar uma requisição POST assim:
POST /posts
{”post”: {”title”: “Breaking News”}}
E o tudo vai para dentro da variável params. Isto aqui funcionará, por exemplo:
def create
@post = Post.create params[:post]
# …
end
Para quem não sabe o JSON é um “concorrente” do XML, e é muito [...]
Por Carlos Brando em 28 de Abril de 2008
Post rápido apenas para documentar e alertar. No Rails 2.1 a opção :case_sensitive do método validates_uniqueness_of deixará de ter seu valor default como true e passará a ser default false.
Então, fique atento quanto a isto na hora de migrar seu software.
Atualização
Esta alteração voltou atrás. De acordo com o core team do Rails, isto não fazia [...]
Por Carlos Brando em 28 de Abril de 2008
O método json_escape funciona como o html_escape. É muito útil para quem precisa exibir strings JSON em uma página HTML, como no caso de uma documentação, por exemplo.
puts json_escape(”is a > 0 & a < 10?”)
# => is a \u003E 0 \u0026 a \u003C 10?
Também podemos usar o atalho j no ERB:
<%= j @person.to_json %>
Se [...]