Desde que instalei o Leopard venho sofrendo para integrar o ZenTest com o Growl. Quando achei que tinha encontrado a solução para o problema, logo depois uma atualização no ZenTest ferrou tudo de novo.
Finalmente começamos a usar RSpec em um projeto de verdade aqui na Surgeworks e eu comecei a me lamentar do porque do maldito do Growl não estar funcionando. Naveguei e segui quase todas as dicas que encontrei pelo caminho para fazer isto funcionar e nada deu certo. Tentei o Test Notifier do Nando Vieira, que também não funcionou aqui…
Então resolvi que eu tinha de parar de ficar pegando scripts prontos na internet e coçar minha própria coceira…
Na verdade foi muito mais fácil do que imaginei, mas como foi algo que estava me dando dor de cabeça, segue abaixo o script que criei para fazer o ZenTest funcionar com o Growl no Leopard. Na verdade este fica sendo apenas mais um dos tantos por aí… pode ser também que não funcione em sua máquina, mas pode servir de modelo para que você crie o seu.
Para saber o que fazer com este script, leia o artigo que escrevi em fevereiro explicando como fiz a mesma coisa naquela época, e só troque o script antigo por este.
require 'autotest/growl'
module Autotest::Growl
FAIL_IMAGE = "/Users/carlosbrando/.autotest_images/fail.png"
PENDING_IMAGE = "/Users/carlosbrando/.autotest_images/pending.png"
SUCCESS_IMAGE = "/Users/carlosbrando/.autotest_images/pass.png"
Autotest.add_hook :ran_command do |at|
result = at.results.last
if result
failures = result =~ /(\d+) failure/ ? $1.to_i : 0
pendings = result =~ /(\d+) pending/ ? $1.to_i : 0
if failures > 0
growl "Tests Failed", "#{failures} test#{ 's' if failures > 1 } failed", FAIL_IMAGE
elsif pendings > 0
growl "Tests Pending", "#{pendings} test#{ pendings == 1 ? ' is pending' : 's are pending'}", PENDING_IMAGE
else
growl "Tests Passed", "All tests passed", SUCCESS_IMAGE
end
code = (failures > 0) ? 31 : (pendings > 0) ? 33 : 32
puts "\e[#{code}m#{'=' * 80}\e[0m\n\n"
end
end
class << self
def growl(title, msg, img = SUCCESS_IMAGE, pri = 0)
title = "Autotest Running" if title == "autotest running"
msg += " at #{Time.now.strftime("%I:%M %p")}" if msg == "Started"
system "growlnotify -n autotest --image #{img} -p #{pri} -m #{msg.inspect} #{title}"
end
end
end
Não sei porque (e por pura preguiça não procurei saber ainda) mas o WordPress troca o caractere de aspas no código, então se na hora de copiá-lo ficar tudo zoado, pegue o código aqui.