Ruby para automatização diária
Para nós que utilizamos sistemas Unix temos várias formas de automatizar tarefas repetitivas, principalmente que os que utilizam Mac Os. Integrado ao OsX temos ferramentas como o Automator que permitem a criação de fluxos de trabalho e que são bem simples de serem criados, também é possível customizar e criar várias novas tarefas e fluxos para o OsX através de AppleScript.
Para quem utiliza muito terminal, ou precisa executar tarefas administrativas também é possivel utilizar ShellScript para criar automatizações.
Todas estas ferramentas são muito interessantes, mas tem um pequeno porém. As vezes fluxos mais complexos no Automator são bem chatos de serem criados e considero Apple Script e Shell Script linguagens bem feias, grandes e improdutivas. Então nada melhor do que usar Ruby para estas situações.
O que eu normalmente faço é criar uma pasta bin dentro da pasta do meu usuário. Dentro desta pasta bin eu coloco todos os arquivos de configuração do terminal bash ( não vou entra em detalhes sobre como dividir os arquivos de configuração pois já foi bem explicado no Peepcode aqui) e também uma série de arquivos ruby que serão executáveis. Basta adicionar esta pasta bin ao seu path do terminal e você terá seus mini-aplicativos ruby acessiveis independente de qual diretório estiver.
Crie uma pasta bin e dentro do seu arquivo .bashrc acrescente ao final a pasta bin (normalmente como abaixo):
export PATH=/opt/local/bin:/opt/local/sbin:${PATH}:/usr/local/mysql/bin:~/bin
Agora basta você criar o seus scripts ruby sempre se lembrando de não colocar a extensão .rb e de acrescentar o comentário com bang para tornar o arquivo executável (normalmente assim #!/usr/bin/env ruby no OsX).
Seguem abaixo alguns do scripts que utilizo mais no meu dia a dia:
- Cria um arquivo .gitignore com entradas comuns
- Redimensiona imagens e cria thumbnails
- Renomeia arquivos em série
- Instala a chave pública em máquinas remotas
- Abre o resultado do grep no textmate
- Pull de diversos diretórios diferentes
- Apaga e cria repositórios locais ou remótos de uma vez no Git
- Mostra alterações que você ainda não fez push para um repo Git
- Reorganiza a identação de um arquivo ruby
Se você possui algum script por favor compartilhe também :D (não coloquei tudo no github pois eu tenho uma série de coisas particulares dentro da pasta bin também).