Ajuda para os iniciantes em Ruby 1

Publicado por Carlos Brando em 25 de Junho de 2008

Resolvi abrir aqui no blog um espaço para que o Rafael Barbosa dê uma noticia para a comunidade:

A comunidade brasileira tem mais uma fonte de conhecimento e encontro relacionada a Ruby e Rails. Na rede Freenode do IRC você encontra o canal ##ruby-br onde poderá esclarecer dúvidas, se informar e interagir com outros desenvolvedores brasileiros.

Existe uma iniciativa no canal para manter um wiki onde os usuários possam armazenar conteúdo útil a comunidade, disponível no endereço http://ror.fireho.com.

Para acessar o canal, utilize seu cliente preferido de irc e conecte-se a irc.freenode.net e ao canal ##ruby-br (com 2 hashes mesmo!).

Alguns clientes que vocês podem usar:

Autotest Notification Gem 6

Publicado por Carlos Brando em 12 de Maio de 2008

Vocês já acompanharam aqui no blog a dificuldade que tive para fazer o Autotest funcionar com o Growl. Acho que testei todos os scripts prontos que encontrei pela internet e até alguns gems como o test_notifier do Nando Vieira, mas não sei porque nada funcionou aqui.

Então resolvi botar a mãe na massa e criar o meu próprio script para integrar o Growl com o autotest. Logo em seguida o Alexandre adaptou o mesmo script para fazê-lo funcionar com o LibNotify no Linux. Resolvemos então criar um repositório para jogar o código e permitir uma atualização fácil do script.

Foi quando comecei a escrever um tutorial explicando como colocar tudo aquilo para funcionar que percebi que não ia dar muito certo. Eu precisava de algo que fosse instalado com uma linha de comando ou algo parecido.

Então criei o Autotest Notification. Um gem fácil e rápido de instalar, e que por enquanto só funciona no Mac (com Growl) e no Linux (com o LibNotify).

Antes de instalar, claro que você precisa ter o ZenTest instalado e o Growl ou LibNotify, dependendo do seu sistema operacional.

Depois basta executar esta linha no terminal:

sudo gem install carlosbrando-autotest-notification --source=http://gems.github.com

Eu queria tudo em uma linha só, mas não era possível… após a instalação você vai precisar rodar mais um comando, para deixar o gem no modo automático:

an-install

Para desligar o notificador basta executar:

an-uninstall

Não disse que era simples?

O projeto está no GitHub e se alguém estiver afim de adaptá-lo para rodar no Windows ou melhorá-lo de alguma forma. Pode criar um fork e me enviar o código via request.

Autotest + Growl (atualização) 2

Publicado por Carlos Brando em 09 de Maio de 2008

Para os que estão usando Autotest + Growl, eu fiz mais uma alteração no script de exibição de alertas. Para os interessados, é só clicar aqui.

Dei uma melhorada nele e incluí suporte ao Test::Unit, além do RSpec.

Alteração no script do Autotest com Growl

Publicado por Carlos Brando em 28 de Abril de 2008

Apenas uma atualização do script deste post.

# ~.autotest
module Autotest::Growl
  FAIL    = -1
  PENDING = 0
  SUCCESS = 1

  FAIL_IMAGE    = "/Users/carlosbrando/.autotest_images/fail.png"
  SUCCESS_IMAGE = "/Users/carlosbrando/.autotest_images/pass.png"

  Autotest.add_hook :ran_command do |at|
    result = at.results.last
    if result
      examples = result =~ /(\d+) example/ ? $1.to_i : 0
      failures = result =~ /(\d+) failure/ ? $1.to_i : 0
      pendings = result =~ /(\d+) pending/ ? $1.to_i : 0

      unless last_result_was(examples, failures, pendings)
        msg = "#{examples} example#{ 's' if examples != 1}, #{failures} failure#{ 's' if failures != 1}, #{pendings} pending"

        if failures > 0
          growl "FAIL", msg, FAIL_IMAGE, 2
        else
          growl "Pass", msg, SUCCESS_IMAGE
        end
      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)
      system "growlnotify -n autotest --image #{img} -p #{pri} -m #{msg.inspect} #{title}"
    end

    def last_result_was(examples, failures, pendings)
      @last_result ||= [0, 0, 0]

      if @last_result == [examples, failures, pendings]
        true
      else
        @last_result = [examples, failures, pendings]
        false
      end
    end
  end
end

http://pastie.caboo.se/188205

Este script está preparado apenas para o RSpec, se alguém alterá-lo, não se esqueça de me avisar!

Eu tive de mudar o script, porque ele ficava o tempo todo exibindo mensagens no Growl. Agora uma mensagem só é exibida quando algo mudou desde a última mensagem.

O Alexandre fez algumas alterações no script anterior para funcionar no Ubuntu com Libnotify.

ZenTest com Growl, mais uma vez… 6

Publicado por Carlos Brando em 26 de Abril de 2008

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.

# ~.autotest
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
      # examples = result =~ /(\d+) examples/ ? $1.to_i : 0
      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.