Growl, Autotest and Rspec
Idea behind this is a working environment that spends more time in the editor, rather than switching to the terminal …
Autotest
Autotest (which is part of ZenTest) is something you run on your Rails project. What it does is detect saved changes and automatically runs test.
Growl
Growl is a universal notifier for OSX. What it does is pop up messages in temporary windows to tell you about things.
RSpec
Is the testing framework I am using - blogged about in other articles
Installing Growl
Growl has a clever .dmg which makes installation easy. However we also need to install growlnotify
. A script to do was located in /Volumes/Growl\ 1.1.2/Extras/
when the .dmg was opened. When successful running in terminal which growlnotify
will return something e.g. /usr/local/bin/growlnotify
Configuring Autotest
Had to trawl a few different sources to find code to do this on my system. Basically put following code in ~/.autotest
and then restarted autotest
. Also down loaded images and put them in the path shown in the code.
module Autotest::Growl
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 :ran_command do |at|
results = [at.results].flatten.join("\n")
output = results.slice(/(\d+)\s+examples?,\s*(\d+)\s+failures?(,\s*(\d+)\s+pending)?/)
if output
if $~[2].to_i > 0
growl "Test Results", "#{output}", "~/.autotest_images/rails_fail.png", 2
else
growl "Test Results", "#{output}", "~/.autotest_images/rails_ok.png"
end
end
end
end
If this doesn’t work debug the code by examining output e.g. put puts output
before the if output
line.