Criando Application Templates no Rails 2.3.2

Uma das novidades mais bacanas da nova versão do Rails é o uso de modelos para criação de novos projetos, os chamados Application Templates. Com eles, você pode configurar toda a estrutura padrão do seu projeto, como plugins, gems, arquivos de inicialização, configurar git e tudo mais, em um arquivo .rb reutilizável. O Carlos Brando postou sobre isso aqui e aqui, antes mesmo da versão 2.3.2 ser lançada.

A ideia é simples. Ao criar um novo projeto, indicamos o caminho para o template com a opcão -m ao comando rails.

rails minha_app -m /caminho/para/o/template.rb

Se for um projeto já existente, existe uma rake para aplicar o template.

rake rails:template LOCATION=/caminho/para/o/template.rb

Na página do autor existe um exemplo de um template bem simples:


run "rm public/index.html"
generate(:scaffold, "person name:string")
route "map.root :controller => 'people'"
rake("db:migrate")
git :init
git :add => "."
git :commit => "-a -m 'Initial commit'"

Dá para perceber que seu uso é bem intuitivo. Esse template remove o arquivo public/index.html, cria um scaffold Person, mapeia a rota inicial para PeopleController e roda a migração. Depois inicializa o repositório git e commita tudo. Legal, né?!
Outros templates podem ser obtidos aqui e aqui.

Bom, mas a idéia desse post é criarmos nosso próprio template.

Como várias pessoas usam o brazlian-rails em seus projetos, vamos aqui criar nosso template configurando para tal.

Primeiro vamos configurar as gems. Crie um arquivo ruby chamado brazilian-rails-template.rb e adicione o código abaixo.

#brazilian-rails-template.rb
gem "brdinheiro",       :version => ">= 2.1.6"
gem "brcep",            :version => ">= 2.1.6"
gem "brcpfcnpj",        :version => ">= 2.1.6"
gem "brdata",           :version => ">= 2.1.6"
gem "brdinheiro",       :version => ">= 2.1.6"
gem "brhelper",         :version => ">= 2.1.6"
gem "brnumeros",        :version => ">= 2.1.6"
gem "brstring",         :version => ">= 2.1.6"
gem "brI18n",           :version => ">= 2.1.6"

O uso de :version é totalmente opcional. Assim como as opções :source e :lib.

Lembre-se que o método gem() não instala as gems para você. Se quiser fazê-lo, adicione a linha abaixo ao seu arquivo.

rake "gems:install"

Qualquer rake task pode ser executada. Caso precise permissões de sudo para rodar alguma delas, use a opção :sudo => true. Existe, ainda, a opção :env para você setar qual ambiente deseja que a rake seja executada. Por exemplo:

rake "db:migrate", :env => "test"

Existe também o método plugin(), para configurar, advinhem?, seus plugins.

Ok, voltemos para nosso template.
Uma vez que a internacionalização  do brazilian-rails é, por padrão, desabilitada, precisamos que nosso template carregue o suporte a I18n da gem brI18n. Uma forma de fazer isso é criar um arquivo dentro de config/initializers que faça a chamada à require 'brI18n'. Isso pode ser feito assim:

#brazilian-rails-template.rb
#...
initializer "load_brI18n.rb", <<-CODE
require 'brI18n'
CODE

O método initializer() cria um arquivo dentro de config/initializers/ com o nome passado com argumento. O último argumento vai ser impresso dentro do arquivo recém criado. A mesma ideia serve para o método lib(), que gera um arquivo dentro da pasta lib/, e para vendor(), dentro de vendor/. Existe, ainda, o file(), que gera o arquivo em um caminho absoluto:

file "app/components/foo.rb", <<-CODE
class Foo
end
CODE

Legal, assim já temos as gems configuradas. Vamos agora para o git.

#brazilian-rails-template.rb
#...
git :init

file '.gitignore', <<-CODE
log/*.log
log/*.pid
db/*.db
db/*.sqlite3
db/schema.rb
tmp
.DS_Store
doc/api
doc/app
config/database.yml
nbproject
CODE

inside("config") do
run "cp database.yml database.yml.sample"
end

Aqui iniciei o repositório git e criei o arquivo .gitignore com o file(). Note que usei o método run(), dentro de inside() para executar o comando 'cp' no diretório config.
Meu amigo João Vitor me ensinou que é um boa prática nunca versionar o arquivo database.yml, então joguei ele (o arquivo, não meu amigo João :) dentro de .gitignore e versionei sua cópia inicial.

Bom, mas talvez nem sempre seja interessante fazer isso. Que tal perguntar ao usuário se ele desejar fazer uma cópia do database.yml? Para esse tipo de interação, existe o método yes?(), que recebe uma string como argumento, a imprime na tela e espera uma resposta "y" ou "yes" para sim e qualquer coisa diferente para não.

#brazilian-rails-template.rb
#...
git :init

file '.gitignore', <<-CODE
log/*.log
log/*.pid
db/*.db
db/*.sqlite3
db/schema.rb
tmp
.DS_Store
doc/api
doc/app
config/database.yml
nbproject
CODE

if yes?("Deseja fazer uma cópia de config/database.yml?")
run "cp config/database.yml config/database.yml.sample"
end

Pronto, melhor assim. Agora é só comitar

#brazilian-rails-template.rb
#...
git :add => "."
git :commit => "-a -m 'Initial commit'"

Por fim, nosso brazilian-rails-template.rb vai ficar assim:

gem "brdinheiro",       :version => ">= 2.1.6"
gem "brcep",            :version => ">= 2.1.6"
gem "brcpfcnpj",        :version => ">= 2.1.6"
gem "brdata",           :version => ">= 2.1.6"
gem "brdinheiro",       :version => ">= 2.1.6"
gem "brhelper",         :version => ">= 2.1.6"
gem "brnumeros",        :version => ">= 2.1.6"
gem "brstring",         :version => ">= 2.1.6"
gem "brI18n",           :version => ">= 2.1.6"

initializer "load_brI18n.rb", <<-CODE
require 'brI18n'
CODE

git :init

file '.gitignore', <<-CODE
log/*.log
log/*.pid
db/*.db
db/*.sqlite3
db/schema.rb
tmp
.DS_Store
doc/api
doc/app
config/database.yml
nbproject
CODE

if yes?("Deseja fazer uma cópia de database.yml?")
run "cp config/database.yml config/database.yml.sample"
end

git :add => "."
git :commit => "-a -m 'Initial commit'"

Esse template está no GitHub, fique a vontade para alterá-lo.

Se preferir, você pode apontar diretamente para o Gist:
rails minha_app -m http://gist.github.com/90973.txt

E é isso.

Abraços e bons códigos!

About these ads

5 Responses to “Criando Application Templates no Rails 2.3.2”


  1. 1 Maykon Luís Capellari Abril 7, 2009 às 17:59

    Muito bom o artigo parabéns e sucesso ;)

  2. 2 uchoaaa Abril 8, 2009 às 12:28

    Opa, Maykon, valeu! :)

  3. 3 gaucho Abril 17, 2009 às 08:45

    Fala Uhoa!!!! Tá famoso hein? na ruby-br e tudo .. mandando bem!!

    Qnd tu vem pro rio?

    abraço!


  1. 1 Conheça as ‘Application Templates’ no Rails 2.3 | Ruby Brasil Trackback em Abril 10, 2009 às 05:01
  2. 2 Criando Application Templates no Rails 2.3.2 | Ruby Brasil Trackback em Abril 15, 2009 às 05:05

Deixar uma resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

WordPress.com Logo

Está a comentar usando a sua conta WordPress.com Log Out / Modificar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Log Out / Modificar )

Facebook photo

Está a comentar usando a sua conta Facebook Log Out / Modificar )

Google+ photo

Está a comentar usando a sua conta Google+ Log Out / Modificar )

Connecting to %s




Categorias

Por data

Abril 2009
S T Q Q S S D
« Mar   Abr »
 12345
6789101112
13141516171819
20212223242526
27282930  

Arquivo



Seguir

Get every new post delivered to your Inbox.

%d bloggers like this: