Rails 2.0… RELEASED! Parte 1

7 de dezembro de 2007 às 17:59 | Carlos Júnior

update: a versão release é 2.0.1, e não 2.0 apenas.

Ufa! Chegou o dia a hora! Acaba de ser anunciado por DHH o release do Rails 2.0… os desenvolvedores Rails mais antenados (e que não gostam de deprecation warnings) não terão grandes problemas na migração, pois desde o último release da 1.x.x já haviam warnings avisando de todos os métodos que estavam obsoletos.

O Rails 2.0 vem para facilitar ainda mais a vida dos desenvolvedores. Idéias novas e antigas, muito mais leve e limpo (sem gordura). Muito que antes estava no core do Rails agora é apenas um plugin, um dos casos mais clássicos é a substituição do ActionWebService pelo ActiveResource (uma opção por padronizar o uso do REST em detrimento ao SOAP).

Vamos ao que há de novo:

Sexy migrations (ou como queira chamar)

As migrations ficam mais fáceis e ágeis com este novo recurso:
Ao invés de:

t.column :first_name, :string
t.column :last_name, :string

Temos:

t.string :first_name, :last_name

namespaces nas rotas

já pensou?

map.namespace(:admin) do |admin|
  admin.resources :users
end

Este pequeno bloco de código mapeia aquele seu controller Admin::UsersController como um recurso, onde você tem admin_user_url, admin_users_url, …

Convenção em controllers que são recursos REST

Agora da para reaproveitar (sem gambiarra) um controller (resource) em vários contextos. Isso se deve a uma convenção de que todo controller que será um resource agora está no plural. Então…

map.resources :users # /users => UsersController#index
map.resources :groups, :has_many => :users # /groups/1/users => UsersController#index

Multiview

Agora a view é associada ao renderizador e ao formato, ou seja, index.rhtml agora é index.html.erb, onde html é o formato e ERB é o renderizador. index.erb (sem o formato) é que tem a mesma template para todos os formatos. index.atom.builder utiliza o Builder, este formato antes seria index.rxml. Desta forma uma view é mapeada diretamente para o formato requerido no Request.

URLs made easy

Se temos um map.resources :users, então link_to(@user.name, @user), mapeia para a URL direta do @user, ou seja, /user/:id. O mesmo para form_for(@user) e redirect_to(@user), e tudo mais que usa a magnífica construção de URL do rails.

Autenticação HTTP

O novo módulo de autenticação HTTP ajuda bastante em vários aspectos. Tanto para eliminar uma tela de login simples, quanto para autenticação quando se está sendo acessado via API RESTful.

def auth
  authenticate_or_request_with_http_basic do |username, password|
    if user = User.auth(username, password)
      set_current_user(user)
      return true
    else
      return false
    end
  end
end

Mais segurança

Rails 2.0 melhora a segurança tendo habilitado como padrão uma proteção contra ataques XSS e CSRF. Rails 2.0 também adiciona o suporte a HTTP-only cookies (que não podem ser acessados via JavaScript), estes serão usados na proteção citada anteriormente nos browsers que já o suportam.

Exceções

Finalmente! Hehehe, esta é boa. Agora você pode tratar exceções em todo controller (independente da action) e em controllers filhos de forma única.

class ApplicationController < ActionController::Base
  rescue_from ActiveRecord::RecordNotFound, :with => :not_found
 
  def not_found
    render :template => "errors/not_found"
  end
end

Este código renderiza uma template única de “not found” para sempre que tentar procurar um registro que não existe, em todos os controllers filhos de ApplicationController.

AtomFeedHelper

Um helper para o Builder para construção de atom em um jeito mais rubista… Veja se não é fácil…

Em um index.atom.builder

  atom_feed do |feed|
    feed.title("Thinking About Something")
    feed.updated((@posts.first.created_at))
 
    for post in @posts
      feed.entry(post) do |entry|
        entry.title(post.title)
        entry.content(post.body, :type => 'html')
 
        entry.author do |author|
          author.name(post.author_name)
        end
      end
    end
  end

Fonte: weblog.rubyonrails.org

Comentar Trackback

4 Comentários

  1. 1

    Ainda é necessária aquela “gambiarra” usando javascript e um campo oculto inline nos links para emular o REST, ou seja, emular as chamadas HTTP PUT e DELETE nos browsers?

  2. 2

    Rapaz, você está precisando muito melhorar o seu português, hein? E verifique se a tradução de “deprecated” é depreciado mesmo.

  3. 3

    “deprecated” significa “obsoleto”. Só para responder ao último comentário. Ele criticou o a tradução porque “depreciado” significa “desvalorizado” ou “sem valor”. E “obsoleto” seria sim um termo mais exato.

  4. 4

    Ok, obrigado Hugo.

    Henrique, a gambiarra ainda existe, e na verdade seria um contorno à especificação do HTML, pois lá não se contempla os verbos DELETE e PUT.