class Object

Public Instance Methods

around_chatwork(task_name) click to toggle source
# File lib/capistrano/around_chatwork.rb, line 32
def around_chatwork(task_name)
  start_time = nil

  before_task = Rake::Task.define_task("#{task_name}:__before__") do
    message = Capistrano::AroundChatwork.format_message(
      message:   fetch(:starting_message),
      task_name: task_name,
    )
    Capistrano::AroundChatwork.post_chatwork(message)
    start_time = Time.now
  end

  after_task = Rake::Task.define_task("#{task_name}:__after__") do
    elapsed_time = Time.now - start_time
    message = Capistrano::AroundChatwork.format_message(
      message:      fetch(:ending_message),
      task_name:    task_name,
      elapsed_time: elapsed_time,
    )
    Capistrano::AroundChatwork.post_chatwork(message)
  end

  target_task = Rake::Task[task_name]

  target_task.instance_eval do
    define_singleton_method :invoke_with_failure_message do |*args|
      begin
        invoke_without_failure_message(*args)
      rescue Exception => error
        elapsed_time = Time.now - start_time
        message = Capistrano::AroundChatwork.format_message(
          message:      fetch(:failure_message),
          task_name:    task_name,
          elapsed_time: elapsed_time,
          error:        error,
        )
        Capistrano::AroundChatwork.post_chatwork(message)
        raise
      end
    end
    alias :invoke_without_failure_message :invoke
    alias :invoke :invoke_with_failure_message
  end

  target_task.enhance([before_task]) do
    Rake::Task[after_task].invoke
  end
end