Criando geradores com Thor
17/12/10
O Thor é uma excelente biblioteca para quem quer criar geradores. Possui diversos métodos para criar e copiar arquivos e diretórios, alterar arquivos, criar links simbólicos, ler arquivos remotos, dentre outras ações. Ele é especialmente bom quando você quer criar uma gem que irá gerar uma estrutura de arquivos e diretórios, como o Ruby on Rails faz.
A primeira coisa a fazer é criar nossa classe que será um gerador.
require "thor"
require "thor/group"
class MyGem::Generator < Thor::Group
include Thor::Actions
desc "Generate a new filesystem structure "
end
A classe Thor::Group é perfeita para geradores, já que ela permite executar todas as ações de uma única vez. Para utilizar as ações do Thor, você só precisa incluir o módulo Thor::Actions.
Veja algumas das ações possíveis:
class MyGem::Generator < Thor::Group
include Thor::Actions
desc "Generate a new filesystem structure "
def self.source_root
File.dirname(__FILE__) + "/../../templates"
end
def create_config_file
copy_file "config.yml", "config/mygem.yml"
end
def create_git_files
copy_file "gitignore", ".gitignore"
create_file "images/.gitkeep"
create_file "text/.gitkeep"
end
def create_output_directory
empty_directory "output"
end
end
Note que o método MyGem::Generator.source_root define o diretório onde nossos arquivos de template estão localizados.
Agora, para executar nosso gerador, você só precisa instanciar a classe MyGem::Generator.
generator = MyGem::Generator.new
generator.destination_root = "/some/path"
generator.invoke_all
Perceba que estamos definindo o diretório de destino. Este é um método opcional, que usa o diretório atual como valor padrão.
Para saber mais sobre o Thor, acesse a documentação. Para ver a lista completa de ações disponíveis, veja a documentação de Thor::Actions.
- Permalink
- Trackback
- Comentários (1)
- Ao som de: NOFX – All His Suits Are Torn
Textos escritos por
Comentários #
Legal o post, cara. Também sou fã de Thor:
https://github.com/leandrosilva/ebuilder
https://github.com/leandrosilva/pivotal-tracker-console
https://github.com/leandrosilva/otp_kickoff
Deixe um comentário