Добавление уведомлений Growl после завершения задач Rake

Есть ли способ добавить уведомления Growl в конец всех задач Rake?

Сначала я думал о создании задачи, которая Growls, и добавлении ее в качестве зависимости к задачам, от которых я хочу получать оповещения, но понял, что зависимости запускаются до начала задачи. Есть ли способ добавить задачи, которые будут выполняться после завершения определенных задач Rake?

Это было бы очень полезно, чтобы мне не приходилось сидеть в ожидании долгих задач.

** обновление от 17 августа 2010 г. **

Вот решение, как это сделать с помощью rownnotify... поместите это в свой Rakefile:

def growl(message)
  growlnotify = `which growlnotify`.chomp
  system %(#{growlnotify} -sm #{message})
end

task_names = Rake.application.top_level_tasks
task_names.each do |name|
  Rake.application[name].enhance { growl "'Task #{name} completed (#{Time.now})'" }
end

-- Отдайте должное Alkaline - см. его решение по использованию ruby-growl ниже --


person funkymunky    schedule 14.08.2010    source источник


Ответы (2)


Вот как вы можете неявно вызывать рычание для вызывающих (верхнего уровня) задач.

require 'rake'
require 'ruby-growl'

task :task1 do puts "Doing task 1"; sleep 1; end
task :task2 do puts "Doing task 2"; sleep 1; end
task :default => [:task1, :task2]

# Add a growl action to all top level tasks
task_names = Rake.application.top_level_tasks
task_names.each do |name|
  Rake.application[name].enhance {growl(name)}
end

def growl(name)
  g = Growl.new "localhost", "ruby-growl", ["ruby-growl Notification"]
  g.notify "ruby-growl Notification", "My Project", "Task #{name} completed"
end
person Bernard    schedule 14.08.2010
comment
Но это означает, что я должен добавить каждую другую задачу в качестве зависимости для :default, верно? Нет ли простого способа подражать этому поведению без запуска по умолчанию всех остальных задач, которые у меня есть? - person funkymunky; 16.08.2010
comment
Ваш вопрос был мне не ясен. Я обновил ответ для неявного вызова действия рычания в конце каждой задачи верхнего уровня (это задача, которую вы запрашиваете при вызове rake). - person Bernard; 17.08.2010
comment
Спасибо. В итоге я использовал гроулнотифи вместо руби-гроула, но совет о методе top_level_tasks и #enhance очень помог! - person funkymunky; 18.08.2010
comment
Я также выбрал гроулнотифи с github.com/visionmedia/growl. Не удалось подключить ruby-growl. - person vaughan; 15.03.2012

Гем rakegrowl делает это очень просто. Все, что вам нужно сделать, это установить гем rakegrowl и псевдоним с rake по rake -rubygems -r rakegrowl в ваш .bashrc.

person Eliza Brock Marcum    schedule 14.03.2011