rspec - ¿Cómo enviar notificaciones de RubyMine a Growl?
spork (3)
Estoy tratando de averiguar cómo hacer que la consola de RubyMine envíe mensajes para gruñir. Específicamente, ya que ejecuto Rspec & Spork a través de RubyMine, me gustaría recibir notificaciones de Growl de cuántas pruebas pasaron y fracasaron.
Tenía la versión de línea de comandos de esta funcionalidad trabajando a través de las gemas Autotest y RedGreen, pero ninguna de las dos gemas parece conservar su utilidad dentro de RubyMine.
¿Alguien ha empujado con éxito las notificaciones de Growl de RubyMine?
¿Alguien puede pensar en alguna de las herramientas o mecanismos que podrían permitir la notificación?
No sé sobre RubyMine pero esto debería hacer en la Terminal:
rake db:setup && growlnotify -m ''Finished DB setup''
Podría desencadenar la ejecución de rspec con un AppleScript, luego, al finalizar, llame a Growl.
Esta integración de Applecript para RubyMine da una idea de una manera de enganchar eventos en Growl.
No es una respuesta completa, pero es un enfoque razonable.
Puede ser este código te ayudará
# -*- ruby -*-
module Autotest::RedGreen
Autotest.send(:alias_method, :real_ruby, :ruby)
Autotest.send(:define_method, :ruby) do |*args|
real_ruby + %[ -rrubygems -e "require ''redgreen''" ]
end
# Clean the output so other modules can work correctly
Autotest.add_hook :ran_command do |at|
at.results.each do |r|
r.gsub!("/033[31m", "")
r.gsub!("/033[32m", "")
r.gsub!("/033[33m", "")
r.gsub!("/033[0m", "")
end
end
end
module Autotest::Growl
AUTOTEST_IMAGE_ROOT = "~/.autotest_images"
def self.growl(title, msg, img, pri=0, sticky="")
system "growlnotify -n autotest --image #{img} -p #{pri} -m ''#{msg.inspect} #{title}'' #{sticky}"
end
Autotest.add_hook :red do |at|
growl("FAIL", "#{get_results(at)}", "#{AUTOTEST_IMAGE_ROOT}/fail.png", 2)
end
Autotest.add_hook :green do |at|
growl("Pass", "#{get_results(at)}", "#{AUTOTEST_IMAGE_ROOT}/pass.png")
end
private
def self.get_results(at)
results = [at.results].flatten.join("/n")
if results.include? ''tests''
output = results.slice(/(/d+)/s+tests?,/s*(/d+)/s+assertions?,/s*(/d+)/s+failures? (,/s*(/d+)/s+errors)?/)
else
output = results.slice(/(/d+)/s+examples?,/s*(/d+)/s+failures?(,/s*(/d+)/s+not implemented)?/)
end
output
end
end
# Esclusioni
Autotest.add_hook :initialize do |at|
%w{.hg .git .svn stories tmtags Rakefile Capfile README spec/spec.opts spec/rcov.opts vendor/gems autotest svn-commit .DS_Store }.each do |exception|
at.add_exception(exception)
end
at.add_mapping(/spec//defaults.rb/) do |f, _|
at.files_matching %r%^spec/(controllers|helpers|lib|models|views)/.*/.rb$%
end
end