Module: Autotest::Growl
- Defined in:
- lib/autotest/growl.rb,
lib/autotest-growl/version.rb
Overview
Autotest::Growl
FEATUERS:
- Display autotest results as local or remote Growl notifications.
- Clean the terminal on every test cycle while maintaining scrollback.
SYNOPSIS:
~/.autotest require 'autotest/growl'
Constant Summary collapse
- VERSION =
"0.2.16"- GEM_PATH =
File.(File.join(File.dirname(__FILE__), '..', '..'))
- @@remote_notification =
false- @@one_notification_per_run =
false- @@sticky_failure_notifications =
false- @@custom_options =
''- @@clear_terminal =
true- @@hide_label =
false- @@show_modified_files =
false- @@image_dir =
File.join(GEM_PATH, 'img', 'ruby')
Class Method Summary collapse
-
.clear_terminal=(boolean) ⇒ Object
Whether to clear the terminal before running tests (default) or not.
-
.custom_options=(options) ⇒ Object
Custom options passed to the notification binary.
-
.growl(title, message, icon, priority = 0, sticky = false) ⇒ Object
Display a message through Growl.
-
.hide_label=(boolean) ⇒ Object
Whether to display the label (default) or not.
-
.image_dir=(path) ⇒ Object
Directory where notification icons can be found.
-
.one_notification_per_run=(boolean) ⇒ Object
Whether to limit the number of notifications per run to one or not (default).
-
.remote_notification=(boolean) ⇒ Object
Whether to use remote or local notificaton (default).
-
.show_modified_files=(boolean) ⇒ Object
Whether to display the modified files or not (default).
-
.sticky_failure_notifications=(boolean) ⇒ Object
Whether to make failure and error notifications sticky.
Instance Method Summary collapse
-
#ran_command ⇒ Object
Parse the RSpec and Test::Unit results and send them to Growl.
-
#ran_features ⇒ Object
Parse the Cucumber results and sent them to Growl.
-
#run_command ⇒ Object
Set the label and clear the terminal.
-
#updated ⇒ Object
Display the modified files.
Class Method Details
.clear_terminal=(boolean) ⇒ Object
Whether to clear the terminal before running tests (default) or not.
60 61 62 |
# File 'lib/autotest/growl.rb', line 60 def self.clear_terminal=(boolean) @@clear_terminal = boolean end |
.custom_options=(options) ⇒ Object
Custom options passed to the notification binary
54 55 56 |
# File 'lib/autotest/growl.rb', line 54 def self.=() = end |
.growl(title, message, icon, priority = 0, sticky = false) ⇒ Object
Display a message through Growl.
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/autotest/growl.rb', line 88 def self.growl(title, , icon, priority=0, sticky=false) growl = File.join(GEM_PATH, 'growl', 'growlnotify') sender = 'Autotest' image = File.join(@@image_dir, "#{icon}.png") case RbConfig::CONFIG['host_os'] when /mac os|darwin/i = %(-n "#{sender}" --image "#{image}" -p #{priority} -m "#{message}" "#{title}" #{'-s' if sticky} #{@@custom_options}) << " -H localhost" if @@remote_notification system %(#{growl} #{options} &) when /linux|bsd/i growl = 'notify-send' = %("#{title}" "#{message}" -i #{image} -t 5000 #{@@custom_options}) system %(#{growl} #{options}) when /windows|mswin|mingw|cygwin/i growl += '.com' image = `cygpath -w #{image}` if RbConfig::CONFIG['host_os'] =~ /cygwin/i = %(/a:"#{sender}" /n:"#{sender}-#{icon}" /i:"#{image}" /p:#{priority} /t:"#{title}" /s:#{sticky} /silent:true) << %( /r:"#{sender}-failed","#{sender}-passed","#{sender}-pending","#{sender}-error") system %(#{growl} #{message.inspect} #{options}) else raise "#{RbConfig::CONFIG['host_os']} is not supported by autotest-growl (feel free to submit a patch)" end end |
.hide_label=(boolean) ⇒ Object
Whether to display the label (default) or not.
66 67 68 |
# File 'lib/autotest/growl.rb', line 66 def self.hide_label=(boolean) @@hide_label = boolean end |
.image_dir=(path) ⇒ Object
Directory where notification icons can be found
78 79 80 81 82 83 84 |
# File 'lib/autotest/growl.rb', line 78 def self.image_dir=(path) if File.directory?(File.join(GEM_PATH, 'img', path)) @@image_dir = File.join(GEM_PATH, 'img', path) else @@image_dir = path end end |
.one_notification_per_run=(boolean) ⇒ Object
Whether to limit the number of notifications per run to one or not (default).
42 43 44 |
# File 'lib/autotest/growl.rb', line 42 def self.one_notification_per_run=(boolean) @@one_notification_per_run = boolean end |
.remote_notification=(boolean) ⇒ Object
Whether to use remote or local notificaton (default).
36 37 38 |
# File 'lib/autotest/growl.rb', line 36 def self.remote_notification=(boolean) @@remote_notification = boolean end |
.show_modified_files=(boolean) ⇒ Object
Whether to display the modified files or not (default).
72 73 74 |
# File 'lib/autotest/growl.rb', line 72 def self.show_modified_files=(boolean) @@show_modified_files = boolean end |
.sticky_failure_notifications=(boolean) ⇒ Object
Whether to make failure and error notifications sticky.
48 49 50 |
# File 'lib/autotest/growl.rb', line 48 def self.sticky_failure_notifications=(boolean) @@sticky_failure_notifications = boolean end |
Instance Method Details
#ran_command ⇒ Object
Parse the RSpec and Test::Unit results and send them to Growl.
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/autotest/growl.rb', line 136 Autotest.add_hook :ran_command do |autotest| unless @@one_notification_per_run && @ran_tests result = Autotest::Result.new(autotest) if result.exists? case result.framework when 'test-unit' if result.has?('test-error') growl @label + 'Cannot run some unit tests.', "#{result.get('test-error')} in #{result.get('test')}", 'error', 2, @@sticky_failure_notifications elsif result.has?('test-failed') growl @label + 'Some unit tests failed.', "#{result['test-failed']} of #{result.get('test-assertion')} in #{result.get('test')} failed", 'failed', 2, @@sticky_failure_notifications else growl @label + 'All unit tests passed.', "#{result.get('test-assertion')} in #{result.get('test')}", 'passed', -2 end when 'rspec' if result.has?('example-failed') growl @label + 'Some RSpec examples failed.', "#{result['example-failed']} of #{result.get('example')} failed", 'failed', 2, @@sticky_failure_notifications elsif result.has?('example-pending') growl @label + 'Some RSpec examples are pending.', "#{result['example-pending']} of #{result.get('example')} pending", 'pending', -1 else growl @label + 'All RSpec examples passed.', "#{result.get('example')}", 'passed', -2 end end else growl @label + 'Could not run tests.', '', 'error', 2, @@sticky_failure_notifications end @ran_tests = true end false end |
#ran_features ⇒ Object
Parse the Cucumber results and sent them to Growl.
168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
# File 'lib/autotest/growl.rb', line 168 Autotest.add_hook :ran_features do |autotest| unless @@one_notification_per_run && @ran_features result = Autotest::Result.new(autotest) if result.exists? case result.framework when 'cucumber' explanation = [] if result.has?('scenario-undefined') || result.has?('step-undefined') explanation << "#{result['scenario-undefined']} of #{result.get('scenario')} not defined" if result['scenario-undefined'] explanation << "#{result['step-undefined']} of #{result.get('step')} not defined" if result['step-undefined'] growl @label + 'Some Cucumber scenarios are not defined.', "#{explanation.join("\n")}", 'pending', -1 elsif result.has?('scenario-failed') || result.has?('step-failed') explanation << "#{result['scenario-failed']} of #{result.get('scenario')} failed" if result['scenario-failed'] explanation << "#{result['step-failed']} of #{result.get('step')} failed" if result['step-failed'] growl @label + 'Some Cucumber scenarios failed.', "#{explanation.join("\n")}", 'failed', 2, @@sticky_failure_notifications elsif result.has?('scenario-pending') || result.has?('step-pending') explanation << "#{result['scenario-pending']} of #{result.get('scenario')} pending" if result['scenario-pending'] explanation << "#{result['step-pending']} of #{result.get('step')} pending" if result['step-pending'] growl @label + 'Some Cucumber scenarios are pending.', "#{explanation.join("\n")}", 'pending', -1 else growl @label + 'All Cucumber features passed.', '', 'passed', -2 end end else growl @label + 'Could not run features.', '', 'error', 2, @@sticky_failure_notifications end @ran_features = true end false end |
#run_command ⇒ Object
Set the label and clear the terminal.
127 128 129 130 131 132 |
# File 'lib/autotest/growl.rb', line 127 Autotest.add_hook :run_command do @label = File.basename(Dir.pwd).upcase + ': ' if !@@hide_label print "\n"*2 + '-'*80 + "\n"*2 print "\e[2J\e[f" if @@clear_terminal false end |
#updated ⇒ Object
Display the modified files.
114 115 116 117 118 119 120 121 122 123 |
# File 'lib/autotest/growl.rb', line 114 Autotest.add_hook :updated do |autotest, modified| @ran_tests = @ran_features = false if @@show_modified_files if modified != @last_modified growl @label + 'Modifications detected.', modified.collect {|m| m[0]}.join(', '), 'info', 0 @last_modified = modified end end false end |