O método Module#delegate agora possui uma nova opção :prefix que pode ser atribuída caso você queira que o nome da classe alvo seja usado como prefixo antes do nome do método. Vejamos dois exemplos, primeiro da forma comum:
end
Invoice.new.street
Invoice.new.city
Invoice.new.name
Agora usando a opção :prefix:
end
Invoice.new.client_street
Invoice.new.client_city
Invoice.new.client_name
Você também pode personalizar, atribuindo um outro nome ao prefixo:
end
Invoice.new.customer_street
Invoice.new.customer_city
Invoice.new.customer_name
Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. Você pode encontrar mais detalhes sobre esta e outras novidades do Rails 2.2 no e-book “Ruby on Rails – O que há de novo?“.
No Rails 2.1 em alguns casos ao se criar dois controllers com o mesmo nome, mas em namespaces diferentes um erro acontece, veja:
Mais um bug corrigido na versão 2.2.
Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. Você pode encontrar mais detalhes sobre esta e outras novidades do Rails 2.2 no e-book “Ruby on Rails – O que há de novo?“.
Após o lançamento do Rails 2.1 o método Time#advance parou de funcionar corretamente com frações de tempo como:
>> Time.stubs(:now).returns Time.local(2000)
>> 1.5.days.ago == 36.hours.ago
# => false
Este erro foi corrigido no Rails 2.2.
Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. Você pode encontrar mais detalhes sobre esta e outras novidades do Rails 2.2 no e-book “Ruby on Rails – O que há de novo?“.
O helper atom_feed agora possui um builder interno que permite a criação de XHTML simplesmente acrescentando :type=>”xhtml” em qualquer elemento content, rights, title, subtitle ou summary. Assim:
entry.summary(:type => 'xhtml') do |xhtml|
xhtml.p "A XHTML summary"
xhtml.p post.body
end
Veja como este bloco se encaixa dentro do atom_feed:
atom_feed do |feed|
feed.title("My great blog!")
feed.updated((@posts.first.created_at))
for post in @posts
feed.entry(post) do |entry|
entry.title(post.title)
entry.summary(:type => 'xhtml') do |xhtml|
xhtml.p "A XHTML summary"
xhtml.p post.body
end
entry.author do |author|
author.name("DHH")
end
end
end
end
Desta forma o builder interno do atom_feed irá incluir o XHTML gerado dentro de uma tag DIV.
Claro que ainda podemos fazer da forma antiga passando todo o HTML dentro de uma string, mas desta forma nosso código fica mais limpo.
Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. Você pode encontrar mais detalhes sobre esta e outras novidades do Rails 2.2 no e-book “Ruby on Rails – O que há de novo?“.
Uma nova opção foi incluída ao método atom_feed, agora podemos incluir instruções de processamento ao xml. Veja um exemplo:
atom_feed(:schema_date => '2008', :instruct => { 'xml-stylesheet' => { :href=> 't.css', :type => 'text/css'
}
}) do |feed|
# ...
end
Instruções de processamento são informações contidas no documento XML que serão repassadas para o aplicativo que o requisitou. Essas instruções são na maioria das vezes usadas para informar ao aplicativo como ele deve manipular os dados que estão no documento XML.
No exemplo acima estou dizendo ao aplicativo que recebe o XML que ele deve exibi-lo com uma folha de estilo (CSS) especifico. Veja como fica no XML:
Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. Você pode encontrar mais detalhes sobre esta e outras novidades do Rails 2.2 no e-book “Ruby on Rails – O que há de novo?“.
Existia um bug bem especifico no Rails, que vinha sendo arrastado até a versão 2.1, quando em um teste funcional testávamos o funcionamento de uma rota nomeada usando parâmetros antes de executar um request. Para entender do que estou falando, veja um exemplo:
post_url(:id => 1) # Antes do request isto retornará um erro
get :edit, :id => 1
post_url(:id => 1) # Aqui funciona
end
Este problema foi corrigido no Rails 2.2.
Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. Você pode encontrar mais detalhes sobre esta e outras novidades do Rails 2.2 no e-book “Ruby on Rails – O que há de novo?“.
A criação de rotas nomeadas é algo muito simples, mas muito poderoso dentro do Rails. Por isto é justo que ele receba uma atenção especial em cada novo release.
No Rails 2.2 o sistema de rotas polimórficas foi aprimorado e o acesso aos resources foi simplificado. E para fechar com chave de ouro, uma nova opção na criação de rotas promete diminuir um pouco os gastos com memória causados pela geração desnecessária de código.
Duas novas opções foram adicionadas ao map.resources: :only e :except.
map.resources :posts
No código acima estou criando sete actions (index, create, new, edit, show, update e destroy) para o recurso Post. Mas digamos que eu só precise de duas (index e show), neste caso estou criando cinco actions desnecessariamente.
Usando estas novas opções eu poderia fazer isto:
map.resources :posts, :only => [:index, :show]
Assim, somente as actions necessárias serão criadas. Veja um outro exemplo de uso:
map.resources :posts, :only => [:index, :show] do |post|
post.resources :comments, :except => [:update, :destroy]
end
No código acima acrescentei o recurso Comment, mas removendo as actions update e destroy que não serão usadas, já que não será possível atualizar nem apagar os comentários de um post.
Veja um resumo de algumas ações e o retorno de cada uma:
Um recurso interessante, mas que deve ser usado com critério.
Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. Você pode encontrar mais detalhes sobre esta e outras novidades do Rails 2.2 no e-book “Ruby on Rails – O que há de novo?“.
Mais dois novos métodos foram acrescentados ao ActiveResource::Base: to_xml e to_json. O primeiro converte o recurso em uma string XML e o segundo retorna também uma string, mas no formato JSON representando o modelo.
O método to_json pode ser configurado através de um parâmetro opcional com as opções :only e :except, permitindo restringir ou remover determinados atributos. Por exemplo:
person = Person.new(:first_name => "Carlos", :last_name => "Brando")
person.to_json
# => {"first_name": "Carlos", "last_name": "Brando"}
person.to_json(:only => ["first_name"])
# => {"first_name": "Carlos"}
person.to_json(:except => ["first_name"])
# => {"last_name": "Brando"}
Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. Você pode encontrar mais detalhes sobre esta e outras novidades do Rails 2.2 no e-book “Ruby on Rails – O que há de novo?“.
Finalmente a versão final do Rails 2.2 saiu!
Acho que já cobrimos todas as novidades desta nova versão, e de várias formas possíveis. Para ficar sabendo de tudo que temos de novo você tem três formas:
Série Edge Rails (Rails 2.2): clique aqui.
Rails Podcast Especial Rails 2.2: clique aqui.
Livro “Ruby on Rails 2.2 – O que há de novo?”: clique aqui.
Para atualizar, primeiro você precisa ter a versão 1.3.1 do RubyGems:
Então instale a última versão do Rails:
Foi adicionado ao generator do Rails a opção IBM DB para o banco de dados. Para usá-la basta executar no terminal o seguinte comando ao criar o projeto Rails:
rails app_name -d ibm_db
Isto criará seu projeto com o seguinte arquivo database.yml:
# IBM Dataservers
#
# Home Page
# http://rubyforge.org/projects/rubyibm/
#
# To install the ibm_db gem:
# On Linux:
# Source the db2profile file and set the necessary environment variables:
#
# . /home/db2inst1/sqllib/db2profile
# export IBM_DB_DIR=/opt/ibm/db2/V9.1
# export IBM_DB_LIB=/opt/ibm/db2/V9.1/lib32
#
# Then issue the command: gem install ibm_db
#
# On Windows:
# Issue the command: gem install ibm_db
# If prompted, select the mswin32 option
#
# For more details on the installation refer to http://rubyforge.org/docman/view.php/2361/7682/IBM_DB_GEM.pdf
#
# For more details on the connection parameters below refer to:
# http://rubyibm.rubyforge.org/docs/adapter/0.9.0/rdoc/classes/ActiveRecord/ConnectionAdapters/IBM_DBAdapter.html
adapter: ibm_db
username: db2inst1
database: app_name_dev
#schema: db2inst1
#host: localhost
#port: 50000
#account: my_account
#app_user: my_app_user
#application: my_application
#workstation: my_workstation
adapter: ibm_db
username: db2inst1
database: app_name_tst
#schema: db2inst1
#host: localhost
#port: 50000
#account: my_account
#app_user: my_app_user
#application: my_application
#workstation: my_workstation
adapter: ibm_db
username: db2inst1
database: app_name_prd
#schema: db2inst1
#host: localhost
#port: 50000
#account: my_account
#app_user: my_app_user
#application: my_application
#workstation: my_workstation
Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. Você pode encontrar mais detalhes sobre esta e outras novidades do Rails 2.2 no e-book “Ruby on Rails – O que há de novo?“.