Carlos Brando

Nome do Jogo

Criando um template padrão de um projeto Rails, ou adeus Bort, Blank, Suspenders e outros

De um tempo para cá parece que virou moda a criação de projetos Rails semi-prontos. Em uma rápida pesquisa no GitHub encontrei o Bort, Blank, Suspenders, starter-app, appstarter e mais alguns menos conhecidos.

E isto é muito bom, já que na maioria das vezes usamos sempre a mesma estrutura para criar nossos projetos, os mesmos gems e plugins e o mesmo sistema de autenticação. Eu mesmo já experimentei alguns dos projetos que mencionei acima, mas eles são projetos semi-prontos criados para suprir as necessidades das equipes que os criaram e não as minhas necessidades.

Existe um projeto mais interessante do que todos estes, chamado rg. Jeremy McAnally teve a idéia de criar um script na qual você pudesse montar a sua própria estrutura de projeto, apenas relatando quais gems e plugins você deseja usar, quais arquivos criar e com que conteúdo, etc..

Percebendo a necessidade dos desenvolvedores por tais projetos semi-prontos, o core team do Rails decidiu incluir o rg no Rails. Assim ganhamos a opção de carregar um template ao criar um novo projeto Rails de forma nativa.

Nunca foi tão fácil criar um template padrão para um projeto Rails. Veja um exemplo de um template:

# Install plugins from git or svn
plugin "will-paginate", :git => "git://github.com/mislav/will_paginate.git"
plugin "old-restful-auth", :svn => "http://svn.techno-weenie.net/projects/plugins/restful_authentication/"

# Add gems to environment.rb
gem "jeremymcanally-context"
gem "bluecloth"

lib("crypto.rb") do
  "crypted_special_value = '#{rand}--#{Time.now}--#{rand(1337)}--'"
end

# ...file data from block return value.
# #initializer creates a new initializer file
initializer("crypto.rb") do
  salt = "--#{Time.now}--#{rand}--#{srand(Time.now.to_i)}"

  "SPECIAL_SALT = '#{salt}'"
end

rakefile("bootstrap.rake") do
  project = ask("What is the UNIX name of your project?")

  <<-TASK
    namespace :#{project} do
    task :bootstrap do
      puts "i like boots!"
    end
  end
  TASK
end

route "map.root :controller => :welcome"

No código acima estou definindo quais plugins devem ser instalados, quais gems devem ser adicionadas no arquivo environment.rb, também estou criando um arquivo chamado crypto.rb na pasta lib e um initializer com o mesmo nome, uma tarefa rake e adicicionando uma rota no arquivo conifg/routes.rb.

Este script pode estar armazenado na sua máquina, ou mesmo em algum site como o Gist do GitHub, por exemplo. E para criar um projeto baseado neste template basta fazer assim:

# Usando um arquivo local:
$ rails <application name> -m /path/to/my/template.rb

# Ou através de um URL:
$ rails <application name> --template=http://gist.github.com/31208.txt

Adeus Bort, Blank, Suspenders, starter-app, appstarter e tantos outros!


Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.3/3.0 ou superior. Você pode encontrar mais detalhes sobre esta e outras novidades acompanhando a série Edge Rails.

Comments