Gerenciando plugins no Rails com Pez

03/09/08

Ultimamente, tenho usado muito mais Git, mas ainda tenho projetos versionados com Subversion. E como todos os meus plugins estão no Github, sinto uma grande dificuldade em mantê-los atualizados, já que utilizam SCMs diferentes.

Como já tinha lido muito sobre algumas ferramentas para esta finalidade, como Braid, resolvi testá-los. Infelizmente, nenhuma delas funcionava da maneira como eu gostaria. Então, como bom geek que sou, decidi fazer minha própria implementação: conheçam o Pez.

Pez é um gerenciador de plugins para Rails muito simples. A diferença principal em relação às ferramentas semelhantes é que ele não tenta adicionar as alterações/atualizações destes plugins no repositório do projeto. Em vez disso, ele cria um diretório central e faz apenas links simbólicos para o diretório vendor/plugins do projeto. Essa abordagem permite, por exemplo, que você mantenha um único diretório de plugins para diferentes projetos, desde que eles utilizem as mesmas revisões/branches.

Mas como não é só de notícias boas que se vive, aqui vem o lado negativo desta história: você não conseguirá usar o Pez se usa Windows, já que muitos comandos utilizados só estão disponíveis em sistemas *nix.

Se você se interessou, veja à seguir como instalá-lo e quais são os comandos disponíveis.

Instalando o Pez

O Pez está hospedado no Github e pode ser instalado com o comando abaixo.

sudo gem install fnando-pez --source=http://gems.github.com

Se quiser dar uma olhada no código ou gerar sua própria versão, siga os passos abaixo.

git clone git://github.com/fnando/pez.git
cd pez
rake gem:install

Usando o Pez na prática

Depois que o Pez tiver sido instalado, você deve executar o comando pez setup à partir da raíz de seu projeto. Isso irá criar um arquivo config/plugins.yml, que terá todas as informações dos plugins adicionados.

--- 
plugins: 
  rateableplugin: 
    repo: svn://rubyforge.org/var/svn/rateableplugin/trunk
    type: svn
  has_cache: 
    repo: git://github.com/fnando/has_cache.git
    type: git
    revision: 8aafca390796d79ed200000f3f13243b471b96fc
  cucumber: 
    repo: git://github.com/aslakhellesoy/cucumber.git
    type: git
    revision: 32d4f03d19bf33172bb7b48fed48e906a56598a7
    branch: html-visitor
  content_cache: 
    repo: http://svn.codahale.com/content_cache/
    type: svn
    revision: 20
development: /Users/fnando/Sites/sample/tmp/plugins
production: /Users/fnando/Sites/sample/tmp/plugins
 

Por padrão, os plugins são mantidos no diretório tmp/plugins. Você pode alterar essa configuração a qualquer momento, alterando o caminho relativo ao ambiente de seu projeto.

O Pez possui uma série de comandos. Para ver a lista completa, execute o comando pez help. Você pode visualizar a ajuda para um comando específico com o comando pez help [command].

Como você pode perceber, não tem muito segredo! Se você tiver alguma sugestão, envie um comentário. Se quiser contribuir, o projeto está no Github: http://github.com/fnando/pez.

Trivia: O nome foi tirado de um album do Less Than Jake chamado Pezcore, que eu estava ouvindo na hora que eu o programava. Ainda bem que não tenho gostos musicais bizarros! :)

Removendo plugins instalados como svn:externals no Rails

24/01/08

Se você utiliza plugins no Rails em um projeto versionado com Subversion, provavelmente já deve ter visto que é possível fazer tal instalação utilizando o svn:externals, através do argumento -x.

script/plugin install -x http://code.bitsweat.net/svn/object_transactions/

A diferença é que toda vez que você fizer o checkout de seu projeto, o Subversion irá buscar a última versão disponível no repositório que você adicionou. Isso é uma excelente maneira de deixar o plugin sempre atualizado. Mas e se por algum motivo você não precisa mais do plugin e quer removê-lo?

Você terá que fazer isso através de um comando do Subversion. Vá ao diretório de plugins e execute as linhas abaixo. Isso irá abrir o arquivo com a lista de repositórios externos do seu projeto. Neste exemplo editaremos tal arquivo usando o Vi.

$ cd vendor/plugins
$ svn propedit svn:externals . --editor-cmd vi

Editando o arquivo no Vi

Vá até a linha do repositório e pressione CTRL + → para removê-lo. Para salvar o arquivo, pressione ESC, digite :wq! e, então, pressione Enter. Remova o diretório do plugin com o comando rm -rf object_transactions.

Salvando o arquivo e fechando o editor

Agora, basta fazer o commit de seu projeto!

Detectando o navegador no Rails

28/01/07

Eu tinha um script em PHP que fazia detecção de browser e acabei de portá-lo para Ruby.

Ele é bem simples mas serve muito bem. Para utilizá-lo, basta instanciá-lo da seguinte maneira:

ua = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"
browser = Browser.new :user_agent => ua, 
                      :accept_language => 'en-gb'
 
puts browser.ie?            #false
puts browser.opera?         #false
puts browser.safari?        #false
puts browser.mozilla?       #true
puts browser.firefox?       #true
puts browser.linux?         #false
puts browser.windows?       #true
puts browser.mac?           #false
puts browser.platform       #Windows
puts browser.name           #Firefox
puts browser.version        #2
puts browser.full_version   #2.0.0.1
puts browser.language       #English/United Kingdom
puts browser.user_agent     #Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1

Você também pode instanciar o objeto passando o "request" como parâmetro:

@browser = Browser.new(:request => request)

Gosto de usá-lo para exibir um trecho específico de informação, da mesma maneira que a Mozilla Foundation faz quando você acessa a página do Firefox, sugerindo o instalador para seu sistema. Você pode fazer algo como:

Pegue o código direto do Subversion.

svn co http://svn.simplesideias.com.br/general/browser/

Update: A classe foi reformulada para deixar mais elegante. ;)